texlive[60573] Master/texmf-dist: expkv (21sep21)

commits+karl at tug.org commits+karl at tug.org
Tue Sep 21 21:46:31 CEST 2021


Revision: 60573
          http://tug.org/svn/texlive?view=revision&revision=60573
Author:   karl
Date:     2021-09-21 21:46:31 +0200 (Tue, 21 Sep 2021)
Log Message:
-----------
expkv (21sep21)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/latex/expkv/README.md
    trunk/Master/texmf-dist/doc/latex/expkv/expkv.pdf
    trunk/Master/texmf-dist/source/latex/expkv/expkv.dtx
    trunk/Master/texmf-dist/tex/generic/expkv/expkv.tex
    trunk/Master/texmf-dist/tex/latex/expkv/expkv.sty

Added Paths:
-----------
    trunk/Master/texmf-dist/tex/context/third/expkv/
    trunk/Master/texmf-dist/tex/context/third/expkv/t-expkv.tex

Modified: trunk/Master/texmf-dist/doc/latex/expkv/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/expkv/README.md	2021-09-21 19:46:16 UTC (rev 60572)
+++ trunk/Master/texmf-dist/doc/latex/expkv/README.md	2021-09-21 19:46:31 UTC (rev 60573)
@@ -1,7 +1,7 @@
 -------------------------------------------------------------------------------
 # expkv -- an expandable key=val implementation
 
-Version 2021-07-15 v1.9
+Version 2021-09-20 v1.9a
 
 Released under the LaTeX Project Public License v1.3c or later
 See http://www.latex-project.org/lppl.txt

Modified: trunk/Master/texmf-dist/doc/latex/expkv/expkv.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/source/latex/expkv/expkv.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/expkv/expkv.dtx	2021-09-21 19:46:16 UTC (rev 60572)
+++ trunk/Master/texmf-dist/source/latex/expkv/expkv.dtx	2021-09-21 19:46:31 UTC (rev 60573)
@@ -43,6 +43,7 @@
 and the derived files           expkv.pdf
                                 expkv.sty
                                 expkv.tex
+                                t-expkv.tex
 
 \endpreamble
 % stop docstrip adding \endinput
@@ -50,6 +51,7 @@
 \endpostamble
 \generate{\file{expkv.sty}{\from{expkv.dtx}{pkg}}}
 \generate{\file{expkv.tex}{\from{expkv.dtx}{tex}}}
+\generate{\file{t-expkv.tex}{\from{expkv.dtx}{ctx}}}
 \ifx\fmtname\nameofplainTeX
   \expandafter\endbatchfile
 \else
@@ -98,7 +100,7 @@
         numexpr,
         protected,
       }
