diff options
Diffstat (limited to 'Master/texmf-dist/tex/generic/xstring')
-rw-r--r-- | Master/texmf-dist/tex/generic/xstring/xstring.tex | 388 |
1 files changed, 196 insertions, 192 deletions
diff --git a/Master/texmf-dist/tex/generic/xstring/xstring.tex b/Master/texmf-dist/tex/generic/xstring/xstring.tex index 49153099778..6f16dfba0db 100644 --- a/Master/texmf-dist/tex/generic/xstring/xstring.tex +++ b/Master/texmf-dist/tex/generic/xstring/xstring.tex @@ -4,9 +4,9 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % \def\xstringname {xstring} % -\def\xstringversion {1.81} % +\def\xstringversion {1.82} % % % -\def\xstringdate {2018/12/09} % +\def\xstringdate {2019/02/01} % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % @@ -17,7 +17,7 @@ % Package URL: https://www.ctan.org/pkg/xstring % % Bug tracker: https://framagit.org/unbonpetit/xstring/issues % % Repository : https://framagit.org/unbonpetit/xstring/tree/master % -% Copyright : Christian Tellechea 2008-2018 % +% Copyright : Christian Tellechea 2008-2019 % % Licence : Released under the LaTeX Project Public License v1.3c % % or later, see http://www.latex-project.org/lppl.txt % % Files : 1) xstring.tex % @@ -619,32 +619,31 @@ \def\IfStrEqCase{% \xs_ifstar - {\def\xs_reserved_E{\IfStrEq*}\xs_IfStrCase}% - {\def\xs_reserved_E{\IfStrEq}\xs_IfStrCase}% + {\xs_IfStringCase{\IfStrEq*}}% + {\xs_IfStringCase\IfStrEq}% } -\long\def\xs_IfStrCase#1#2{\xs_testopt{\xs_IfStringCase{#1}{#2}}{}} - \def\IfEqCase{% \xs_ifstar - {\def\xs_reserved_E{\IfEq*}\xs_IfEqCase}% - {\def\xs_reserved_E{\IfEq}\xs_IfEqCase}% + {\xs_IfStringCase{\IfEq*}}% + {\xs_IfStringCase\IfEq}% } -\long\def\xs_IfEqCase#1#2{\xs_testopt{\xs_IfStringCase{#1}{#2}}{}} - -\long\def\xs_IfStringCase#1#2[#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 - \xs_reserved_E{#1}{##1}% - {##2}% le test est positif, on exécute le code correspondant + #1{#2}{##1}% compare + {\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}% - {#3}% s'il n'y a plus de cas, on exécute le code <autres cas> + {\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 }% }% - \xs_testcase#2\_nil + \xs_testcase#3\_nil } +\long\def\xs_IfStringCase_i[#1]{#1} +\long\def\xs_IfStringCase_ii#1[#2]{#1} + % 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}% @@ -1041,179 +1040,184 @@ \expandingroups \endinput -% -% H I S T O R I Q U E -%------------------------------------------------------------------------------ -%% v1.0 4/7/2008 : - Package achevé. -% 7/7/2008 : - Package publié sur CTAN. -%------------------------------------------------------------------------------ -% v1.1 15/8/2008 -% - Le package ne nécessite plus LaTeX et est désormais utilisable sous -% Plain eTeX. -% - Ajout des macros \IfInteger et \IfDecimal. -% 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 é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ès l'occurrence testée -% dans les sc \xs_behind_IfSubStr et \xs_before_IfSubStr -% \StrCount -% a) ajout de ce qui se trouve après la dernière occurrence dans la -% sc \xs_StrCount_afterlastocccur -% b) la macro ne dépend plus d'aucune autre -%------------------------------------------------------------------------------ -% v1.2 23/8/2008 -% - 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ù son argument était vide ce qui faiasait planter -% \IfDecimal{}{V}{F} et \IfInteger{}{V}{F} -%------------------------------------------------------------------------------ -% v1.3 21/9/2008 -% - 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î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î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é é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è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é 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é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ù 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é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é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 «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épendante du mode d'exploration et dispose de ses propres commandes -% d'exploration : \expandingroups et \noexpandingroups -% - 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 -% \xs_StrSplit_i -% - Suppression des messages d'erreur, de warning et d'info. xstring devient -% donc silencieux ;) -% - 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é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è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éveloppait en un espace. -% - Correction d'un bug dans \xs_removefirstsyntaxunit où le cas -% \xs_removefirstsyntaxunit{ {b}}\truc -% 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é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ù #3<1 -% - \IfDecimal ne \detokenize plus l'argument. -% - Nouvelle version de \tokenize qui enlevait les accolades si son argument -% était entre accolades -% - Nouvelle macro \StrCut -% - \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ésormais -% - Les macros de xstring sont \long -%------------------------------------------------------------------------------ -% v1.7a 28/2/2013 -% - Correction d'un espace parasite dans \xs_removefirstsyntaxunit -%------------------------------------------------------------------------------ -% v1.7b 29/7/2013 -% - La date contenue dans \xstringdate est désormais conforme -%------------------------------------------------------------------------------ -% v1.7c 13/10/2013 -% - les macros impliquées dans \IfStrCase et \IfStrEqCase sont désormais \long -%------------------------------------------------------------------------------ -% v1.8 07/12/2018 -% - 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, c'est \xs_ifx{\empty\afterdecimal} et non pas -% \xs_ifx{\empty\xs_afterdecimal}
\ No newline at end of file + + H I S T O R I Q U E +------------------------------------------------------------------------------ +v1.0 4/7/2008 : - Package achevé. + 7/7/2008 : - Package publié sur CTAN. +------------------------------------------------------------------------------ +v1.1 15/8/2008 + - Le package ne nécessite plus LaTeX et est désormais utilisable sous + Plain eTeX. + - Ajout des macros \IfInteger et \IfDecimal. + 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 é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ès l'occurrence testée + dans les sc \xs_behind_IfSubStr et \xs_before_IfSubStr + \StrCount + a) ajout de ce qui se trouve après la dernière occurrence dans la + sc \xs_StrCount_afterlastocccur + b) la macro ne dépend plus d'aucune autre +------------------------------------------------------------------------------ +v1.2 23/8/2008 + - 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ù son argument était vide ce qui faiasait planter + \IfDecimal{}{V}{F} et \IfInteger{}{V}{F} +------------------------------------------------------------------------------ +v1.3 21/9/2008 + - 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î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î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é é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è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é 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é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ù 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é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é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 «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épendante du mode d'exploration et dispose de ses propres commandes + d'exploration : \expandingroups et \noexpandingroups + - 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 + \xs_StrSplit_i + - Suppression des messages d'erreur, de warning et d'info. xstring devient + donc silencieux ;) + - 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é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è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éveloppait en un espace. + - Correction d'un bug dans \xs_removefirstsyntaxunit où le cas + \xs_removefirstsyntaxunit{ {b}}\truc + 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é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ù #3<1 + - \IfDecimal ne \detokenize plus l'argument. + - Nouvelle version de \tokenize qui enlevait les accolades si son argument + était entre accolades + - Nouvelle macro \StrCut + - \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ésormais + - Les macros de xstring sont \long +------------------------------------------------------------------------------ +v1.7a 28/2/2013 + - Correction d'un espace parasite dans \xs_removefirstsyntaxunit +------------------------------------------------------------------------------ +v1.7b 29/7/2013 + - La date contenue dans \xstringdate est désormais conforme +------------------------------------------------------------------------------ +v1.7c 13/10/2013 + - les macros impliquées dans \IfStrCase et \IfStrEqCase sont désormais \long +------------------------------------------------------------------------------ +v1.8 07/12/2018 + - 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é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 été modifiée pour que cela fonctionne.
\ No newline at end of file |