texlive[60007] Master/texmf-dist: xstring (21jul21)

commits+karl at tug.org commits+karl at tug.org
Wed Jul 21 22:46:42 CEST 2021


Revision: 60007
          http://tug.org/svn/texlive?view=revision&revision=60007
Author:   karl
Date:     2021-07-21 22:46:42 +0200 (Wed, 21 Jul 2021)
Log Message:
-----------
xstring (21jul21)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/generic/xstring/README
    trunk/Master/texmf-dist/doc/generic/xstring/test_etex.pdf
    trunk/Master/texmf-dist/doc/generic/xstring/test_latex.pdf
    trunk/Master/texmf-dist/doc/generic/xstring/xstring-en.pdf
    trunk/Master/texmf-dist/doc/generic/xstring/xstring-en.tex
    trunk/Master/texmf-dist/doc/generic/xstring/xstring-fr.pdf
    trunk/Master/texmf-dist/doc/generic/xstring/xstring-fr.tex
    trunk/Master/texmf-dist/tex/generic/xstring/xstring.tex

Modified: trunk/Master/texmf-dist/doc/generic/xstring/README
===================================================================
--- trunk/Master/texmf-dist/doc/generic/xstring/README	2021-07-21 20:46:23 UTC (rev 60006)
+++ trunk/Master/texmf-dist/doc/generic/xstring/README	2021-07-21 20:46:42 UTC (rev 60007)
@@ -1,8 +1,8 @@
                               _________________
 
                                xstring package
-                                   v 1.83
-                                 2019/02/06
+                                   v 1.84
+                                 2021/07/21
                               _________________
 
 This package provides macros manipulating strings for programming use.

Modified: trunk/Master/texmf-dist/doc/generic/xstring/test_etex.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/generic/xstring/test_latex.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/generic/xstring/xstring-en.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/generic/xstring/xstring-en.tex
===================================================================
--- trunk/Master/texmf-dist/doc/generic/xstring/xstring-en.tex	2021-07-21 20:46:23 UTC (rev 60006)
+++ trunk/Master/texmf-dist/doc/generic/xstring/xstring-en.tex	2021-07-21 20:46:42 UTC (rev 60007)
@@ -178,7 +178,7 @@
 
 \textbf{Important}: in the following, a \argu{number} can be an integer written with numeric chars, a counter, or the result of an arithmetic operation made with the command \verbinline|\numexpr|.\smallskip
 
-All the macros of \Xstring are displayed in {\makeatletter\color{@xs at keywordsxstring}red}.
+All the macros of \Xstring are displayed in {\makeatletter\color{@xs at keywordsxstring}blue}.
 
 \subsection{The tests}
 \subsubsection{\ttfamily\textbackslash IfSubStr}

Modified: trunk/Master/texmf-dist/doc/generic/xstring/xstring-fr.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/generic/xstring/xstring-fr.tex
===================================================================
--- trunk/Master/texmf-dist/doc/generic/xstring/xstring-fr.tex	2021-07-21 20:46:23 UTC (rev 60006)
+++ trunk/Master/texmf-dist/doc/generic/xstring/xstring-fr.tex	2021-07-21 20:46:42 UTC (rev 60007)
@@ -182,7 +182,7 @@
 
 \textbf{Important} : dans les macros qui suivent, sauf cas spécifié, un \argu{nombre} est un nombre entier, un compteur, ou le résultat d'une opération arithmétique effectuée à l'aide de la primitive \verb|\numexpr|.\smallskip
 
-Dans le reste du texte, les macros de \Xstring sont affichées en {\makeatletter\color{@xs at keywordsxstring}rouge}.
+Dans le reste du texte, les macros de \Xstring sont affichées en {\makeatletter\color{@xs at keywordsxstring}bleu}.
 
 \subsection{Les tests}
 \subsubsection{\ttfamily\textbackslash IfSubStr}

Modified: trunk/Master/texmf-dist/tex/generic/xstring/xstring.tex
===================================================================
--- trunk/Master/texmf-dist/tex/generic/xstring/xstring.tex	2021-07-21 20:46:23 UTC (rev 60006)
+++ trunk/Master/texmf-dist/tex/generic/xstring/xstring.tex	2021-07-21 20:46:42 UTC (rev 60007)
@@ -1,12 +1,12 @@
-% !TeX encoding = ISO-8859-1
+% !TeX encoding = UTF-8
 % Ce fichier contient le code de l'extension "xstring"
 %
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %                                                                    %
 \def\xstringname               {xstring}                             %
-\def\xstringversion              {1.83}                              %
+\def\xstringversion              {1.84}                              %
 %                                                                    %
-\def\xstringdate              {2019/02/06}                           %
+\def\xstringdate              {2021/07/21}                           %
 %                                                                    %
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %                                                                    %
@@ -32,7 +32,7 @@
 	\immediate\write-1 {Package: xstring \xstringdate\space v\xstringversion\space String manipulations (CT)}%
 \fi
 \newcount\integerpart
