texlive[68439] Master/texmf-dist: simplekv (2oct23)

commits+karl at tug.org commits+karl at tug.org
Mon Oct 2 21:47:10 CEST 2023


Revision: 68439
          https://tug.org/svn/texlive?view=revision&revision=68439
Author:   karl
Date:     2023-10-02 21:47:09 +0200 (Mon, 02 Oct 2023)
Log Message:
-----------
simplekv (2oct23)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/generic/simplekv/README
    trunk/Master/texmf-dist/doc/generic/simplekv/simplekv-fr.pdf
    trunk/Master/texmf-dist/doc/generic/simplekv/simplekv-fr.tex
    trunk/Master/texmf-dist/tex/generic/simplekv/simplekv.tex

Modified: trunk/Master/texmf-dist/doc/generic/simplekv/README
===================================================================
--- trunk/Master/texmf-dist/doc/generic/simplekv/README	2023-10-02 19:46:59 UTC (rev 68438)
+++ trunk/Master/texmf-dist/doc/generic/simplekv/README	2023-10-02 19:47:09 UTC (rev 68439)
@@ -3,9 +3,9 @@
              L'extension
                simplekv
                
-                v0.2a
+                v0.2c
 
-           1er octobre 2022
+            2 octobre 2023
 ___________________________________
 
 Authors   : Christian Tellechea

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

Modified: trunk/Master/texmf-dist/doc/generic/simplekv/simplekv-fr.tex
===================================================================
--- trunk/Master/texmf-dist/doc/generic/simplekv/simplekv-fr.tex	2023-10-02 19:46:59 UTC (rev 68438)
+++ trunk/Master/texmf-dist/doc/generic/simplekv/simplekv-fr.tex	2023-10-02 19:47:09 UTC (rev 68439)
@@ -1,7 +1,6 @@
 % !TeX TS-program = lualatex
 % !TeX encoding = UTF-8
 % Ceci est la documentation du package "simplekv"
-%
 \documentclass[french,a4paper,10pt]{article}
 \usepackage[utf8]{inputenc}
 \usepackage[margin=2cm]{geometry}