-    ,moretexcs=[5]^^A plain/LaTeX
+    ,moretexcs=[5]^^A plain/LaTeX/ConTeXt
       {
         approx,
         begin,
@@ -112,6 +114,7 @@
         TeX,
         textit,texttt,
         usepackage,
+        usemodule,
       }
     ,moretexcs=[6]^^A used packages
       {
@@ -299,16 +302,25 @@
 \newcommand\val{\meta{value}}
 \newcommand\set{\meta{set}}
 \hypersetup{linkcolor=red!80!black,urlcolor=purple!80!black}
+\DoNotIndex{\directlua}
 \DoNotIndex{\def,\edef,\,,\=,\begingroup,\catcode,\chardef,\csname,\endcsname}
 \DoNotIndex{\endgroup,\endinput,\errmessage,\expandafter,\input,\let,\long}
 \DoNotIndex{\protected,\ProvidesFile,\ProvidesPackage,\relax,\space}
-\DoNotIndex{\@,\unexpanded,\string,\expanded,\detokenize,\meaning,\lastnamedcs}
-\DoNotIndex{\romannumeral,\z@}
+\DoNotIndex{\^,\@,\unexpanded,\string,\expanded,\detokenize,\meaning}
+\DoNotIndex{\lastnamedcs,\romannumeral,\z@}
+\DoNotIndex{\noexpand,\normalexpanded,\normalunexpanded}
+\DoNotIndex{\par,\protect}
+\DoNotIndex{\unprotect}
+\DoNotIndex{\writestatus}
 \DoNotIndex{\ifcsname}
 \DoNotIndex{\ifx}
+\DoNotIndex{\iffalse}
+\DoNotIndex{\ifnum}
 \DoNotIndex{\else}
 \DoNotIndex{\fi}
-\@gobble\fi ^^A ignoring \ifx and \ifcsname, but only one \fi
+\@gobble\fi ^^A ignoring \ifx etc., but only one \fi
+\@gobble\fi ^^A ignoring \ifx etc., but only one \fi
+\@gobble\fi ^^A ignoring \ifx etc., but only one \fi
 \@ifdefinable\gobbledocstriptag{\def\gobbledocstriptag#1>{}}
 \newcommand*\pmso[1] ^^A poor man's strike out
   {^^A
@@ -365,15 +377,19 @@
 % example \pkg{babel} turns characters active for some languages, for instance
 % the equal sign is turned active for Turkish.
 %
-% \expkv\ is usable as generic code or as a \LaTeX\ package. To use it, just
-% use one of:
+% \expkv\ is usable as generic code, as a \LaTeX\ package or as a \ConTeXt\
+% module. To use it, just use one of:
 % \begin{lstlisting}
+% \input expkv       % plainTeX
 % \usepackage{expkv} % LaTeX
-% \input expkv       % plainTeX
+% \usemodule[expkv]  % ConTeXt
 % \end{lstlisting}
-% The \LaTeX\ package doesn't do more than \file{expkv.tex}, except calling
-% |\ProvidesPackage| and setting things up such that \file{expkv.tex} will use
-% |\ProvidesFile|.
+% Both the \LaTeX\ package and the \ConTeXt\ module don't do more than
+% \file{expkv.tex}, except calling |\ProvidesPackage| and setting things up such
+% that \file{expkv.tex} will use |\ProvidesFile|, or printing some status
+% information. The \ConTeXt\ support is not thoroughly tested, though (since I
+% don't use \ConTeXt\ myself I don't know if there are additional pitfalls I
+% wasn't aware of).
 %
 % In the \expkv\ family are other packages contained which provide additional
 % functionality. Those packages currently are:
@@ -410,7 +426,7 @@
 % prefixes allowed for |\let| can prefix those with ``|let|'' in their name,
 % accordingly. Neither \set\ nor \key\ are allowed to be empty for new keys.
 % \set\ will be used as is inside of |\csname ...\endcsname| and \key\ will get
-% |\detokenize|d.
+% |\detokenize|d. Also \set\ should not contain an explicit |\par| token.
 %
 % \begin{function}{\ekvdef}
 %   \begin{syntax}
@@ -919,6 +935,11 @@
 % \end{verbatim}
 % Any clean up has to be done by you, |\ekverr| will expand to nothing after
 % throwing the error message.
+%
+% In \ConTeXt\ this macro works differently. While still being fully expandable,
+% it doesn't have the character count limitation and doesn't impose restrictions
+% on \meta{package}. It will not display the additional text and adding line
+% breaks is not possible.
 % \example Say we set up a small calculation which works with user input. In our
 % calculation we need a division, so have to watch out for division by zero. If
 % we detect such a case we throw an error and do the recovery by using the
@@ -926,7 +947,7 @@
 % \begin{lstlisting}
 % \newcommand*\mydivision[2]
 %   {%
-%     \number\numexpr
+%     \the\numexpr
 %       \ifnum\numexpr#2=0 % space here on purpose
 %         \ekverr{my}{division by 0. Setting result to 2147483647.}%
 %         2147483647%
@@ -1562,6 +1583,27 @@
 % \gobbledocstriptag
 %</pkg>
 %^^A=<<
+%^^A the ConTeXt module >>=
+% \subsection{The \ConTeXt\ module}
+% This is pretty straight forward, we just have to change the error throwing
+% mechanism for \ConTeXt\ (the approach taken for plain and \LaTeX\ breaks in
+% \ConTeXt, effectively breaking \ConTeXt, dropping you in an interactive \TeX\
+% session with almost no means of escape).
+% \gobbledocstriptag
+%<*ctx>
+%    \begin{macrocode}
+\writestatus{loading}{ConTeXt User Module / expkv}
+\unprotect
+\input expkv.tex
+\long\def\ekv at err@collect#1\par#2%
+  {\directlua{tex.error[[\detokenize{#2} Error: #1]]}}
+\writestatus{loading}
+  {ConTeXt User Module / expkv / Version \ekvVersion\space loaded}
+\protect\endinput
+%    \end{macrocode}
+% \gobbledocstriptag
+%</ctx>
+%^^A=<<
 %^^A main file >>=
 % \subsection{The Generic Code}
 % The rest of this implementation will be the generic code.
@@ -1584,9 +1626,22 @@
   \expandafter
 \endgroup
 \ifx\ekvtmpa\ekvtmpb
+  \expandafter\let\csname ekv at expanded\endcsname\expanded
+  \expandafter\let\csname ekv at unexpanded\endcsname\unexpanded
 \else
-  \errmessage{expkv Error: e-TeX and \noexpand\expanded required}
-  \expandafter\endinput
+  \begingroup
+    \edef\ekvtmpa{\string\expanded}
+    \edef\ekvtmpb{\meaning\normalexpanded}
+    \expandafter
+  \endgroup
+  \ifx\ekvtmpa\ekvtmpb
+    \expandafter\let\csname ekv at expanded\endcsname\normalexpanded
+    \expandafter\let\csname ekv at unexpanded\endcsname\normalunexpanded
+  \else
+    \errmessage
+      {expkv Error: e-TeX and the \noexpand\expanded primitive required}%
+    \expandafter\endinput
+  \fi
 \fi
 %    \end{macrocode}
 %
@@ -1593,8 +1648,8 @@
 % \begin{macro}{\ekvVersion,\ekvDate}
 % We're on our first input, so lets store the version and date in a macro.
 %    \begin{macrocode}
-\def\ekvVersion{1.9}
-\def\ekvDate{2021-07-15}
+\def\ekvVersion{1.9a}
+\def\ekvDate{2021-09-20}
 %    \end{macrocode}
 % \end{macro}
 %
@@ -1731,7 +1786,7 @@
 %    \begin{macrocode}
 \ekv at if@lastnamedcs
   {%
-    \def\ekv at ifdefined#1{\ifcsname#1\endcsname\ekv at ifdef@\fi\@secondoftwo}
+    \long\def\ekv at ifdefined#1{\ifcsname#1\endcsname\ekv at ifdef@\fi\@secondoftwo}
     \def\ekv at ifdef@\fi\@secondoftwo
       {%
         \fi
@@ -1742,7 +1797,7 @@
       }
   }
   {%
-    \def\ekv at ifdefined#1%
+    \long\def\ekv at ifdefined#1%
       {%
         \ifcsname#1\endcsname\ekv at ifdef@\fi\ekv at ifdef@false#1\endcsname\relax
           \ekv at fi@secondoftwo
@@ -1853,7 +1908,7 @@
       }%
   }
 \expandafter\ekv at csv@loop\expandafter{\ekv at strip{#2}}
-\long\def\ekv at csv@loop at do#1#2{\unexpanded{#2{#1}}\ekv at csv@loop{#2}\ekv at mark}
+\long\def\ekv at csv@loop at do#1#2{\ekv at unexpanded{#2{#1}}\ekv at csv@loop{#2}\ekv at mark}
 \def\ekv at csv@loop at end#1%
   {%
     \long\def\ekv at csv@loop at end
@@ -1875,13 +1930,13 @@
 % The keys will all follow the same naming scheme, so we define it here.
 %    \begin{macrocode}
 \def\ekv at name@set#1{ekv#1(}
-\def\ekv at name@key#1{#1)}
+\long\def\ekv at name@key#1{#1)}
 \edef\ekv at name
   {%
-    \unexpanded\expandafter{\ekv at name@set{#1}}%
-    \unexpanded\expandafter{\ekv at name@key{\detokenize{#2}}}%
+    \ekv at unexpanded\expandafter{\ekv at name@set{#1}}%
+    \ekv at unexpanded\expandafter{\ekv at name@key{\detokenize{#2}}}%
   }
-\ekv at exparg{\def\ekv at name#1#2}{\ekv at name}
+\long\ekv at exparg{\def\ekv at name#1#2}{\ekv at name}
 %    \end{macrocode}
 % \end{macro}
 %
@@ -1908,15 +1963,15 @@
 %    \begin{macrocode}
 \edef\ekv at checkvalid
   {%
-    \unexpanded\expandafter{\ekv at ifempty{#1}}%
-    \unexpanded
+    \ekv at unexpanded\expandafter{\ekv at ifempty{#1}}%
+    \ekv at unexpanded
       {{%
         \def\ekv at tmp{}%
         \errmessage{expkv Error: empty set name not allowed}%
       }}%
       {%
-        \unexpanded\expandafter{\ekv at ifempty{#2}}%
-        \unexpanded
+        \ekv at unexpanded\expandafter{\ekv at ifempty{#2}}%
+        \ekv at unexpanded
           {%
             {%
               \def\ekv at tmp{}%
@@ -1925,7 +1980,7 @@
             \@secondoftwo
           }%
       }%
-    \unexpanded{\@gobble}%
+    \ekv at unexpanded{\@gobble}%
   }
 \ekv at exparg{\protected\def\ekv at checkvalid#1#2}{\ekv at checkvalid}%
 %    \end{macrocode}
@@ -1934,9 +1989,9 @@
 % \begin{macro}{\ekvifdefined,\ekvifdefinedNoVal}
 % And provide user-level macros to test whether a key is defined.
 %    \begin{macrocode}
-\ekv at expargtwice{\def\ekvifdefined#1#2}%
+\ekv at expargtwice{\long\def\ekvifdefined#1#2}%
   {\expandafter\ekv at ifdefined\expandafter{\ekv at name{#1}{#2}}}
-\ekv at expargtwice{\def\ekvifdefinedNoVal#1#2}%
+\ekv at expargtwice{\long\def\ekvifdefinedNoVal#1#2}%
   {\expandafter\ekv at ifdefined\expandafter{\ekv at name{#1}{#2}N}}
 %    \end{macrocode}
 % \end{macro}
@@ -1955,9 +2010,9 @@
       {#1{\expandafter\def\csname#2\endcsname####1{##3}#3}}%
     \protected\long\def\ekvdefNoVal##1##2##3%
       {#1{\expandafter\def\csname#2N\endcsname{##3}#3}}%
-    \protected\def\ekvlet##1##2##3%
+    \protected\long\def\ekvlet##1##2##3%
       {#1{\expandafter\let\csname#2\endcsname##3#3}}%
-    \protected\def\ekvletNoVal##1##2##3%
+    \protected\long\def\ekvletNoVal##1##2##3%
       {#1{\expandafter\let\csname#2N\endcsname##3#3}}%
     \ekv at expargtwice{\protected\long\def\ekvdefunknown##1##2}%
       {%
@@ -1981,7 +2036,7 @@
           }%
           {\ekv at zero\ekv at checkvalid{##1}.}%
       }%
-    \protected\def\ekvletkv##1##2##3##4%
+    \protected\long\def\ekvletkv##1##2##3##4%
       {%
         #1%
           {%
@@ -1990,7 +2045,7 @@
             #3%
           }%
       }%
-    \protected\def\ekvletkvNoVal##1##2##3##4%
+    \protected\long\def\ekvletkvNoVal##1##2##3##4%
       {%
         #1%
           {%
@@ -2002,13 +2057,13 @@
   }
 \edef\ekvdefNoVal
   {%
-    {\unexpanded\expandafter{\ekv at checkvalid{#1}{#2}}}%
-    {\unexpanded\expandafter{\ekv at name{#1}{#2}}}%
+    {\ekv at unexpanded\expandafter{\ekv at checkvalid{#1}{#2}}}%
+    {\ekv at unexpanded\expandafter{\ekv at name{#1}{#2}}}%
     {%
-      \unexpanded{\expandafter\ekv at defsetmacro\csname}%
-      \unexpanded\expandafter{\ekv at undefined@set{#1}\endcsname{#1}}%
+      \ekv at unexpanded{\expandafter\ekv at defsetmacro\csname}%
+      \ekv at unexpanded\expandafter{\ekv at undefined@set{#1}\endcsname{#1}}%
     }%
-    {\unexpanded\expandafter{\ekv at name{#3}{#4}}}%
+    {\ekv at unexpanded\expandafter{\ekv at name{#3}{#4}}}%
   }
 \expandafter\ekvdef\ekvdefNoVal
 %    \end{macrocode}
@@ -2047,7 +2102,7 @@
     \edef\ekv at tmp
       {%
         \ekvcsvloop#1{#6}%
-        \unexpanded{#2}%
+        \ekv at unexpanded{#2}%
         {\ekvcsvloop{}{#5,#6}}%
       }%
     \ekv at expargtwice
@@ -2092,7 +2147,7 @@
           {%
             \ifcsname#2\endcsname\ekv at redirect@kv at a\fi\@gobble{##1}%
             ##4{##1}{##2}%
-          }
+          }%
         \def\ekv at redirect@kv at a\fi\@gobble
           {\fi\expandafter\ekv at redirect@kv at b\lastnamedcs}%
       }
@@ -2111,17 +2166,17 @@
             \ifcsname#2\endcsname\ekv at redirect@kv at a\fi\ekv at redirect@kv at a@
               #2\endcsname{##1}%
             ##4{##1}{##2}%
-          }
+          }%
         \long\def\ekv at redirect@kv at a@#4\endcsname##3{}%
         \def\ekv at redirect@kv at a\fi\ekv at redirect@kv at a@
           {\fi\expandafter\ekv at redirect@kv at b\csname}%
-      }
+      }%
   }
 %    \end{macrocode}
 %   The key name given to this loop will already be |\detokenize|d by |\ekvset|,
 %   so we can safely remove the |\detokenize| here for some performance gain.
 %    \begin{macrocode}
-\def\ekv at redirect@kv#1\detokenize#2#3\ekv at stop{\unexpanded{#1#2#3}}
+\def\ekv at redirect@kv#1\detokenize#2#3\ekv at stop{\ekv at unexpanded{#1#2#3}}
 \edef\ekv at redirect@kv
   {%
     {\expandafter\ekv at redirect@kv\ekv at name{#2}{#1}N\ekv at stop}%
@@ -2158,12 +2213,12 @@
 %    \begin{macrocode}
 \edef\ekv at defsetmacro
   {%
-    \unexpanded{\ifx#1\relax\edef#1##1}%
+    \ekv at unexpanded{\ifx#1\relax\edef#1##1}%
       {%
-        \unexpanded\expandafter{\ekv at name@set{#2}}%
-        \unexpanded\expandafter{\ekv at name@key{##1}}%
+        \ekv at unexpanded\expandafter{\ekv at name@set{#2}}%
+        \ekv at unexpanded\expandafter{\ekv at name@key{##1}}%
       }%
-    \unexpanded{\fi}%
+    \ekv at unexpanded{\fi}%
   }
 \ekv at exparg{\protected\def\ekv at defsetmacro#1#2}{\ekv at defsetmacro}
 %    \end{macrocode}
@@ -2341,12 +2396,12 @@
 %    \begin{macrocode}
 \edef\ekv at set@noeq
   {%
-    \unexpanded
+    \ekv at unexpanded
       {%
         \ekv at ifblank@##1\ekv at nil\ekv at ifempty@B\ekv at set@was at blank
           \ekv at ifempty@A\ekv at ifempty@B
       }%
-    \unexpanded\expandafter
+    \ekv at unexpanded\expandafter
       {\ekv at strip{##1}{\expandafter\ekv at set@key\detokenize}\ekv at mark}%
   }
 \ekv at exparg
@@ -2398,12 +2453,15 @@
 % macro, that has the same scope as |\keyval_parse:NNn| from \pkg{expl3}.
 % This is pretty analogue to the |\ekvset| implementation, we just put an
 % |\unexpanded| here and there instead of other macros to stop the |\expanded|
-% on our output. The |\unexpanded\expanded{{...}}| ensures that the material is
-% in an alignment safe group at all time, and that it doesn't expand any further
-% in an |\edef| or |\expanded| context.
+% on our output. The |\unexpanded\expanded{{...}}| ensures that the material
+% is in an alignment safe group at all time, and that it doesn't expand any
+% further in an |\edef| or |\expanded| context.
 %    \begin{macrocode}
 \long\def\ekvparse##1##2##3%
-  {\unexpanded\expanded{{\ekv at parse{##1}{##2}\ekv at mark##3#1\ekv at stop#1}}}
+  {%
+    \ekv at unexpanded\ekv at expanded
+      {{\ekv at parse{##1}{##2}\ekv at mark##3#1\ekv at stop#1}}%
+  }
 %    \end{macrocode}
 % \end{macro}
 %
@@ -2485,12 +2543,12 @@
 %    \begin{macrocode}
 \edef\ekv at parse@noeq
   {%
-    \unexpanded
+    \ekv at unexpanded
       {%
         \ekv at ifblank@##1\ekv at nil\ekv at ifempty@B\ekv at parse@was at blank
           \ekv at ifempty@A\ekv at ifempty@B
       }%
-      \unexpanded\expandafter{\ekv at strip{##1}\ekv at parse@key}%
+      \ekv at unexpanded\expandafter{\ekv at strip{##1}\ekv at parse@key}%
   }
 \ekv at exparg
   {%
@@ -2521,7 +2579,7 @@
   {\ekv at strip{##2}\ekv at parse@pair@{##1}}
 \long\def\ekv at parse@pair@##1##2##3##4%
   {%
-    \unexpanded{##4{##2}{##1}}%
+    \ekv at unexpanded{##4{##2}{##1}}%
     \ekv at parse@other{##3}{##4}%
   }
 %    \end{macrocode}
@@ -2531,7 +2589,7 @@
 %    \begin{macrocode}
 \long\def\ekv at parse@key##1##2%
   {%
-    \unexpanded{##2{##1}}%
+    \ekv at unexpanded{##2{##1}}%
     \ekv at parse@other{##2}%
   }
 %    \end{macrocode}
@@ -2552,8 +2610,8 @@
 %    \begin{macrocode}
 \edef\ekvsetSneaked
   {%
-    \unexpanded{\ekvsneak{#2}}%
-    \unexpanded\expandafter{\ekvset{#1}{#3}}%
+    \ekv at unexpanded{\ekvsneak{#2}}%
+    \ekv at unexpanded\expandafter{\ekvset{#1}{#3}}%
   }
 \ekv at expargtwice{\long\def\ekvsetSneaked#1#2#3}{\ekvsetSneaked}
 %    \end{macrocode}
@@ -2891,7 +2949,8 @@
 \ekv at exparg{\long\def\ekv at err@common@#1`#2' #3.#4#5}%
   {\ekv at err{#4 `#5' in set `#2'}}
 \ekv at exparg{\long\def\ekv at err@unknown#1}{\ekv at err@common{unknown key}{#1}}
-\ekv at exparg{\long\def\ekv at err@noarg  #1}{\ekv at err@common{unwanted value for}{#1}}
+\ekv at exparg{\long\def\ekv at err@noarg  #1}
+  {\ekv at err@common{unwanted value for}{#1}}
 \ekv at exparg{\long\def\ekv at err@reqval #1}{\ekv at err@common{missing value for}{#1}}
 \ekv at exparg{\long\def\ekv at err@redirect at kv@notfound#1#2#3\ekv at stop}%
   {\ekv at err{no key `#2' in sets #3}}

Added: trunk/Master/texmf-dist/tex/context/third/expkv/t-expkv.tex
===================================================================
--- trunk/Master/texmf-dist/tex/context/third/expkv/t-expkv.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/context/third/expkv/t-expkv.tex	2021-09-21 19:46:31 UTC (rev 60573)
@@ -0,0 +1,44 @@
+%%
+%% This is file `t-expkv.tex',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% expkv.dtx  (with options: `ctx')
+%% 
+%% --------------------------------------------------------------
+%% expkv -- an expandable key=val implementation
+%% E-mail: jspratte at yahoo.de
+%% Released under the LaTeX Project Public License v1.3c or later
+%% See http://www.latex-project.org/lppl.txt
+%% --------------------------------------------------------------
+%% 
+%% Copyright (C) 2020-2021 Jonathan P. Spratte
+%% 
+%% This  work may be  distributed and/or  modified under  the conditions  of the
+%% LaTeX Project Public License (LPPL),  either version 1.3c  of this license or
+%% (at your option) any later version.  The latest version of this license is in
+%% the file:
+%% 
+%%   http://www.latex-project.org/lppl.txt
+%% 
+%% This work is "maintained" (as per LPPL maintenance status) by
+%%   Jonathan P. Spratte.
+%% 
+%% This work consists of the file  expkv.dtx
+%% and the derived files           expkv.pdf
+%%                                 expkv.sty
+%%                                 expkv.tex
+%%                                 t-expkv.tex
+%% 
+\writestatus{loading}{ConTeXt User Module / expkv}
+\unprotect
+\input expkv.tex
+\long\def\ekv at err@collect#1\par#2%
+  {\directlua{tex.error[[\detokenize{#2} Error: #1]]}}
+\writestatus{loading}
+  {ConTeXt User Module / expkv / Version \ekvVersion\space loaded}
+\protect\endinput
+%% 
+%%
+%% End of file `t-expkv.tex'.


Property changes on: trunk/Master/texmf-dist/tex/context/third/expkv/t-expkv.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/tex/generic/expkv/expkv.tex
===================================================================
--- trunk/Master/texmf-dist/tex/generic/expkv/expkv.tex	2021-09-21 19:46:16 UTC (rev 60572)
+++ trunk/Master/texmf-dist/tex/generic/expkv/expkv.tex	2021-09-21 19:46:31 UTC (rev 60573)
@@ -29,6 +29,7 @@
 %% and the derived files           expkv.pdf
 %%                                 expkv.sty
 %%                                 expkv.tex
+%%                                 t-expkv.tex
 %% 
 \expandafter\ifx\csname ekvVersion\endcsname\relax
 \else
@@ -40,12 +41,25 @@
   \expandafter
 \endgroup
 \ifx\ekvtmpa\ekvtmpb
+  \expandafter\let\csname ekv at expanded\endcsname\expanded
+  \expandafter\let\csname ekv at unexpanded\endcsname\unexpanded
 \else
-  \errmessage{expkv Error: e-TeX and \noexpand\expanded required}
-  \expandafter\endinput
+  \begingroup
+    \edef\ekvtmpa{\string\expanded}
+    \edef\ekvtmpb{\meaning\normalexpanded}
+    \expandafter
+  \endgroup
+  \ifx\ekvtmpa\ekvtmpb
+    \expandafter\let\csname ekv at expanded\endcsname\normalexpanded
+    \expandafter\let\csname ekv at unexpanded\endcsname\normalunexpanded
+  \else
+    \errmessage
+      {expkv Error: e-TeX and the \noexpand\expanded primitive required}%
+    \expandafter\endinput
+  \fi
 \fi
-\def\ekvVersion{1.9}
-\def\ekvDate{2021-07-15}
+\def\ekvVersion{1.9a}
+\def\ekvDate{2021-09-20}
 \csname ekv at tmp\endcsname
 \expandafter\chardef\csname ekv at tmp\endcsname=\catcode`\@
 \catcode`\@=11
@@ -94,7 +108,7 @@
 \long\def\ekv at ifblank@\ekv at mark#1{\ekv at ifempty@\ekv at ifempty@A}
 \ekv at if@lastnamedcs
   {%
-    \def\ekv at ifdefined#1{\ifcsname#1\endcsname\ekv at ifdef@\fi\@secondoftwo}
+    \long\def\ekv at ifdefined#1{\ifcsname#1\endcsname\ekv at ifdef@\fi\@secondoftwo}
     \def\ekv at ifdef@\fi\@secondoftwo
       {%
         \fi
@@ -105,7 +119,7 @@
       }
   }
   {%
-    \def\ekv at ifdefined#1%
+    \long\def\ekv at ifdefined#1%
       {%
         \ifcsname#1\endcsname\ekv at ifdef@\fi\ekv at ifdef@false#1\endcsname\relax
           \ekv at fi@secondoftwo
@@ -164,7 +178,7 @@
       }%
   }
 \expandafter\ekv at csv@loop\expandafter{\ekv at strip{#2}}
-\long\def\ekv at csv@loop at do#1#2{\unexpanded{#2{#1}}\ekv at csv@loop{#2}\ekv at mark}
+\long\def\ekv at csv@loop at do#1#2{\ekv at unexpanded{#2{#1}}\ekv at csv@loop{#2}\ekv at mark}
 \def\ekv at csv@loop at end#1%
   {%
     \long\def\ekv at csv@loop at end
@@ -180,25 +194,25 @@
     \ekv at strip{\ekv at mark#1}\ekv at csv@loop at do#2%
   {\ekv at csv@loop{#2}\ekv at mark}
 \def\ekv at name@set#1{ekv#1(}
-\def\ekv at name@key#1{#1)}
+\long\def\ekv at name@key#1{#1)}
 \edef\ekv at name
   {%
-    \unexpanded\expandafter{\ekv at name@set{#1}}%
-    \unexpanded\expandafter{\ekv at name@key{\detokenize{#2}}}%
+    \ekv at unexpanded\expandafter{\ekv at name@set{#1}}%
+    \ekv at unexpanded\expandafter{\ekv at name@key{\detokenize{#2}}}%
   }
-\ekv at exparg{\def\ekv at name#1#2}{\ekv at name}
+\long\ekv at exparg{\def\ekv at name#1#2}{\ekv at name}
 \def\ekv at undefined@set#1{! expkv Error: Set `#1' undefined.}
 \edef\ekv at checkvalid
   {%
-    \unexpanded\expandafter{\ekv at ifempty{#1}}%
-    \unexpanded
+    \ekv at unexpanded\expandafter{\ekv at ifempty{#1}}%
+    \ekv at unexpanded
       {{%
         \def\ekv at tmp{}%
         \errmessage{expkv Error: empty set name not allowed}%
       }}%
       {%
-        \unexpanded\expandafter{\ekv at ifempty{#2}}%
-        \unexpanded
+        \ekv at unexpanded\expandafter{\ekv at ifempty{#2}}%
+        \ekv at unexpanded
           {%
             {%
               \def\ekv at tmp{}%
@@ -207,12 +221,12 @@
             \@secondoftwo
           }%
       }%
-    \unexpanded{\@gobble}%
+    \ekv at unexpanded{\@gobble}%
   }
 \ekv at exparg{\protected\def\ekv at checkvalid#1#2}{\ekv at checkvalid}%
-\ekv at expargtwice{\def\ekvifdefined#1#2}%
+\ekv at expargtwice{\long\def\ekvifdefined#1#2}%
   {\expandafter\ekv at ifdefined\expandafter{\ekv at name{#1}{#2}}}
-\ekv at expargtwice{\def\ekvifdefinedNoVal#1#2}%
+\ekv at expargtwice{\long\def\ekvifdefinedNoVal#1#2}%
   {\expandafter\ekv at ifdefined\expandafter{\ekv at name{#1}{#2}N}}
 \def\ekvdef#1#2#3#4%
   {%
@@ -220,9 +234,9 @@
       {#1{\expandafter\def\csname#2\endcsname####1{##3}#3}}%
     \protected\long\def\ekvdefNoVal##1##2##3%
       {#1{\expandafter\def\csname#2N\endcsname{##3}#3}}%
-    \protected\def\ekvlet##1##2##3%
+    \protected\long\def\ekvlet##1##2##3%
       {#1{\expandafter\let\csname#2\endcsname##3#3}}%
-    \protected\def\ekvletNoVal##1##2##3%
+    \protected\long\def\ekvletNoVal##1##2##3%
       {#1{\expandafter\let\csname#2N\endcsname##3#3}}%
     \ekv at expargtwice{\protected\long\def\ekvdefunknown##1##2}%
       {%
@@ -246,7 +260,7 @@
           }%
           {\ekv at zero\ekv at checkvalid{##1}.}%
       }%
-    \protected\def\ekvletkv##1##2##3##4%
+    \protected\long\def\ekvletkv##1##2##3##4%
       {%
         #1%
           {%
@@ -255,7 +269,7 @@
             #3%
           }%
       }%
-    \protected\def\ekvletkvNoVal##1##2##3##4%
+    \protected\long\def\ekvletkvNoVal##1##2##3##4%
       {%
         #1%
           {%
@@ -267,13 +281,13 @@
   }
 \edef\ekvdefNoVal
   {%
-    {\unexpanded\expandafter{\ekv at checkvalid{#1}{#2}}}%
-    {\unexpanded\expandafter{\ekv at name{#1}{#2}}}%
+    {\ekv at unexpanded\expandafter{\ekv at checkvalid{#1}{#2}}}%
+    {\ekv at unexpanded\expandafter{\ekv at name{#1}{#2}}}%
     {%
-      \unexpanded{\expandafter\ekv at defsetmacro\csname}%
-      \unexpanded\expandafter{\ekv at undefined@set{#1}\endcsname{#1}}%
+      \ekv at unexpanded{\expandafter\ekv at defsetmacro\csname}%
+      \ekv at unexpanded\expandafter{\ekv at undefined@set{#1}\endcsname{#1}}%
     }%
-    {\unexpanded\expandafter{\ekv at name{#3}{#4}}}%
+    {\ekv at unexpanded\expandafter{\ekv at name{#3}{#4}}}%
   }
 \expandafter\ekvdef\ekvdefNoVal
 \protected\def\ekvredirectunknown
@@ -298,7 +312,7 @@
     \edef\ekv at tmp
       {%
         \ekvcsvloop#1{#6}%
-        \unexpanded{#2}%
+        \ekv at unexpanded{#2}%
         {\ekvcsvloop{}{#5,#6}}%
       }%
     \ekv at expargtwice
@@ -321,7 +335,7 @@
           {%
             \ifcsname#2\endcsname\ekv at redirect@kv at a\fi\@gobble{##1}%
             ##4{##1}{##2}%
-          }
+          }%
         \def\ekv at redirect@kv at a\fi\@gobble
           {\fi\expandafter\ekv at redirect@kv at b\lastnamedcs}%
       }
@@ -340,13 +354,13 @@
             \ifcsname#2\endcsname\ekv at redirect@kv at a\fi\ekv at redirect@kv at a@
               #2\endcsname{##1}%
             ##4{##1}{##2}%
-          }
+          }%
         \long\def\ekv at redirect@kv at a@#4\endcsname##3{}%
         \def\ekv at redirect@kv at a\fi\ekv at redirect@kv at a@
           {\fi\expandafter\ekv at redirect@kv at b\csname}%
-      }
+      }%
   }
-\def\ekv at redirect@kv#1\detokenize#2#3\ekv at stop{\unexpanded{#1#2#3}}
+\def\ekv at redirect@kv#1\detokenize#2#3\ekv at stop{\ekv at unexpanded{#1#2#3}}
 \edef\ekv at redirect@kv
   {%
     {\expandafter\ekv at redirect@kv\ekv at name{#2}{#1}N\ekv at stop}%
@@ -365,12 +379,12 @@
 \long\def\ekv at redirect@kv at d#1#2#3\ekv at stop{#1{#2}}
 \edef\ekv at defsetmacro
   {%
-    \unexpanded{\ifx#1\relax\edef#1##1}%
+    \ekv at unexpanded{\ifx#1\relax\edef#1##1}%
       {%
-        \unexpanded\expandafter{\ekv at name@set{#2}}%
-        \unexpanded\expandafter{\ekv at name@key{##1}}%
+        \ekv at unexpanded\expandafter{\ekv at name@set{#2}}%
+        \ekv at unexpanded\expandafter{\ekv at name@key{##1}}%
       }%
-    \unexpanded{\fi}%
+    \ekv at unexpanded{\fi}%
   }
 \ekv at exparg{\protected\def\ekv at defsetmacro#1#2}{\ekv at defsetmacro}
 \ekv at expargtwice{\def\ekvifdefinedset#1}%
@@ -432,12 +446,12 @@
   {\ekv at strip{##1}{\expandafter\ekv at set@pair\detokenize}\ekv at mark##2\ekv at nil}
 \edef\ekv at set@noeq
   {%
-    \unexpanded
+    \ekv at unexpanded
       {%
         \ekv at ifblank@##1\ekv at nil\ekv at ifempty@B\ekv at set@was at blank
           \ekv at ifempty@A\ekv at ifempty@B
       }%
-    \unexpanded\expandafter
+    \ekv at unexpanded\expandafter
       {\ekv at strip{##1}{\expandafter\ekv at set@key\detokenize}\ekv at mark}%
   }
 \ekv at exparg
@@ -461,7 +475,10 @@
 \long\def\ekvsneak##1##2\ekv at stop#1##3{##2\ekv at stop#1{##3##1}}
 \long\def\ekvsneakPre##1##2\ekv at stop#1##3{##2\ekv at stop#1{##1##3}}
 \long\def\ekvparse##1##2##3%
-  {\unexpanded\expanded{{\ekv at parse{##1}{##2}\ekv at mark##3#1\ekv at stop#1}}}
+  {%
+    \ekv at unexpanded\ekv at expanded
+      {{\ekv at parse{##1}{##2}\ekv at mark##3#1\ekv at stop#1}}%
+  }
 \long\def\ekv at parse##1##2##3#1%
   {%
     \ekv at gobble@from at mark@to at stop##3\ekv at endparse\ekv at stop
@@ -508,12 +525,12 @@
   {\ekv at strip{##1}\ekv at parse@pair##2}
 \edef\ekv at parse@noeq
   {%
-    \unexpanded
+    \ekv at unexpanded
       {%
         \ekv at ifblank@##1\ekv at nil\ekv at ifempty@B\ekv at parse@was at blank
           \ekv at ifempty@A\ekv at ifempty@B
       }%
-      \unexpanded\expandafter{\ekv at strip{##1}\ekv at parse@key}%
+      \ekv at unexpanded\expandafter{\ekv at strip{##1}\ekv at parse@key}%
   }
 \ekv at exparg
   {%
@@ -534,12 +551,12 @@
   {\ekv at strip{##2}\ekv at parse@pair@{##1}}
 \long\def\ekv at parse@pair@##1##2##3##4%
   {%
-    \unexpanded{##4{##2}{##1}}%
+    \ekv at unexpanded{##4{##2}{##1}}%
     \ekv at parse@other{##3}{##4}%
   }
 \long\def\ekv at parse@key##1##2%
   {%
-    \unexpanded{##2{##1}}%
+    \ekv at unexpanded{##2{##1}}%
     \ekv at parse@other{##2}%
   }
 }
@@ -548,8 +565,8 @@
 \ekvset,=
 \edef\ekvsetSneaked
   {%
-    \unexpanded{\ekvsneak{#2}}%
-    \unexpanded\expandafter{\ekvset{#1}{#3}}%
+    \ekv at unexpanded{\ekvsneak{#2}}%
+    \ekv at unexpanded\expandafter{\ekvset{#1}{#3}}%
   }
 \ekv at expargtwice{\long\def\ekvsetSneaked#1#2#3}{\ekvsetSneaked}
 \ekv at exparg{\def\ekvchangeset#1}%
@@ -739,7 +756,8 @@
 \ekv at exparg{\long\def\ekv at err@common@#1`#2' #3.#4#5}%
   {\ekv at err{#4 `#5' in set `#2'}}
 \ekv at exparg{\long\def\ekv at err@unknown#1}{\ekv at err@common{unknown key}{#1}}
-\ekv at exparg{\long\def\ekv at err@noarg  #1}{\ekv at err@common{unwanted value for}{#1}}
+\ekv at exparg{\long\def\ekv at err@noarg  #1}
+  {\ekv at err@common{unwanted value for}{#1}}
 \ekv at exparg{\long\def\ekv at err@reqval #1}{\ekv at err@common{missing value for}{#1}}
 \ekv at exparg{\long\def\ekv at err@redirect at kv@notfound#1#2#3\ekv at stop}%
   {\ekv at err{no key `#2' in sets #3}}

Modified: trunk/Master/texmf-dist/tex/latex/expkv/expkv.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/expkv/expkv.sty	2021-09-21 19:46:16 UTC (rev 60572)
+++ trunk/Master/texmf-dist/tex/latex/expkv/expkv.sty	2021-09-21 19:46:31 UTC (rev 60573)
@@ -29,6 +29,7 @@
 %% and the derived files           expkv.pdf
 %%                                 expkv.sty
 %%                                 expkv.tex
+%%                                 t-expkv.tex
 %% 
 \def\ekv at tmp
   {%



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