-\newcount\decimalpart% compteurs utilis\xE9s par xstring
+\newcount\decimalpart% compteurs utilisés par xstring
 
 \edef\restorexstringcatcode{\catcode\number`\_ =\number\catcode`\_\relax}
 \catcode`\_=11
@@ -76,14 +76,14 @@
 		\xs_read_verb
 }
 
-\def\setverbdelim#1{% d\xE9finit quel est le d\xE9limiteur de verb
+\def\setverbdelim#1{% définit quel est le délimiteur de verb
 	\xs_exparg\xs_ifempty{\xs_gobarg#1}%
 		{}
 		{\errmessage{Package xstring Warning: verb delimiter "\detokenize{#1}" is not a single token}}%
-	\def\xs_read_verb##1#1##2#1{\endgroup\xs_assign_verb{##2}}% on appelle l'ex\xE9cution de fin
+	\def\xs_read_verb##1#1##2#1{\endgroup\xs_assign_verb{##2}}% on appelle l'exécution de fin
 }
 
-% Assigne l'argument entre d\xE9limiteur verb dans la sc #1
+% Assigne l'argument entre délimiteur verb dans la sc #1
 \def\verbtocs#1{%
 	\def\xs_assign_verb##1{\def#1{##1}}%
 	\xs_toks_toverb
@@ -99,7 +99,7 @@
 
 \def\tokenize#1#2{%
 	\begingroup
-		\xs_def\xs_reserved_A{#2}% on d\xE9veloppe en accord avec \fullexpandarg ou \noexpandarg
+		\xs_def\xs_reserved_A{#2}% on développe en accord avec \fullexpandarg ou \noexpandarg
 		\everyeof\expandafter{\xs_twozeroschars#1}%
 		\endlinechar-1
 		\expandafter\xs_assigntokenizeresult\scantokens\expandafter{\expandafter\relax\xs_reserved_A}% on fait l'assignation
@@ -111,18 +111,18 @@
 \def\xs_ledef{\long\edef}
 
 \def\normalexpandarg{%
-	\let\xs_def\xs_ldef% on d\xE9finit \xs_call avec \def
+	\let\xs_def\xs_ldef% on définit \xs_call avec \def
 	\def\xs_expand##1{\unexpanded\expandafter{##1}}%
 }
 \let\noexpandarg\normalexpandarg% synonyme
 
 \def\expandarg{%
-	\let\xs_def\xs_ldef% on d\xE9finit \xs_call avec \def
+	\let\xs_def\xs_ldef% on définit \xs_call avec \def
 	\def\xs_expand##1{\unexpanded\expandafter\expandafter\expandafter{##1}}%
 }
 
 \def\fullexpandarg{%
-	\let\xs_def\xs_ledef% on d\xE9finit\xs_call avec \edef
+	\let\xs_def\xs_ledef% on définit\xs_call avec \edef
 	\def\xs_expand##1{##1}% et on neutralise \xs_expand
 }
 
@@ -144,7 +144,7 @@
 	\endcsname
 }
 
-% Cette macro interne prend la 1ere unit\xE9 syntaxique de #1 et assigne le r\xE9sultat \xE0 #2
+% Cette macro interne prend la 1ere unité syntaxique de #1 et assigne le résultat à #2
 \long\def\xs_returnfirstsyntaxunit#1#2{%
 	\let\xs_toks\relax
 	\xs_ifempty{#1}
@@ -179,18 +179,18 @@
 		}%
 }
 
-% Cette macro interne est utilis\xE9e dans les macros \xE9toil\xE9es pour :
-% 1) d\xE9velopper l'argument selon qu'on a choisit \fullexpandarg
-%    ou \normalexpandarg, et ceci \xE0 l'aide de la macro \xs_def
-% 2) Ensuite, on d\xE9tokenize ce d\xE9veloppement de fa\xE7on n'avoir plus que
+% Cette macro interne est utilisée dans les macros étoilées pour :
+% 1) développer l'argument selon qu'on a choisit \fullexpandarg
+%    ou \normalexpandarg, et ceci à l'aide de la macro \xs_def
+% 2) Ensuite, on détokenize ce développement de façon n'avoir plus que
 %    des catcodes de 10 pour les espaces et 12 pour le reste.
 \long\def\xs_expand_and_detokenize#1#2{%
 	\long\def#1{#2}%
-	\expandafter\edef\expandafter#1\expandafter{\xs_expand#1}% on d\xE9veloppe #2 selon le mode de d\xE9veloppement
-	\long\edef#1{\detokenize\expandafter{#1}}% puis on d\xE9tokenize et on assigne \xE0 #1
+	\expandafter\edef\expandafter#1\expandafter{\xs_expand#1}% on développe #2 selon le mode de développement
+	\long\edef#1{\detokenize\expandafter{#1}}% puis on détokenize et on assigne à #1
 }
 
-\long\def\xs_expand_and_assign#1#2{\xs_def#1{#2}}% on d\xE9veloppe #2 selon \fullexpandarg ou \normalexpandarg
+\long\def\xs_expand_and_assign#1#2{\xs_def#1{#2}}% on développe #2 selon \fullexpandarg ou \normalexpandarg
 
 \def\xs_arglist{0########1########2########3########4########5########6########7########8########9}
 
@@ -205,7 +205,7 @@
 \def\xs_assign_one_arg#1{\xs_exparg\xs_assign_one_arg_i{\number\numexpr#1-1}{#1}}
 \def\xs_assign_one_arg_i#1#2{\def\xs_assign_one_arg_ii##1#1##2#2##3\_nil{\def\xs_myarg{##2#2}}\expandafter\xs_assign_one_arg_ii\xs_arglist\_nil}
 
-% #1 : num\xE9ro du 1er argument; #2 : nombre de lignes; #3 argument optionnel; #4 : dernier num\xE9ro de l'argument devant \xEAtre d\xE9tokenis\xE9 si \xE9toile
+% #1 : numéro du 1er argument; #2 : nombre de lignes; #3 argument optionnel; #4 : dernier numéro de l'argument devant être détokenisé si étoile
 \def\xs_buildlines#1#2#3#4{%
 	\let\xs_newlines\empty
 	\let\xs_newargs\empty
@@ -218,7 +218,7 @@
 				\edef\xs_reserved_B{\ifnum##1>#4 xs_def\else xs_assign\fi}%
 				}% et s'il y a un argument optionnel alors, on met des crochets
 				{\xs_eaddtomacro\xs_newargs{\expandafter[\xs_reserved_B]}%
-				\def\xs_reserved_B{xs_def}% ne pas d\xE9tok\xE9niser l'argument optionnel grace au \xs_def
+				\def\xs_reserved_B{xs_def}% ne pas détokéniser l'argument optionnel grace au \xs_def
 				}%
 			}
 			{\xs_eaddtomacro\xs_newargs{\expandafter{\xs_reserved_B}}%
@@ -238,7 +238,7 @@
 		{\let\xs_reserved_D\relax\xs_newmacro_0}%
 }
 
-% #1 : dernier num\xE9ro de l'argument devant \xEAtre d\xE9tokenis\xE9
+% #1 : dernier numéro de l'argument devant être détokenisé
 % #2 : nom de la macro publique
 % #3 : argument optionnel (vide si pas d'arg optionnel)
 % #4 : nombre d'arguments obligatoires
@@ -263,7 +263,7 @@
 				\noexpand\xs_testopt{\expandafter\noexpand\csname\xs_reserved_A __\endcsname}{\ifx\xs_def\xs_ledef#3\else\unexpanded{#3}\fi}}%
 		\fi
 	}%
-	% Que fait \xs_reserved_B ? Il d\xE9finit :
+	% Que fait \xs_reserved_B ? Il définit :
 	% si #3 est vide : \NOM{\xs_ifstar{\let\xs_assign\xs_expand_and_detokenize\xs_NOM__}{\let\xs_assign\xs_expand_and_assign\xs_NOM__}}
 	% si #3 existe   : \NOM{\xs_ifstar{\let\xs_assign\xs_expand_and_detokenize\xs_NOM_}{\let\xs_assign\xs_expand_and_assign\xs_NOM_}}
 	%                  \xs_NOM_{\xs_testopt{\xs_NOM__}{#3}}}
@@ -281,7 +281,7 @@
 	\ifnum#5=1 \edef\xs_reserved_D{\noexpand\noexpand\noexpand\xs_testopt{\unexpanded\expandafter{\xs_reserved_D}}{}}\fi
 	\xs_edefaddtomacro\xs_reserved_C{{\unexpanded\expandafter{\xs_reserved_D}}\noexpand\xs_call}%
 	\xs_edefaddtomacro\xs_reserved_B{{\unexpanded\expandafter{\xs_reserved_C}}}%
-	% Que fait \xs_reserved_B ? Il d\xE9finit par exemple pour 3 arguments obligatoires et 1 facultatif :
+	% Que fait \xs_reserved_B ? Il définit par exemple pour 3 arguments obligatoires et 1 facultatif :
 	%    \def\xs_NOM__[##2]##3##4##5{%
 	%          \xs_def\xs_arg_i{##2}\xs_assign\xs_arg_ii{##3}\xs_assign\xs_arg_iii{##4}\xs_asign\xs_arg_iv{##5}%
 	% si #5=0: \edef\xs_call{\noexpand\xs_NOM[\xs_expand\xs_arg_i]{\xs_expand\xs_arg_ii}{\xs_expand\xs_arg_iii}{\xs_expand\xs_arg_iv}}%
@@ -292,15 +292,15 @@
 		\def\expandafter\noexpand\csname\xs_reserved_A\endcsname
 			\xs_myarg\ifnum#5=1 [\unexpanded{##}\number\numexpr\ifx\empty#3\empty#4+1\else#4+2\fi]\fi
 	}%
-	% Que fait \xs_reserved_B ? Il d\xE9finit par exemple pour 3 arguments obligatoires et 1 facultatif :
+	% Que fait \xs_reserved_B ? Il définit par exemple pour 3 arguments obligatoires et 1 facultatif :
 	%    \def \xs_NOM[##2]##3##4##5[##6]{#6}
 	\long\xs_reserved_B
 }
 
-% macro g\xE9n\xE9rique qui lit \xs_reserved_C us par us
-% 3 sous-routines sont appel\xE9es \xE0 des moments cl\xE9 :
-% \xs_atendofgroup      (un groupe se finit, appel r\xE9cursif)
-% \xs_atbegingroup      (un groupe vient d'\xEAtre ouvert)
+% macro générique qui lit \xs_reserved_C us par us
+% 3 sous-routines sont appelées à des moments clé :
+% \xs_atendofgroup      (un groupe se finit, appel récursif)
+% \xs_atbegingroup      (un groupe vient d'être ouvert)
 % \xs_atnextsyntaxunit  (la future US n'est pas un groupe)
 \def\xs_read_reserved_C{%
 	\xs_exparg\xs_ifempty{\xs_reserved_C}%
@@ -329,9 +329,9 @@
 		}%
 }
 
-% macro g\xE9n\xE9rique qui lit \xs_reserved_D en proc\xE9dant \xE0 des tests avec \IfBeginWith
-% 1 sous-routine est appel\xE9e :
-% \xs_atoccurfound      (une occurrence a \xE9t\xE9 trouv\xE9e)
+% macro générique qui lit \xs_reserved_D en procédant à des tests avec \IfBeginWith
+% 1 sous-routine est appelée :
+% \xs_atoccurfound      (une occurrence a été trouvée)
 \def\xs_read_reserved_D{%
 	\xs_exparg\xs_ifempty{\xs_reserved_D}%
 		{\xs_ifnum{\xs_nestlevel=0 }
@@ -403,11 +403,11 @@
 		}%
 }
 
-% \xs_cutafteroccur coupe l'argument #1 apr\xE8s la #3\xE8me occurrence de #2
+% \xs_cutafteroccur coupe l'argument #1 après la #3ème occurrence de #2
 % \xs_reserved_C : contient ce qui se trouve avant cette occurrence
 % \xs_reserved_D : contient ce qui se trouve avant cette occurrence y compris cette occurrence
-% \xs_reserved_E : contient ce qui se trouve apr\xE8s l'occurrence
-% si l'occurrence n'existe pas ou qu'un des arguments est vide, toutes les chaines renvoy\xE9es sont vides
+% \xs_reserved_E : contient ce qui se trouve après l'occurrence
+% si l'occurrence n'existe pas ou qu'un des arguments est vide, toutes les chaines renvoyées sont vides
 \long\def\xs_cutafteroccur#1#2#3{%
 	\xs_ifnum{#3<1 }
 		{\let\xs_reserved_C\empty\let\xs_reserved_E\empty\gdef\groupID{}}
@@ -425,13 +425,13 @@
 				\noexpand\decimalpart=\number\decimalpart\relax
 				}%
 			\expandafter\xs_exitallgroups\__temp
-			\xs_gobarg% mange l'appel r\xE9cursif \xs_read_reserved_D dans \xs_read_reserved_D
+			\xs_gobarg% mange l'appel récursif \xs_read_reserved_D dans \xs_read_reserved_D
 			}
 			{\xs_eaddtomacro\xs_reserved_C{\xs_reserved_E}%
 			}%
 	}%
 	\xs_read_reserved_D
-	\xs_ifnum{\decimalpart=\numexpr(#3)\relax}% occurrence trouv\xE9e ?
+	\xs_ifnum{\decimalpart=\numexpr(#3)\relax}% occurrence trouvée ?
 		{\let\xs_reserved_E\xs_reserved_D
 		\xs_exparg{\def\xs_reserved_D}{\xs_reserved_C#2}%
 		}
@@ -454,7 +454,7 @@
 
 \long\def\xs_IfBeginWith_i#1#2{%
 	\xs_ifempty{#2}%
-		{\xs_execfirst% #2 est vide, tous les tests sont pass\xE9s avec succ\xE8s : on renvoie #3
+		{\xs_execfirst% #2 est vide, tous les tests sont passés avec succès : on renvoie #3
 		}
 		{\xs_ifempty{#1}%
 			{\xs_execsecond% #1 est vide, c'est que #2 est + long que #1 : on renvoie #4
@@ -461,9 +461,9 @@
 			}
 			{\xs_returnfirstsyntaxunit{#2}\xs_reserved_B
 			\xs_returnfirstsyntaxunit{#1}\xs_reserved_A
-			\xs_ifx{\xs_reserved_A\xs_reserved_B}% il y a \xE9galit\xE9...
+			\xs_ifx{\xs_reserved_A\xs_reserved_B}% il y a égalité...
 				{\xs_removefirstsyntaxunit{#2}\xs_reserved_B
-				\xs_removefirstsyntaxunit{#1}\xs_reserved_A% on enl\xE8ve les 1ere unit\xE9s syntaxiques
+				\xs_removefirstsyntaxunit{#1}\xs_reserved_A% on enlève les 1ere unités syntaxiques
 				\xs_exptwoargs\xs_IfBeginWith_i\xs_reserved_A\xs_reserved_B
 				}
 				{\xs_execsecond
@@ -538,7 +538,7 @@
 	\expandafter\xs_testdot\afterinteger\_nil
 	\xs_ifx{\empty\afterdecimal}
 		{\xs_ifnum{\decimalpart=0 }
-			{\xs_execfirst% partie d\xE9cimale constitu\xE9e de 0 --> seul cas o\xF9 on renvoie vrai
+			{\xs_execfirst% partie décimale constituée de 0 --> seul cas où on renvoie vrai
 			}
 			{\expandafter\xs_defafterinteger\xs_after_intpart\relax\_nil
 			\xs_execsecond
@@ -583,9 +583,9 @@
 	\expandafter\xs_defafterdecimal\afterinteger\_nil
 }
 
-% test d'\xE9galit\xE9 sur des chaines (et des chaines contenant des nombres)
+% test d'égalité sur des chaines (et des chaines contenant des nombres)
 \long\def\xs_IfStrEqFalse_i#1#2{\let\xs_reserved_A\xs_execsecond}
-\long\def\xs_IfStrEqFalse_ii#1#2{% renvoie vrai si les 2 arg sont d\xE9cimaux et s'ils sont \xE9gaux, faux sinon
+\long\def\xs_IfStrEqFalse_ii#1#2{% renvoie vrai si les 2 arg sont décimaux et s'ils sont égaux, faux sinon
 	\xs_IfDecimal{#1}%
 		{\xs_IfDecimal{#2}%
 			{\ifdim#1pt=#2pt
@@ -592,27 +592,27 @@
 				\let\xs_reserved_A\xs_execfirst
 			\else
 				\let\xs_reserved_A\xs_execsecond
-			\fi% les 2 sont d\xE9cimaux : on fait le test
+			\fi% les 2 sont décimaux : on fait le test
 			}%
-			{\let\xs_reserved_A\xs_execsecond}% un seul est d\xE9cimal
+			{\let\xs_reserved_A\xs_execsecond}% un seul est décimal
 		}%
-		{\let\xs_reserved_A\xs_execsecond}% #1 n'est pas d\xE9cimal
+		{\let\xs_reserved_A\xs_execsecond}% #1 n'est pas décimal
 }
 
-\long\def\xs_TestEqual#1#2{% teste si les 2 arguments sont \xE9gaux
+\long\def\xs_TestEqual#1#2{% teste si les 2 arguments sont égaux
 	\def\xs_reserved_A{#1}\def\xs_reserved_B{#2}%
 	\xs_ifx{\xs_reserved_A\xs_reserved_B}
-		{\let\xs_reserved_A\xs_execfirst}% \xE9galit\xE9 parfaite des 2 chaines
+		{\let\xs_reserved_A\xs_execfirst}% égalité parfaite des 2 chaines
 		{\xs_reserved_D{#1}{#2}}%
 	\xs_reserved_A
 }
 
-\xs_newmacro*2\IfStrEq{}{2}{0}{% teste si les deux chaines sont \xE9gales
+\xs_newmacro*2\IfStrEq{}{2}{0}{% teste si les deux chaines sont égales
 	\let\xs_reserved_D\xs_IfStrEqFalse_i
 	\xs_TestEqual{#1}{#2}%
 }
 
-\xs_newmacro*2\IfEq{}{2}{0}{% teste si les 2 arguments (chaine ou nombre) sont \xE9gaux
+\xs_newmacro*2\IfEq{}{2}{0}{% teste si les 2 arguments (chaine ou nombre) sont égaux
 	\let\xs_reserved_D\xs_IfStrEqFalse_ii
 	\xs_TestEqual{#1}{#2}%
 }
@@ -629,12 +629,12 @@
 		{\xs_IfStringCase\IfEq}%
 }
 
-\long\def\xs_IfStringCase#1#2#3{% #1=macro avec ou sans \xE9toile  #2=argument \xE0 tester  #3=liste des {<cas>}{code>}
-	\long\def\xs_testcase##1##2##3\_nil{% lit les 2 premieres unit\xE9s syntaxiques dans ##1 et ##2. Les autres dans ##3
+\long\def\xs_IfStringCase#1#2#3{% #1=macro avec ou sans étoile  #2=argument à tester  #3=liste des {<cas>}{code>}
+	\long\def\xs_testcase##1##2##3\_nil{% lit les 2 premieres unités syntaxiques dans ##1 et ##2. Les autres dans ##3
 		#1{#2}{##1}% compare
-			{\xs_testopt{\xs_IfStringCase_ii{##2}}{}}% le test est positif, on ex\xE9cute le code correspondant et on mange l'argument optionnel ## BUGfix dans 1.82
+			{\xs_testopt{\xs_IfStringCase_ii{##2}}{}}% le test est positif, on exécute le code correspondant et on mange l'argument optionnel ## BUGfix dans 1.82
 			{\xs_ifempty{##3}%
-				{\xs_testopt{\xs_IfStringCase_i}{}}% s'il n'y a plus de cas, on ex\xE9cute le code <autres cas> ## BUGfix dans 1.82
+				{\xs_testopt{\xs_IfStringCase_i}{}}% s'il n'y a plus de cas, on exécute le code <autres cas> ## BUGfix dans 1.82
 				{\xs_testcase##3\_nil}% sinon, on recommence avec ce qui reste
 			}%
 	}%
@@ -644,19 +644,19 @@
 \long\def\xs_IfStringCase_i[#1]{#1}
 \long\def\xs_IfStringCase_ii#1[#2]{#1}
 
-% Renvoie ce qui est \xE0 gauche de l'occurence n\xB0#1 de la sous chaine #3 dans la chaine #2
+% Renvoie ce qui est à gauche de l'occurence n°#1 de la sous chaine #3 dans la chaine #2
 \xs_newmacro*3\StrBefore{1}{2}{1}{%
 	\xs_cutafteroccur{#2}{#3}{#1}%
 	\xs_exparg\xs_assign_xstringresult{\xs_reserved_C}{#4}%
 }
 
-% Renvoie ce qui est \xE0 droite de l'occurence n\xB0#1 de la sous chaine #3 dans la chaine #2
+% Renvoie ce qui est à droite de l'occurence n°#1 de la sous chaine #3 dans la chaine #2
 \xs_newmacro*3\StrBehind{1}{2}{1}{%
 	\xs_cutafteroccur{#2}{#3}{#1}%
 	\xs_exparg\xs_assign_xstringresult{\xs_reserved_E}{#4}%
 }
 
-% Renvoie ce qui est strictement compris entre les occurrences n\xB0#1 et n\xB0#2
+% Renvoie ce qui est strictement compris entre les occurrences n°#1 et n°#2
 % des chaines #4 et #5 dans la chaine #3
 \xs_newmacro*4\StrBetween{1,1}{3}{1}{\xs_StrBetween_i[#1]{#2}{#3}{#4}[#5]}
 \long\def\xs_StrBetween_i[#1,#2]#3#4#5[#6]{%
@@ -675,7 +675,7 @@
 \def\saveexploremode{\let\xs_saveexploremode\xs_exploregroups}
 \def\restoreexploremode{\let\xs_exploregroups\xs_saveexploremode}
 
-% Remplace les #1 premi\xE8res occurences de la chaine #3
+% Remplace les #1 premières occurences de la chaine #3
 % par la chaine #4 dans la chaine #2
 \xs_newmacro\StrSubstitute{0}{3}{1}{%
 	\def\xs_reserved_D{#2}\let\xs_reserved_C\empty\def\xs_reserved_E{#3}%
@@ -697,12 +697,12 @@
 		}%
 }
 
-% Supprime les #1 premi\xE8res occurrences de #3 dans #2
+% Supprime les #1 premières occurrences de #3 dans #2
 \xs_newmacro\StrDel{0}{2}{1}{\xs_StrSubstitute[#1]{#2}{#3}{}[#4]}
 
 \def\xs_exitallgroups{\ifnum\xs_nestlevel>0 \endgroup\expandafter\xs_exitallgroups\fi}
 
-% Compte combien d'unit\xE9s syntaxiques contient la chaine #1 ?
+% Compte combien d'unités syntaxiques contient la chaine #1 ?
 \xs_newmacro\StrLen{}{1}{1}{%
 	\def\xs_reserved_C{#1}\decimalpart0 \def\xs_nestlevel{0}\gdef\groupID{0}%
 	\let\xs_atbegingroup\relax
@@ -712,11 +712,11 @@
 	\xs_exparg\xs_assign_xstringresult{\number\decimalpart}{#2}%
 }
 
-% Macro interne fermant autant de groupes que n\xE9cessaire pour trouver une unit\xE9 syntaxique derri\xE8re
+% Macro interne fermant autant de groupes que nécessaire pour trouver une unité syntaxique derrière
 \def\xs_continuetonext{%
 	\xs_exparg\xs_ifempty{\xs_reserved_C}%
 		{\ifnum\xs_nestlevel>0
-			\xs_endgroup_eaddtomacro\xs_reserved_B{\expandafter{\xs_reserved_B}}% on concat\xE8ne
+			\xs_endgroup_eaddtomacro\xs_reserved_B{\expandafter{\xs_reserved_B}}% on concatène
 			\expandafter\xs_continuetonext% on recommence
 		\fi}
 		{}%
@@ -729,7 +729,7 @@
 		{\endgroup\xs_eearg{\gdef\groupID}{\expandafter\groupID\expandafter,\number\integerpart}}%
 }
 
-% Cette macro coupe la chaine #1 apr\xE8s l'unit\xE9 syntaxique n\xB0#2
+% Cette macro coupe la chaine #1 après l'unité syntaxique n°#2
 \def\StrSplit{%
 	\xs_ifstar
 		{\let\xs_reserved_E\xs_continuetonext\StrSplit_i}%
@@ -738,8 +738,8 @@
 
 \xs_newmacro\StrSplit_i{}{2}{0}{\xs_StrSplit_ii{#2}{#1}\xs_StrSplit_iii}
 
-% Cette macro interne coupe la chaine #2 apr\xE8s l'unit\xE9 syntaxique n\xB0#1
-% Le d\xE9but est assign\xE9 dans \xs_reserved_B et la fin dans \xs_reserved_C
+% Cette macro interne coupe la chaine #2 après l'unité syntaxique n°#1
+% Le début est assigné dans \xs_reserved_B et la fin dans \xs_reserved_C
 \long\def\xs_StrSplit_ii#1#2{%
 	\let\xs_reserved_B\empty\def\xs_reserved_C{#2}\def\xs_reserved_D{#1}\gdef\groupID{}%
 	\ifnum#1>0
@@ -759,7 +759,7 @@
 				{\ifx\xs_reserved_C\empty\xs_reserved_E\fi
 				\edef\__temp{\def\noexpand\xs_reserved_B{\unexpanded\expandafter{\xs_reserved_B}}\def\noexpand\xs_reserved_C{\unexpanded\expandafter{\xs_reserved_C}}}%
 				\expandafter\xs_exitallgroups\__temp
-				\xs_gobarg% mange l'appel r\xE9cursif \xs_read_reserved_C dans \xs_read_reserved_C
+				\xs_gobarg% mange l'appel récursif \xs_read_reserved_C dans \xs_read_reserved_C
 				}
 				{}%
 		}%
@@ -770,8 +770,8 @@
 \def\xs_StrSplit_iii#1#2{\let#1\xs_reserved_B\let#2\xs_reserved_C}
 
 % StrCut[n]{<texte>}{<motif>}\macroA\macroB
-% \macroA re\xE7oit ce qui se trouve avant la n \xE8me occurrence <motif> dans <texte>
-% \macroB re\xE7oit ce qui est apr\xE8s cette n \xE8me occurrence
+% \macroA reçoit ce qui se trouve avant la n ème occurrence <motif> dans <texte>
+% \macroB reçoit ce qui est après cette n ème occurrence
 \xs_newmacro*3\StrCut{1}{2}{0}{%
 	\xs_ifempty{#3}%
 		{\gdef\groupID{}\let\xs_reserved_C\empty\let\xs_reserved_E\empty
@@ -794,7 +794,7 @@
 				\noexpand\decimalpart=\number\decimalpart\relax
 				}%
 			\expandafter\xs_exitallgroups\__temp
-			\xs_gobarg% stoppe la r\xE9cursivit\xE9 dans \xs_read_reserved_D
+			\xs_gobarg% stoppe la récursivité dans \xs_read_reserved_D
 			}
 			{\xs_eaddtomacro\xs_reserved_C{\xs_reserved_E}%
 			}%
@@ -807,7 +807,7 @@
 \long\def\xs_StrCut_iii#1#2{\let#1\xs_reserved_C\let#2\xs_reserved_E}
 
 % De la chaine #1, renvoie ce qui se trouve entre les positions
-%  #2 et #3, unit\xE9s syntaxiques aux positions compris !
+%  #2 et #3, unités syntaxiques aux positions compris !
 \xs_newmacro\StrMid{}{3}{1}{%
 	\begingroup
 		\noexploregroups
@@ -821,7 +821,7 @@
 	\gdef\groupID{}%
 }
 
-% supprime #2 unit\xE9s syntaxiques \xE0 gauche dans la chaine #1
+% supprime #2 unités syntaxiques à gauche dans la chaine #1
 \xs_newmacro\StrGobbleLeft{}{2}{1}{%
 	\let\xs_reserved_E\relax
 	\xs_StrSplit_ii{#2}{#1}%
@@ -828,7 +828,7 @@
 	\xs_exparg\xs_assign_xstringresult{\xs_reserved_C}{#3}%
 }
 
-% extrait de #1 la chaine \xE0 gauche de longueur #2
+% extrait de #1 la chaine à gauche de longueur #2
 \xs_newmacro\StrLeft{}{2}{1}{%
 	\let\xs_reserved_E\relax
 	\xs_StrSplit_ii{#2}{#1}%
@@ -835,7 +835,7 @@
 	\xs_exparg\xs_assign_xstringresult{\xs_reserved_B}{#3}%
 }
 
-% supprime #2 unit\xE9s syntaxiques \xE0 droite dans la chaine #1
+% supprime #2 unités syntaxiques à droite dans la chaine #1
 \xs_newmacro\StrGobbleRight{}{2}{1}{%
 	\xs_StrLen{#1}[\xs_reserved_D]%
 	\let\xs_reserved_E\relax
@@ -843,7 +843,7 @@
 	\xs_exparg\xs_assign_xstringresult{\xs_reserved_B}{#3}%
 }
 
-% renvoie #2 unit\xE9s syntaxiques \xE0 la droite de la chaine #1
+% renvoie #2 unités syntaxiques à la droite de la chaine #1
 \xs_newmacro\StrRight{}{2}{1}{%
 	\xs_StrLen{#1}[\xs_reserved_D]%
 	\let\xs_reserved_E\relax
@@ -858,10 +858,10 @@
 		\let\xs_atbegingroup\relax
 		\def\xs_atendofgroup{\expandafter\endgroup\expandafter\decimalpart\number\decimalpart\relax}%
 		\def\xs_atnextsyntaxunit{%
-			\ifnum\decimalpart=\xs_reserved_D% la n i\xE8me US est atteinte ?
-				\edef\__temp{\def\noexpand\xs_reserved_B{\unexpanded\expandafter{\xs_reserved_A}}}% on capture l'US en cours qui est celle cherch\xE9e
+			\ifnum\decimalpart=\xs_reserved_D% la n ième US est atteinte ?
+				\edef\__temp{\def\noexpand\xs_reserved_B{\unexpanded\expandafter{\xs_reserved_A}}}% on capture l'US en cours qui est celle cherchée
 				\expandafter\xs_exitallgroups\__temp
-				\expandafter\xs_gobarg% stoppe la r\xE9cursivit\xE9 dans \xs_read_reserved_C
+				\expandafter\xs_gobarg% stoppe la récursivité dans \xs_read_reserved_C
 			\fi
 		}%
 		\xs_read_reserved_C
@@ -905,8 +905,8 @@
 \def\restorecomparemode{\let\xs_comparecoeff\xs_saved_comparecoeff}
 
 % Compare les deux arguments #1 et #2
-% Renvoie 0 s'ils sont \xE9gaux et renvoie la
-% position de la premiere unit\xE9 syntaxiques diff\xE9rente sinon
+% Renvoie 0 s'ils sont égaux et renvoie la
+% position de la premiere unité syntaxiques différente sinon
 \xs_newmacro*2\StrCompare{}{2}{1}{%
 	\def\xs_reserved_A{#1}%
 	\def\xs_reserved_B{#2}%
@@ -931,13 +931,13 @@
 		\xs_exparg\xs_returnfirstsyntaxunit{\xs_reserved_D}\xs_reserved_B
 		\xs_ifx{\xs_reserved_B\xs_reserved_A}
 			{\xs_exparg\xs_ifempty{\xs_reserved_A}%
-				{\xs_StrCompare_iii{##1}% les 2 unit\xE9s syntaxiques sont \xE9gales, on renvoie la position
+				{\xs_StrCompare_iii{##1}% les 2 unités syntaxiques sont égales, on renvoie la position
 				}
-				{\def\xs_next{\xs_exparg\xs_StrCompare_ii{\number\numexpr##1+1}}% les 2 unit\xE9s syntaxiques sont \xE9gales et non vides, on recommence
+				{\def\xs_next{\xs_exparg\xs_StrCompare_ii{\number\numexpr##1+1}}% les 2 unités syntaxiques sont égales et non vides, on recommence
 				\xs_exparg\xs_removefirstsyntaxunit{\xs_reserved_C}\xs_reserved_C
 				\xs_exparg\xs_removefirstsyntaxunit{\xs_reserved_D}\xs_reserved_D
 				}%
-			}% les 2 unit\xE9s syntaxiques sont diff\xE9rentes : on renvoie la position
+			}% les 2 unités syntaxiques sont différentes : on renvoie la position
 			{\xs_StrCompare_iii{##1}%
 			}%
 		\xs_next
@@ -959,10 +959,10 @@
 			{\xs_assign_xstringresult{}{#3}% s'il ne reste plus rien, on renvoie vide
 			}
 			{\xs_exparg\xs_returnfirstsyntaxunit{\xs_reserved_C}\xs_reserved_D
-			\xs_ifx{\bgroup\xs_toks}% si la 1\xE8re unit\xE9 syntaxique est un groupe explicite
+			\xs_ifx{\bgroup\xs_toks}% si la 1ère unité syntaxique est un groupe explicite
 				{\advance\decimalpart1 % on augmente le compteur
-				\xs_ifnum{\decimalpart=\xs_reserved_A\relax}% on est au groupe cherch\xE9 lors de la profondeur courante ?
-					{\xs_ifx{\empty\xs_reserved_B}% on est \xE0 la profondeur maximale ?
+				\xs_ifnum{\decimalpart=\xs_reserved_A\relax}% on est au groupe cherché lors de la profondeur courante ?
+					{\xs_ifx{\empty\xs_reserved_B}% on est à la profondeur maximale ?
 						{\xs_exparg\xs_assign_xstringresult{\xs_reserved_D}{#3}}% on renvoie ce groupe
 						{\xs_exparg{\expandafter\xs_StrFindGroup_i\xs_reserved_D}{\xs_reserved_B}[#3]}% on recommence avec ce groupe et les profondeurs de recherche restantes
 					}
@@ -1003,7 +1003,7 @@
 			\def\xs_atbegingroup{\let\xs_reserved_B\empty}%
 			\def\xs_atnextsyntaxunit{\xs_eeaddtomacro\xs_reserved_B{\xs_reserved_A}}%
 			\def\xs_reserved_C{#2}%
-			\xs_StrExpand_i{#1}% Appel de la macro r\xE9cursive
+			\xs_StrExpand_i{#1}% Appel de la macro récursive
 			}
 			{\def\xs_reserved_B{#2}%
 			}
@@ -1043,111 +1043,111 @@
 
                         H I S T O R I Q U E
 ------------------------------------------------------------------------------
-v1.0    4/7/2008 : - Package achev\xE9.
-         7/7/2008 : - Package publi\xE9 sur CTAN.
+v1.0    4/7/2008 : - Package achevé.
+         7/7/2008 : - Package publié sur CTAN.
 ------------------------------------------------------------------------------
 v1.1    15/8/2008
-   - Le package ne n\xE9cessite plus LaTeX et est d\xE9sormais utilisable sous
+   - Le package ne nécessite plus LaTeX et est désormais utilisable sous
      Plain eTeX.
    - Ajout des macros \IfInteger et \IfDecimal.
-     Pour cette derni\xE8re, la partie enti\xE8re et la partie d\xE9cimale sont
-     r\xE9cup\xE9rables dans les compteurs \integerpart et \decimalpart. Ce
-     qu'il reste apr\xE8s qu'un caract\xE8re non attendu soit rencontr\xE9 est
+     Pour cette dernière, la partie entière et la partie décimale sont
+     récupérables dans les compteurs \integerpart et \decimalpart. Ce
+     qu'il reste après qu'un caractère non attendu soit rencontré est
      dispo dans \xs_remainafterdecimal
    - Correction d'un bug dans \tokenize :
-        suppression de l'expansion avec \normalexpandarg pour \xE9viter le bug
-        avec les lettres accentu\xE9es dans l'exemple : \tokenize\aa{\xE9\xF9}
-   - Am\xE9lioration du code de la plupart des macros.
-   - \xE9criture d'une routine \xs_newmacro d\xE9finissant les  macros.
-   - Suppression de tous les compteurs grace \xE0 \numexpr.
-   - Nouvelles fonctionnalit\xE9s internes dans :
+        suppression de l'expansion avec \normalexpandarg pour éviter le bug
+        avec les lettres accentuées dans l'exemple : \tokenize\aa{éù}
+   - Amélioration du code de la plupart des macros.
+   - écriture d'une routine \xs_newmacro définissant les  macros.
+   - Suppression de tous les compteurs grace à \numexpr.
+   - Nouvelles fonctionnalités internes dans :
       \IfSubStr
-        ajout des chaines se trouvant avant et apr\xE8s l'occurrence test\xE9e
+        ajout des chaines se trouvant avant et après l'occurrence testée
         dans les sc \xs_behind_IfSubStr et \xs_before_IfSubStr
       \StrCount
-        a) ajout de ce qui se trouve apr\xE8s la derni\xE8re occurrence dans la
+        a) ajout de ce qui se trouve après la dernière occurrence dans la
            sc \xs_StrCount_afterlastocccur
-        b) la macro ne d\xE9pend plus d'aucune autre
+        b) la macro ne dépend plus d'aucune autre
 ------------------------------------------------------------------------------
 v1.2    23/8/2008
-   - Am\xE9lioration du code de \StrMid \StrGobbleLeft, \StrLeft,
-     \StrGobbleRight et \StrRight \xE0 l'aide de la nouvelle macro
+   - Amélioration du code de \StrMid \StrGobbleLeft, \StrLeft,
+     \StrGobbleRight et \StrRight à l'aide de la nouvelle macro
      \xs_StrSplit_i
    - Nouveau test \IfStrEq qui compare 2 chaines
    - Nouveau test \IfEq qui compare 2 chaines (ou 2 nombres si les 2 chaines
      contiennent un nombre)
    - Correction d'un bug dans \xs_formatnumber. La macro n'envisageait pas le
-     cas o\xF9 son argument \xE9tait vide ce qui faiasait planter
+     cas où son argument était vide ce qui faiasait planter
      \IfDecimal{}{V}{F} et \IfInteger{}{V}{F}
 ------------------------------------------------------------------------------
 v1.3    21/9/2008
-  - Am\xE9lioration du code, mise en place de r\xE9cursivit\xE9s terminales dans
-    toutes les macros r\xE9cursives, simplification de \xs_TestEqual en
+  - Amélioration du code, mise en place de récursivités terminales dans
+    toutes les macros récursives, simplification de \xs_TestEqual en
     utilisant \ifx
   - Nouvelles macros \IfStrEqCase et \IfEqCase
-      Teste si une cha\xEEne est \xE9gale \xE0 plusieurs chaines donn\xE9es et
-      ex\xE9cute un code sp\xE9cifique
-  - Cr\xE9ation de la macro publique \StrSplit
-      Coupe la chaine en 2 \xE0 une position donn\xE9e
+      Teste si une chaîne est égale à plusieurs chaines données et
+      exécute un code spécifique
+  - Création de la macro publique \StrSplit
+      Coupe la chaine en 2 à une position donnée
   - Nouvelle macro \StrCompare
-      Compare 2 cha\xEEnes et renvoie la position du 1er caract\xE8re diff\xE9rent.
-      Renvoie 0 si elles sont \xE9gales.
+      Compare 2 chaînes et renvoie la position du 1er caractère différent.
+      Renvoie 0 si elles sont égales.
 ------------------------------------------------------------------------------
 v1.3a   29/9/2008
   - Correction d'un bug : \expandafter#1
     dans les macros \IfSubStrBefore et \StrBetween qui buggue si #1 est un
     nombre > 9 !
-  - R\xE9 \xE9criture de \xs_returnfirstsyntaxunit et \xs_gobarg qui
-    deviennent purement d\xE9veloppables.
-  - R\xE9 \xE9criture de \StrLen
+  - Ré écriture de \xs_returnfirstsyntaxunit et \xs_gobarg qui
+    deviennent purement développables.
+  - Ré écriture de \StrLen
   - Nouvelle macro interne \xs_cutafteroccur
-      Coupe la chaine apr\xE8s la ni\xE8me occurrence d'une sous chaine.
-  - Code am\xE9lior\xE9 de \StrMid, \StrLeft, \StrGobbleLeft, \StrRight,
-    \StrGobbleRight grace \xE0 \xs_cutafteroccur
+      Coupe la chaine après la nième occurrence d'une sous chaine.
+  - Code amélioré de \StrMid, \StrLeft, \StrGobbleLeft, \StrRight,
+    \StrGobbleRight grace à \xs_cutafteroccur
 ------------------------------------------------------------------------------
 v1.4   4/11/2008
-  - xstring traite ses arguments par unit\xE9 syntaxique, et donc toutes les
-    macros internes ont \xE9t\xE9 r\xE9-\xE9crites \xE0 cette fin.
-  - Le manuel a \xE9t\xE9 r\xE9-\xE9crit, rendu plus clair et mieux structur\xE9.
-  - Nouvelle fonctionnalit\xE9 : \expandarg
-      le 1er lex\xE8me de chaque argument est 1-d\xE9velopp\xE9 avant que la
-      macro ne soit appel\xE9e. Si un argument comporte plus qu'1 lex\xE8me,
-      il faut passer par \scancs*[1] pour 1-d\xE9velopper toutes les unit\xE9s
+  - xstring traite ses arguments par unité syntaxique, et donc toutes les
+    macros internes ont été ré-écrites à cette fin.
+  - Le manuel a été ré-écrit, rendu plus clair et mieux structuré.
+  - Nouvelle fonctionnalité : \expandarg
+      le 1er lexème de chaque argument est 1-développé avant que la
+      macro ne soit appelée. Si un argument comporte plus qu'1 lexème,
+      il faut passer par \scancs*[1] pour 1-développer toutes les unités
       syntaxiques.
   - Correction de 2 erreurs dans le manuel anglais :  0 est la valeur par
-    d\xE9faut dans \StrSubstitute et \StrDel
-  - Coh\xE9rence dans les nom des s\xE9quences de contr\xF4les temporaires qui
-    sont d\xE9sormais : \xs_reserved_A \xE0 \xs_reserved_E
+    défaut dans \StrSubstitute et \StrDel
+  - Cohérence dans les nom des séquences de contrôles temporaires qui
+    sont désormais : \xs_reserved_A à \xs_reserved_E
 ------------------------------------------------------------------------------
 v1.4a  12/11/2008
-  - Correction d'un bug dans \xs_StrSplit dans le cas o\xF9 l'argument
-     num\xE9rique est <1 : la 1ere coupure doit \xEAtre vide et le seconde doit
-     \xEAtre \xE9gale \xE0 l'argument.
+  - Correction d'un bug dans \xs_StrSplit dans le cas où l'argument
+     numérique est <1 : la 1ere coupure doit être vide et le seconde doit
+     être égale à l'argument.
 ------------------------------------------------------------------------------
 v1.4b  16/11/2008
   - Correction de 2 bugs dans \xs_returnfirstsyntaxunit
 ------------------------------------------------------------------------------
 v1.5   31/12/2008
-  - Nouvelles fonctionnalit\xE9s dans la recherche de groupes par un
-    identificateur caract\xE9risant leur imbrication. Impl\xE9mentation de :
+  - Nouvelles fonctionnalités dans la recherche de groupes par un
+    identificateur caractérisant leur imbrication. Implémentation de :
       1) \StrFindGroup
       2) \groupID
-  - Ajout des nouvelles macros g\xE9n\xE9riques \xs_read_reserved_C et
+  - Ajout des nouvelles macros génériques \xs_read_reserved_C et
     \xs_read_reserved_D
   - Correction d'un bug dans \StrSplit : \StrSplit{{a}bc}{1}[\truc] faisait
-    que \truc contenait \xABa{a}\xBB.
-  - Correction d'un bug dans \xs_newmacro : l'argument optionnel \xE9tait
-    d\xE9tok\xE9nis\xE9 \xE0 tort dans les macros \xE9toil\xE9es.
-  - Dans \xs_newmacro, on doit choisir le num\xE9ro du dernier argument devant
-    \xEAtre d\xE9tok\xE9nis\xE9 dans le cas d'une macro \xE9toil\xE9e (sachant que
+    que \truc contenait «a{a}».
+  - Correction d'un bug dans \xs_newmacro : l'argument optionnel était
+    détokénisé à tort dans les macros étoilées.
+  - Dans \xs_newmacro, on doit choisir le numéro du dernier argument devant
+    être détokénisé dans le cas d'une macro étoilée (sachant que
      l'argument optionnel ne l'est jamais)
 ------------------------------------------------------------------------------
 v1.5a  09/2/2009
   - Nouvelle macro \StrExpand, sensible au mode d'exploration. La macro est
-    ind\xE9pendante du mode d'exploration et dispose de ses propres commandes
+    indépendante du mode d'exploration et dispose de ses propres commandes
     d'exploration : \expandingroups et \noexpandingroups
-  - R\xE9-\xE9criture de \scancs, qui devient triviale puisque d\xE9pendant de
-    \StrExpand. Il n'y a plus de version \xE9toil\xE9e et d\xE9sormais, \scancs
+  - Ré-écriture de \scancs, qui devient triviale puisque dépendant de
+    \StrExpand. Il n'y a plus de version étoilée et désormais, \scancs
     est sensible au mode d'exploration.
   - Correction d'un bug dans \IfInteger : \IfInteger{2.0}{V}{F} affichait F
   - Correction de bugs : mettre \let\xs_reserved_E\relax avant d'appeler
@@ -1154,49 +1154,49 @@
     \xs_StrSplit_i
   - Suppression des messages d'erreur, de warning et d'info. xstring devient
     donc silencieux ;)
-  - Passage de 3 \xE0 2 compteurs
-  - Le manuel est d\xE9sormais plus color\xE9, en esp\xE9rant qu'il sera un peu
-    plus agr\xE9able \xE0 lire !
+  - Passage de 3 à 2 compteurs
+  - Le manuel est désormais plus coloré, en espérant qu'il sera un peu
+    plus agréable à lire !
 ------------------------------------------------------------------------------
 v1.5b  13/3/2009
   - Modification d'un grand nombre de macros de telle sorte que vraiment
-    n'importe quel code peut d\xE9sormais \xEAtre plac\xE9 dans les arguments des
-    macros (comme par exemple des \if, \ifx ou autre, m\xEAme sans leur \fi, ce
-    qui n'\xE9tait pas possible jusqu'alors)
+    n'importe quel code peut désormais être placé dans les arguments des
+    macros (comme par exemple des \if, \ifx ou autre, même sans leur \fi, ce
+    qui n'était pas possible jusqu'alors)
 ------------------------------------------------------------------------------
 v1.5c  05/6/2009
   - Correction d'un bug dans \IfBeginWith : il faut appeler
     \xs_returnfirstsyntaxunit pour l'argument #2 puis pour l'argument #1 et
-    non pas l'inverse pour que \xs_toks refl\xE8te ce qui se trouve dans #1
-  - Correction d'un bug dans \xs_returnfirstsyntaxunit au cas o\xF9 #1 commence
-    par un espace : mettre \xs_toks \xE0 0
+    non pas l'inverse pour que \xs_toks reflète ce qui se trouve dans #1
+  - Correction d'un bug dans \xs_returnfirstsyntaxunit au cas où #1 commence
+    par un espace : mettre \xs_toks à 0
   - Correction d'un bug dans \xs_returnfirstsyntaxunit :
     \xs_returnfirstsyntaxunit{{}}\truc
-    faisait que \truc se d\xE9veloppait en un espace.
-  - Correction d'un bug dans \xs_removefirstsyntaxunit o\xF9 le cas
+    faisait que \truc se développait en un espace.
+  - Correction d'un bug dans \xs_removefirstsyntaxunit où le cas
     \xs_removefirstsyntaxunit{ {b}}\truc
-    donnait \truc se d\xE9veloppant en \xABb\xBB au lieu de \xAB{b}\xBB.
+    donnait \truc se développant en «b» au lieu de «{b}».
 ------------------------------------------------------------------------------
 v1.5d  28/3/2010
   - Correction d'un bug dans \IfInteger : \afterinteger ne donnait pas le
-    bon r\xE9sultat. Par exemple avec 1.23 il renvoyait {} au lieu de {.23}
-  - \xs_formatnumber ne detokenize plus ses arguments (que m'est-il pass\xE9
-    par la t\xEAte pour que je code un truc comme ca ?), et donc
+    bon résultat. Par exemple avec 1.23 il renvoyait {} au lieu de {.23}
+  - \xs_formatnumber ne detokenize plus ses arguments (que m'est-il passé
+    par la tête pour que je code un truc comme ca ?), et donc
     \afterinteger et \xs_afterdecimal ont des tokens ayant le bon
     catcode
 ------------------------------------------------------------------------------
 v1.6  24/10/2012
-  - Correction d'un bug dans \xs_cutafteroccur au cas o\xF9 #3<1
+  - Correction d'un bug dans \xs_cutafteroccur au cas où #3<1
   - \IfDecimal ne \detokenize plus l'argument.
   - Nouvelle version de \tokenize qui enlevait les accolades si son argument
-    \xE9tait entre accolades
+    était entre accolades
   - Nouvelle macro \StrCut
-  - \xs_cutafteroccur_i ne produit plus d'espace ind\xE9sirable si #3 \xE9tait
-    \xE9valu\xE9 par \numexpr
+  - \xs_cutafteroccur_i ne produit plus d'espace indésirable si #3 était
+    évalué par \numexpr
 ------------------------------------------------------------------------------
 v1.7  13/1/2013
   - Correction d'un manque de rigueur dans les assignations concernant
-    \groupID : elles sont toutes globales d\xE9sormais
+    \groupID : elles sont toutes globales désormais
   - Les macros de xstring sont \long
 ------------------------------------------------------------------------------
 v1.7a 28/2/2013
@@ -1203,25 +1203,28 @@
   - Correction d'un espace parasite dans \xs_removefirstsyntaxunit
 ------------------------------------------------------------------------------
 v1.7b 29/7/2013
-  - La date contenue dans \xstringdate est d\xE9sormais conforme
+  - La date contenue dans \xstringdate est désormais conforme
 ------------------------------------------------------------------------------
 v1.7c 13/10/2013
-  - les macros impliqu\xE9es dans \IfStrCase et \IfStrEqCase sont d\xE9sormais \long
+  - les macros impliquées dans \IfStrCase et \IfStrEqCase sont désormais \long
 ------------------------------------------------------------------------------
 v1.8  07/12/2018
-  - affectations globales supprim\xE9es (sauf pour \groupID) afin de ne pas
+  - affectations globales supprimées (sauf pour \groupID) afin de ne pas
     surcharger la pile de sauvegarde
   - nettoyage du code, corrections de lourdeurs et maladresses
 ------------------------------------------------------------------------------
 v1.81 09/12/2018
-  - bug dans \IfInteger et \IfDecimal, la macro \xs_afterdecimal est ind\xE9finie
-    et doit \xEAtre remplac\xE9e par \afterdecimal
+  - bug dans \IfInteger et \IfDecimal, la macro \xs_afterdecimal est indéfinie
+    et doit être remplacée par \afterdecimal
 ------------------------------------------------------------------------------
 v1.82 01/02/2019
   - \xs_testopt n'est pas longue et provoque un bug dans \xs_IfStrCase et
     \xs_IfStrCase lorsque #1 contient \par : \xs_testopt reste courte et
-    \xs_IfStringCase a \xE9t\xE9 modifi\xE9e pour que cela fonctionne.
+    \xs_IfStringCase a été modifiée pour que cela fonctionne.
     ------------------------------------------------------------------------------
 v1.83 06/02/2019
-      - mauvaise approche et mauvais fix dans la v1.82 : \xs_testopt devient
-        longue, pas le choix (et donc aussi \xs_ifnxttok)
\ No newline at end of file
+  - mauvaise approche et mauvais fix dans la v1.82 : \xs_testopt devient
+    longue, pas le choix (et donc aussi \xs_ifnxttok)
+------------------------------------------------------------------------------
+v1.84 21/07/2021
+  - encodage du fichier xstring.tex en UTF-8



More information about the tex-live-commits mailing list.