@@ -130,7 +129,7 @@
 
 Cette petite extension se veut minimaliste. Trop sans doute puisqu'on ne la juge pas au niveau d'autres, jugées plus « \href{https://tex.stackexchange.com/questions/560014/}{sérieuses}\footnote{C'est ainsi que Joseph Wright, qu'il ne faut prier pour me savonner la planche, la qualifie. C'est que sur TeX.stackexchange, on est entre-soi, c'est-à-dire entre experts raisonnables qui savent de quoi ils parlent. On fait mine de s'étonner et on réprimande, tel un enfant qui ne sait pas ce qu'il fait, un utilisateur qui vient s'enquérir du fonctionnement de simplekv ! Ce genre de sous-package est mal vu et indésirable là bas, il faut vite faire rentrer dans le rang la brebis égarée.}.»
 
-Quoiqu'il en soit, simplekv a le mérite d'exister et se veut à l'opposé des usines à gaz que l'on peut trouver dans cet exercices de style. Elle est écrite en \TeX{}, fonctionne donc sous tous les moteurs et ne requiert aucun package.
+Quoiqu'il en soit, simplekv a le mérite d'exister et se place à l'opposé des usines à gaz que l'on peut trouver dans cet exercice de style. Elle est écrite en \TeX{}, fonctionne donc sous tous les moteurs et ne requiert aucun package.
 
 \section{Clés, valeurs}
 Lorsqu'une macro doit recevoir des paramètres dont le nombre n'est pas fixe ou connu, il est commode de procéder par \<clés> et \<valeurs>.
@@ -161,9 +160,10 @@
 
 Il faut noter que
 \begin{itemize}
-	\item l'argument entre accolades contenant les \<clés> et les \<valeurs> ne devrait pas être vide, sauf à vouloir définir une \<clé> booléenne vide égale à \texttt{true};
+	\item un ensemble \<clé>=\<valeur> réduit à 0 caractère après suppression des espaces est ignoré;
 	\item lors de la lecture des \<clés>/\<valeurs>, la virgule et le signe égal doivent avoir un catcode de 12 sans quoi ils ne seront pas compris comme frontières entre \<clés> et \<valeurs> et ne joueront pas leur rôle;
-	\item le nom du \<trousseau>, bien qu'entre crochet, est \emph{obligatoire}, mais il peut être vide bien que cela ne soit pas conseillé;
+	\item le nom du \<trousseau>, bien qu'entre crochets, est \emph{obligatoire}, mais il peut être vide bien que cela ne soit pas conseillé;
+	\item les espaces autour du nom du \<trousseau> ne sont \emph{pas} retirés et donc le trousseau «\verb|foo|» n'est pas le même que le trousseau «\verb*|foo |»
 	\item si une même \<clé> figure plusieurs fois, la \<valeur> retenue sera celle de la dernière assignation;
 	\item les \<valeurs> peuvent être booléennes auquel cas, elles \emph{doivent} être «\texttt{true}» ou «\texttt{false}» en caractères de catcode 11;
 	\item si une \<valeur> est omise, elle est comprise comme étant «\texttt{true}». Ainsi, écrire
@@ -199,16 +199,16 @@
 La macro est purement développable, elle nécessite 2 développements pour donner l'un des deux codes, et exige que la \<clé> soit booléenne sans quoi un message d'erreur est émis.
 
 \paragraph{La macro \texttt{\char`\\showKV}}
-Cette commande écrit dans le fichier \texttt{log} la \<valeur> assignée à une \<clé> d'un \<trousseau>:
+Cette commande écrit dans le fichier \texttt{log} la \<valeur> et le \<code> assignés à une \<clé> d'un \<trousseau>:
 	\code|\showKV[<trousseau>]{<clé>}|
 
-Si la \<clé> n'est pas définie, «\texttt{not defined}» est affiché dans le fichier log.
+Si la \<clé> n'est pas définie, «\texttt{not defined}» est affiché dans le fichier log. Il en est de même pour le \<code>.
 
 \section{Code}
 En plus d'une \<valeur>, un \<code> arbitraire peut être assigné à n'importe quelle \<clé>. Pour ce faire, on écrit
 \begin{center} \verb|\defKV[<trousseau>]{<clé 1>=<code 1>,<clé 2>=<code 2>,...,<clé n>=<code n>}|
 \end{center}
-Chaque \<code> peut contenir \verb|#1| qui représente la \<valeur> de la \<clé>. Ce \<code> est exécuté lorsque une \<valeur> est assignée à la \<clé> avec \verb|\setKV|, \verb|\setKVdefault| ou \verb|\restoreKV|.
+Chaque \<code> peut contenir «\verb|#1|» qui représente la \<valeur> de la \<clé>. Ce \<code> est exécuté lorsque une \<valeur> est assignée à la \<clé> avec \verb|\setKV|, \verb|\setKVdefault| ou \verb|\restoreKV|.
 \bigbreak
 
 Ainsi déclarer

Modified: trunk/Master/texmf-dist/tex/generic/simplekv/simplekv.tex
===================================================================
--- trunk/Master/texmf-dist/tex/generic/simplekv/simplekv.tex	2023-10-02 19:46:59 UTC (rev 68438)
+++ trunk/Master/texmf-dist/tex/generic/simplekv/simplekv.tex	2023-10-02 19:47:09 UTC (rev 68439)
@@ -4,9 +4,9 @@
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %                                                                    %
 \def\skvname                  {simplekv}                             %
-\def\skvver                     {0.2a}                               %
+\def\skvver                     {0.2c}                               %
 %                                                                    %
-\def\skvdate                 {2022/10/01}                            %
+\def\skvdate                 {2023/10/02}                            %
 %                                                                    %
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %
@@ -27,7 +27,7 @@
 % email: unbonpetit at netc.fr
 %        Commentaires, suggestions et signalement de bugs bienvenus !
 %        Comments, bug reports and suggestions are welcome.
-% Copyright: Christian Tellechea 2017-2022
+% Copyright: Christian Tellechea 2017-2023
 % --------------------------------------------------------------------
 % L'extension simplekv est composée des 5 fichiers suivants :
 %   - code               : simplekv            (.tex et .sty)
@@ -73,7 +73,9 @@
 	\long\def\skv_stripsp_i##1\_marksp#1##2\_marksp##3\_nil{\skv_stripsp_ii##3##1##2\__nil#1\__nil\_nil}%
 	\long\def\skv_stripsp_ii##1#1\__nil##2\_nil{\skv_stripsp_iii##1##2\_nil}%
 	\long\def\skv_stripsp_iii##1##2\__nil##3\_nil##4{\unexpanded{##4{##2}}}%
-}\skv_stripsp{ }
+}
+\skv_stripsp{ }
+\def\skv_error#1{\errmessage{Package \skvname\space Error: #1.}}
 %##########################################
 %########## Macros de définition ##########
 %##########################################
@@ -81,14 +83,22 @@
 \def\setKV       {\let\skv_find_kv_ii\skv_find_kv_nocode\skv_readKV\skv_gob}
 \def\defKV       {\let\skv_find_kv_ii\skv_find_kv_code  \skv_readKV\skv_gob}
 \long\def\skv_readKV#1[#2]#3{%
-	#1{\expandafter\def\csname skv_[#2]\endcsname{#3}}% exécute (si \defKVdefault) ou pas
-	\def\skv_setname{#2}%
-	\skv_readKV_i#3,\__,%
+	#1{\expandafter\def\csname skv_[#2]\endcsname{#3}}% exécute (si \setKVdefault) ou pas
+	\def\skv__currentname{#2}%
+	\skv_readKV_i#3,\skv_end,%
 }
-\long\def\skv_readKV_i#1,{\skv_readKV_ii\skv_find_kv#1=true=\_nil\skv_find_kv\__\__nil}% si #1=\__ ne rien faire sinon \skv_find_kv#1=true=\_nil
-\long\def\skv_readKV_ii#1\skv_find_kv\__#2\__nil{#1}
+\long\def\skv_readKV_i#1,{%
+	\skv_stripsp\skv_ifempty{#1}% Bugfix 0.2c : on ignore un truc vide entre 2 virgules
+		{%
+		\skv_readKV_i
+		}
+		{%
+		\skv_readKV_ii\skv_find_kv#1=true=\_nil\skv_find_kv\skv_end\__nil% si #1=\skv_end ne rien faire sinon \skv_find_kv#1=true=\_nil
+		}%
+}
+\long\def\skv_readKV_ii#1\skv_find_kv\skv_end#2\__nil{#1}
 \long\def\skv_find_kv#1={%
-	\edef\__key{_[\skv_setname]_\skv_stripsp\detokenize{#1}}%
+	\edef\skv__currentkey{_[\skv__currentname]_\skv_stripsp\detokenize{#1}}%
 	\skv_find_kv_i{}%
 }
 \long\def\skv_find_kv_i#1=#2\_nil{%
@@ -96,18 +106,22 @@
 	\skv_readKV_i
 }
 \long\def\skv_find_kv_nocode#1{%
-	\expandafter\def\csname skv\__key\endcsname{#1}% stocker la valeur
-	\ifcsname skvcode\__key\endcsname
-		\skv_antefi\csname skvcode\__key\endcsname{#1}%
+	\expandafter\def\csname skv\skv__currentkey\endcsname{#1}% stocker la valeur
+	\ifcsname skvcode\skv__currentkey\endcsname
+		\skv_antefi\csname skvcode\skv__currentkey\endcsname{#1}%
 	\fi
 }
 \long\def\skv_find_kv_code{%
-	\expandafter\def\csname skvcode\__key\endcsname##1%
+	\expandafter\def\csname skvcode\skv__currentkey\endcsname##1%
 }
 \def\restoreKV[#1]{%
 	\skv_ifcsname{skv_[#1]}
-		{\skv_eearg{\setKV[#1]}{\csname skv_[#1]\endcsname}}
-		{\errmessage{Undefined or not saved set of keys "#1"}}%
+		{%
+		\skv_eearg{\setKV[#1]}{\csname skv_[#1]\endcsname}%
+		}
+		{%
+		\skv_error{Undefined or not saved set of keys "#1"}%
+		}%
 }
 \let\useKVdefault\restoreKV
 %##########################################
@@ -115,10 +129,11 @@
 %##########################################
 \def\useKV[#1]{\romannumeral\skv_stripsp{\useKV_i[#1]}}
 \def\useKV_i[#1]#2{%
-	\ifcsname skv_[#1]_#2\endcsname
-		\expandafter\expandafter\expandafter\skv_stop\csname skv_[#1]_#2\expandafter\endcsname
+	\ifcsname skv_[#1]_\detokenize{#2}\endcsname
+		\expandafter\expandafter\expandafter\skv_stop\csname skv_[#1]_\detokenize{#2}\expandafter\endcsname
 	\else
-		\skv_stop\errmessage{Key "#2" not defined in group of keys "#1"}%
+		\skv_stop
+		\skv_error{Key "\detokenize{#2}" not defined in group of keys "#1"}%
 	\fi
 }
 %##########################################
@@ -126,55 +141,101 @@
 %##########################################
 \def\ifboolKV[#1]{\romannumeral\skv_stripsp{\ifboolKV_i[#1]}}
 \def\ifboolKV_i[#1]#2{%
-	\skv_ifempty{#2}
-		{\skv_stop\errmessage{Empty argument is not a valid boolean}\skv_second
-		}
-		{\skv_ifcsname{skv_[#1]_#2}
-			{\skv_eearg\ifboolKV_ii{\csname skv_[#1]_#2\endcsname}}
-			{\skv_stop\errmessage{Key "#2" not defined}\skv_second}%
-		}%
+	\ifcsname skv_[#1]_\detokenize{#2}\endcsname
+		\expandafter\expandafter\expandafter\ifboolKV_ii\csname skv_[#1]_\detokenize{#2}\expandafter\endcsname
+		\expandafter\ifboolKV_ii
+	\else
+		\skv_stop
+		\skv_error{Key "\detokenize{#2}" not defined in group of keys "#1"}%
+		\expandafter\skv_second
+	\fi
 }
-\def\ifboolKV_ii#1{%% Cette macro teste si #1, qui est une <valeur>, vaut "true" ou "false"
+\def\ifboolKV_ii#1\ifboolKV_ii{%% Cette macro teste si #1, qui est une <valeur>, vaut "true" ou "false"
 	\skv_ifargtrue{#1}
-		{\expandafter\skv_stop\skv_first
+		{%
+		\expandafter\skv_stop
+		\skv_first
 		}
-		{\skv_ifargfalse{#1}
-			{\expandafter\skv_stop\skv_second}
-			{\skv_stop\errmessage{Value "#1" is not a valid boolean}\skv_second}%
+		{%
+		\skv_ifargfalse{#1}
+			{%
+			\expandafter\skv_stop
+			\skv_second
+			}
+			{%
+			\skv_stop
+			\skv_error{Value "\detokenize{#1}" is not a valid boolean}%
+			\skv_second
+			}%
 		}%
 }
-\def\testboolKV#1{\romannumeral\skv_stripsp{\testboolKV_i}{#1}}% macro publique qui teste si #1 est <true> ou <false>, erreur sinon
+\def\testboolKV{\romannumeral\skv_stripsp\testboolKV_i}% macro publique qui teste si #1 est <true> ou <false>, erreur sinon
 \def\testboolKV_i#1{%
 	\skv_ifempty{#1}
-		{\skv_stop\errmessage{Empty argument is not a valid boolean}\skv_second}
-		{\skv_stripsp{\ifboolKV_ii}{#1}}%
+		{%
+		\skv_stop
+		\skv_error{Empty argument is not a valid boolean}
+		\skv_second
+		}
+		{%
+		\ifboolKV_ii#1\ifboolKV_ii
+		}%
 }
 \def\skv_ifargtrue#1{\skv_ifargtrue_i#1true\_nil}
-\def\skv_ifargtrue_i#1true#2\_nil{\skv_ifempty{#1}{\skv_ifargtrue_ii#2\_nil}\skv_second}
+\def\skv_ifargtrue_i#1true#2\_nil{%
+	\skv_ifempty{#1}
+		{%
+		\skv_ifargtrue_ii#2\_nil
+		}
+		{%
+		\skv_second
+		}%
+}
 \def\skv_ifargtrue_ii#1true#2\_nil{\skv_ifempty{#1#2}}
 \def\skv_ifargfalse#1{\skv_ifargfalse_i#1false\_nil}
-\def\skv_ifargfalse_i#1false#2\_nil{\skv_ifempty{#1}{\skv_ifargfalse_ii#2\_nil}\skv_second}
+\def\skv_ifargfalse_i#1false#2\_nil{%
+	\skv_ifempty{#1}
+		{%
+		\skv_ifargfalse_ii#2\_nil
+		}
+		{%
+		\skv_second
+		}%
+}
 \def\skv_ifargfalse_ii#1false#2\_nil{\skv_ifempty{#1#2}}
 %##########################################
 %############# Macro \showKV ##############
 %##########################################
-\def\showKV[#1]#2{\skv_stripsp{\showKV_i[#1]}{#2}}
+\def\showKV[#1]{\skv_stripsp{\showKV_i[#1]}}
 \def\showKV_i[#1]#2{%
+	\edef\skv__currentkey{_[#1]_\detokenize{#2}}%
 	\immediate\write-1 {%
-		^^JKey\space\space[#1]#2=%
-			\skv_ifcsname{skv_[#1]_#2}
-				{\expandafter\expandafter\expandafter\skv_show\expandafter
-				\meaning\csname skv_[#1]_#2\endcsname
-				\skv_ifcsname{skvcode_[#1]_#2}
-					{^^JCode [#1]#2=\expandafter\expandafter\expandafter\skv_show\expandafter
-						\meaning\csname skvcode_[#1]_#2\endcsname
-					}
-					{}%
+		^^J%
+		Key\space\space\detokenize{[#1]#2 -> }%
+		\skv_ifcsname{skv\skv__currentkey}
+			{%
+			\showKV_ii{skv\skv__currentkey}%
+			^^J%
+			Code \detokenize{[#1]#2 -> }%
+			\skv_ifcsname{skvcode\skv__currentkey}
+				{%
+				\showKV_ii{skvcode\skv__currentkey}%
 				}
-				{not defined%
+				{%
+				not defined%
 				}%
-	^^J\relax}%
+			}
+			{%
+			not defined%
+			}%
+	^^J%
+	\relax}%
 }
+\def\showKV_ii#1{%
+		\expandafter\expandafter\expandafter
+	\skv_show\expandafter
+	\meaning\csname#1\endcsname
+}
 \def\skv_show#1->{}
 \skv_restorecatcode
 \endinput
@@ -194,4 +255,12 @@
 |         |            | - la valeur n'est dépouillée que d'une accolade (et  |
 |         |            |   non pas de 2 comme auparavant)                     |
 |         |            | - quelques petits nettoyages, code en UTF8           |
+|-----------------------------------------------------------------------------|
+|   0.2b  | 30/10/2022 | - messages d'erreur mieux formatés                   |
+|         |            | - <clé> détokénisée dans \ifboolKV et \showKV pour   |
+|         |            |   être cohérent avec \setKV et \useKV                |
+|-----------------------------------------------------------------------------|
+|   0.2c  | 02/10/2023 | - bug corrigé : si un item <clé=val> est vide, il est|
+|         |            |   ignoré                                             |
+|         |            | - quelques remaniements du code                      |
 |-----------------------------------------------------------------------------|
\ No newline at end of file



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