texlive[53117] Master/texmf-dist: erw-l3 (13dec19)

commits+karl at tug.org commits+karl at tug.org
Fri Dec 13 23:29:18 CET 2019


Revision: 53117
          http://tug.org/svn/texlive?view=revision&revision=53117
Author:   karl
Date:     2019-12-13 23:29:17 +0100 (Fri, 13 Dec 2019)
Log Message:
-----------
erw-l3 (13dec19)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/latex/erw-l3/erw-l3.pdf
    trunk/Master/texmf-dist/source/latex/erw-l3/erw-l3.dtx
    trunk/Master/texmf-dist/tex/latex/erw-l3/erw-l3.sty

Added Paths:
-----------
    trunk/Master/texmf-dist/doc/latex/erw-l3/README.md

Removed Paths:
-------------
    trunk/Master/texmf-dist/doc/latex/erw-l3/README.txt
    trunk/Master/texmf-dist/doc/latex/erw-l3/erw-l3.hd

Added: trunk/Master/texmf-dist/doc/latex/erw-l3/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/erw-l3/README.md	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/erw-l3/README.md	2019-12-13 22:29:17 UTC (rev 53117)
@@ -0,0 +1,8 @@
+----------------------------------------------------------------
+erw-l3 --- Utilities built around expl3
+Source repository: https://github.com/rogard/erw-l3
+Released under the LaTeX Project Public License v1.3c or later
+See http://www.latex-project.org/lppl.txt
+
+----------------------------------------------------------------
+


Property changes on: trunk/Master/texmf-dist/doc/latex/erw-l3/README.md
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Deleted: trunk/Master/texmf-dist/doc/latex/erw-l3/README.txt
===================================================================
--- trunk/Master/texmf-dist/doc/latex/erw-l3/README.txt	2019-12-13 19:10:43 UTC (rev 53116)
+++ trunk/Master/texmf-dist/doc/latex/erw-l3/README.txt	2019-12-13 22:29:17 UTC (rev 53117)
@@ -1,7 +0,0 @@
-----------------------------------------------------------------
-erw-l3 --- Utilities built around expl3
-Source repository: https://github.com/er-cpp/erw-l3
-Released under the LaTeX Project Public License v1.3c or later
-See http://www.latex-project.org/lppl.txt
-----------------------------------------------------------------
-

Deleted: trunk/Master/texmf-dist/doc/latex/erw-l3/erw-l3.hd
===================================================================
Modified: trunk/Master/texmf-dist/doc/latex/erw-l3/erw-l3.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/source/latex/erw-l3/erw-l3.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/erw-l3/erw-l3.dtx	2019-12-13 19:10:43 UTC (rev 53116)
+++ trunk/Master/texmf-dist/source/latex/erw-l3/erw-l3.dtx	2019-12-13 22:29:17 UTC (rev 53117)
@@ -6,7 +6,7 @@
 %<*readme>
 ----------------------------------------------------------------
 erw-l3 --- Utilities built around expl3
-Source repository: https://github.com/er-cpp/erw-l3
+Source repository: https://github.com/rogard/erw-l3
 Released under the LaTeX Project Public License v1.3c or later
 See http://www.latex-project.org/lppl.txt
 ----------------------------------------------------------------
@@ -72,8 +72,8 @@
 %</internal>
 %<package>\ProvidesExplPackage
 %<package>  {erw-l3}              % Package name
-%<package>  {2018/6/21}     % Release date
-%<package>  {0.1.3}                 % Release version
+%<package>  {2019/10/12}     % Release date
+%<package>  {0.1.5}                 % Release version
 %<package>  {Utilities built around expl3} % Description
 %
 %<*driver>
@@ -116,30 +116,26 @@
 %
 % \tableofcontents 
 %
-% \section{Preliminaries}
+% \section*{Conventions}
 %
-% See \autoref{part:other}~\autoref{support} on how to get this package. 
-% To use it, make sure the file \file{erw-l3.sty} is in the path of the \LaTeX~engine.
-% In the preamble of your \LaTeX document, put: 
-% \begin{center}
-% \cs{usepackage}\oarg{options}|{|\pkg{erw-l3}|}|\linebreak
-% \end{center}
+% The naming conventions are (loosely) those of \LaTeX3.
+% For example,  \meta{cs} stands for \emph{control sequence}, which is described in \cite[Part~\pkg{l3basics}]{interface3}. 
 %
-% \floatstyle{ruled}
-% \newfloat{Listing}{H}{lop}
-% \NewDocumentCommand{\erwtab}{O{0.5}}{\tabto{#1\linewidth}}
+% \section*{Requirement}
 %
+% Have \file{erw-l3.sty} is in the path of the \LaTeX~engine. 
+%
 % \part{Usage}\label{part:usage}
 %
-% The naming conventions are (loosely) those of \LaTeX3. 
-% For example,  \meta{cs} stands for \emph{control sequence}, which is described in \cite[Part~\pkg{l3basics}]{interface3}. 
+% In the preamble of \cs{documentclass}, put: 
+% \begin{center}
+% \cs{usepackage}\oarg{options}|{|\pkg{erw-l3}|}|\linebreak
+% \end{center}
 %
-% \section{backend}
+% \section{\textsf{compose}} 
 %
-% We call `backend' commands that are \pkg{expl3}-like. 
+% \subsection{\textsf{backend}}
 %
-% \subsection{\textsf{compose}} 
-%
 % \begin{function}{\erw_compose:nV,\erw_compose:nn}
 %   \begin{syntax}
 %     \cs{erw_compose:nV}\marg{cs list}\meta{var}
@@ -180,31 +176,43 @@
 %   \begin{syntax}
 %     \cs{erw_compose_seq_vers:nV}\marg{list of cs or code}\meta{seq}
 %   \end{syntax}
-%   Not implemented.
+%  {\color{red}Not implemented}
 %  \end{function}
 %
-% \subsection{\textsf{csutil}} 
+% \section{\textsf{csutil}} 
 %
-% \begin{function}{\erw_apply:Nn, \erw_apply:cn}
+% \subsection{\textsf{backend}}
+%
+% \begin{function}{\erw_accum:nn}
+%    \begin{syntax}{\cs{erw_accum:nn}}\marg{token list}\marg{item}
+%     \end{syntax}Expands to a token list comprising the items of \meta{token list} and \meta{item}
+% \end{function}
+%
+% \begin{function}{\erw_apply:Nn, \erw_apply:cn, \erw_apply:Nnn, \erw_apply:Nnnn, \erw_apply:Nnnnn}
 %    \begin{syntax}{\cs{erw_apply:Nn}}\meta{cs}\marg{arg}
 %     \end{syntax}Expands to \meta{cs}\marg{arg}
 % \end{function}
 %
-%  \begin{function}{\erw_cs_set_eq:NN, \erw_cs_set_eq:cN}
+%  \begin{function}{\erw_cs_set_eq:NN, \erw_cs_set_eq:cN,\erw_cs_gset_eq:NN, \erw_cs_gset_eq:cN}
 %     \begin{syntax}{\cs{erw_cs_set_eq:NN}}\meta{cs1}\meta{cs2}
 %     \end{syntax}\meta{cs1}\textleftarrow\meta{cs2}
 %  \end{function}
 %
-%  \begin{function}{\erw_cs_set_inline:Nn, \erw_cs_set_inline:cn}
+%  \begin{function}{\erw_cs_set_inline:Nn, \erw_cs_set_inline:cn,\erw_cs_gset_inline:Nn, \erw_cs_gset_inline:cn}
 %     \begin{syntax}{\cs{erw_cs_set_inline:Nn}}\meta{cs}\marg{code}
 %     \end{syntax}
 %  \end{function}
 %
-%  \begin{function}{\erw_identity:N,\erw_identity:c}
-%     \begin{syntax}{\cs{erw_identity:N}}\marg{arg}
+%  \begin{function}{\erw_identity:n}
+%     \begin{syntax}{\cs{erw_identity:n}}\marg{arg}
 %     \end{syntax} Expands to \meta{arg}
 %  \end{function}
 %
+%  \begin{function}{\erw_is_matrix_p:n,\erw_is_matrix:nTF}
+%     \begin{syntax}{\cs{erw_is_matrix_p:n}}\marg{token list}
+%     \end{syntax} Checks if \meta{token list} is a (square) matrix.
+%  \end{function}
+%
 % \begin{function}{\erw_fold:NV, \erw_fold:cV}
 %    \begin{syntax}{\cs{erw_fold:NV}}\meta{cs}\meta{var}
 %     \end{syntax}\meta{var}\textleftarrow \cs{erw_apply:NV}\meta{cs}\meta{var}.
@@ -211,16 +219,16 @@
 % See Listing~\autoref{listng:fold}. 
 % \end{function}
 %
-% \begin{function}{\erw_items_to:nn}
-%    \begin{syntax}{\cs{erw_items_to:nn}}\marg{int}\marg{token list}
-%    \end{syntax} See Listing~\autoref{listng:items}
-% \end{function}
-%
 % \begin{function}{\erw_last_item:nn}
 %    \begin{syntax}{\cs{erw_last_item:nn}}\marg{int}\marg{token list}
-%    \end{syntax} See Listing~\autoref{listng:items}
+%    \end{syntax} ^^ASee Listing~\autoref{listng:items}
 % \end{function}
 %
+% \begin{function}{\erw_merge:nn}
+%    \begin{syntax}{\cs{erw_merge:nn}}\marg{tl 1}\marg{tl 2}
+%     \end{syntax}Merges \meta{tl 1}\meta{tl 2}
+% \end{function}
+%
 % \begin{function}{\erw_repeat:nn}
 %    \begin{syntax}{\cs{erw_repeat:nn}}\marg{int}\marg{value}
 %    \end{syntax}
@@ -232,10 +240,41 @@
 %    \end{syntax} See Listing~\autoref{listng:split}
 % \end{function}
 %
-% \subsection{\textsf{map}} 
+% \section{\textsf{int}} 
 %
+% \subsection{\textsf{backend}}
+%
+% \begin{function}{\erw_int_range:nn}
+%    \begin{syntax}{\cs{erw_int_range:nn}}\marg{first}{last}
+%     \end{syntax} Returns a range of integers. Implementation different than \cs{int_step_inline} 
+% \end{function}
+%
+% \begin{function}{\erw_int_range:n}
+%    \begin{syntax}{\cs{erw_int_range:n}}\marg{count}
+%     \end{syntax} Returns a range of integers. Implementation different than \cs{int_step_inline}. See Listing~\autoref{listng:int:range}
+% \end{function}
+%
+% \section{\textsf{map}} 
+%
+% \subsection{\textsf{backend}}
+%
+% \begin{function}{\erw_set_map:N,\erw_gset_map:N}
+%    \begin{syntax}{\cs{erw_set_map:N}}\meta{cs}
+%     \end{syntax} Sets the function used by \cs{erw_map:n}.
+% \end{function}
+%
+% \begin{function}{\erw_set_map_inline:n,\erw_gset_map_inline:n}
+%    \begin{syntax}{\cs{erw_set_map_inline:n}}\marg{code}
+%     \end{syntax} Sets the function used by \cs{erw_map:n}.
+% \end{function}
+%
+% \begin{function}{\erw_map:n}
+%    \begin{syntax}{\cs{erw_map:n}}\marg{token list}
+%     \end{syntax} Applies the stored \meta{cs} to each item in \meta{token list}.  An application is \cs{erw_is_matrix} 
+% \end{function}
+%
 % \begin{function}{\erw_map:Nn}
-%    \begin{syntax}{\cs{erw_map:Nn}}\meta{cs}\marg{args}
+%    \begin{syntax}{\cs{erw_map:Nn}}\meta{cs}\marg{token list}
 %     \end{syntax}
 % See Listing~\autoref{listng:map}.
 % Redundant with \cs{tl_map_function:nN}
@@ -247,9 +286,14 @@
 % See Listing~\autoref{listng:mapinl}
 % \end{function}
 %
+% \begin{function}{\erw_map_indexed:Nnn}
+%    \begin{syntax}{\cs{erw_map_indexed:Nnn}}\meta{cs}\marg{int}\marg{matrix of tokens} 
+%    \end{syntax} {\color{red} Not implemented}. See Listing~\autoref{listng:mapindexed}.
+% \end{function}
+%
 % \begin{function}{\erw_map_thread:Nn}
 %    \begin{syntax}{\cs{erw_map_thread:Nn}}\meta{cs}\marg{matrix of tokens} 
-%    \end{syntax} Threads \meta{cs} over the columns, where the arity of \meta{cs} is equal to the number of rows.
+%    \end{syntax} Threads \meta{cs} over the columns, where the arity of \meta{cs} must be equal to the number of rows.
 % See Listing~\autoref{listng:thread}
 % \end{function}
 %
@@ -258,9 +302,9 @@
 %    \end{syntax}  
 % \end{function}
 %
-% \subsection{\textsf{numbrdcs}}
+% \section{\textsf{numbrdcs}}
 %
-% Part of these commands have a frontend counterpart, see \autoref{usage:frontend:numbrdcs}.
+% \subsection{backend}
 %
 % \begin{function}{\erw_numbrd_cs_reset:}
 %   \begin{syntax}\cs{erw_numbrd_cs_reset:}|{}|
@@ -282,34 +326,8 @@
 %   \end{syntax}See Listing~\ref{listng:numbrdcs:names}
 % \end{function}
 %
-% \section{frontend}\label{part:frontend}
+% \subsection{frontend}
 %
-% We call frontend commands created with pkg{xparse}'s\cs{NewDocumentCommand}\cite{xparse} 
-%
-% \subsection{\textsf{disambig}}
-%
-% \begin{function}{\disambignewcmd,\disambignewcmd*}
-%    \begin{syntax}{\cs{disambignewcmd}}\marg{token}\marg{pars}\marg{code}
-%     \end{syntax}Analogues of \cs{NewDocumentCommand} and \cs{RenewDocumentCommand}. See~Listing~\ref{listng:disambig:cmd}
-% \end{function}
-%
-% \begin{function}{\disambignewenv,\disambignewenv*}
-%    \begin{syntax}{\cs{disambignewenv}}\marg{token}\marg{pars}\marg{code1}\marg{code2}
-%     \end{syntax}Analogues of \cs{NewDocumentEnvironment} and \cs{RenewDocumentEnvironment}. See~Listing~\ref{listng:disambig:env}
-% \end{function}
-%
-% \begin{function}{\disambigset}
-%    \begin{syntax}{\cs{disambigset}}\marg{prefix}
-%     \end{syntax}
-% \end{function}
-%
-% \begin{function}{\disambigunset}
-%    \begin{syntax}{\cs{disambigunset}}|{}|
-%     \end{syntax}
-% \end{function}
-%
-% \subsection{\textsf{numbrdcs}}\label{usage:frontend:numbrdcs}
-%
 % \begin{function}{\numbrdcsnew,\numbrdcsnew*}
 %   \begin{syntax}\cs{numbrdcsnew}\marg{list of cs or code}
 %   \end{syntax} Creates numbered control sequences. The starred version does not reset. See Listing~\ref{listng:numbrdcs}
@@ -324,14 +342,18 @@
 %
 % \part{Listings}\label{part:listng}
 %
-% \section{Backend} 
+% \floatstyle{ruled}
+% \newfloat{Listing}{H}{lop}
+% \NewDocumentCommand{\erwtab}{O{0.5}}{\tabto{#1\linewidth}}
 %
-% \subsection{compose}
+% \section{compose}
 %
+% \subsection{\textsf{backend}}
+%
 % \vspace*{\fill}
 % \begin{Listing}
-% \ExplSyntaxOn
-% \verb|\cs_set:Npn \__foo #1 {f(#1)}|\erwtab\cs_set:Npn \__foo #1 {f(#1)}
+% \verb|\ExplSyntaxOn|\ExplSyntaxOn
+% \\\verb|\cs_set:Npn \__foo #1 {f(#1)}|\erwtab\cs_set:Npn \__foo #1 {f(#1)}
 % \\\verb|\cs_set:Npn \__bar #1 {g[#1]}|\erwtab\cs_set:Npn \__bar #1 {g[#1]}
 % \\\verb|\cs_set:Npn \__baz #1 {h\{#1\}}|\erwtab\cs_set:Npn \__baz #1 {h\{#1\}}
 % \\\verb|\tl_set:Nn \l_tmpa_tl{X}|\erwtab\tl_set:Nn \l_tmpa_tl{X}
@@ -343,14 +365,14 @@
 % \\\verb|\erw_compose:nn{|
 % \\\verb|  {\__baz}{\__bar}{\__foo}}|
 % \\\verb|  {X}|\erwtab\erw_compose:nn{{\__baz}{\__bar}{\__foo}}{X}
-% \ExplSyntaxOff
+% \\\verb|\ExplSyntaxOff|\ExplSyntaxOff
 % \caption{ }\label{listng:compose}
 % \end{Listing}
 %
 % \vspace*{\fill}
 % \begin{Listing}
-% \ExplSyntaxOn
-% \verb|\cs_set:Npn \__foo #1 {f(#1)}|\cs_set:Npn \__foo #1 {f(#1)}
+% \verb|\ExplSyntaxOn|\ExplSyntaxOn
+% \\\verb|\cs_set:Npn \__foo #1 {f(#1)}|\cs_set:Npn \__foo #1 {f(#1)}
 % \\\verb|\cs_set:Npn \__bar #1 {g[#1]}|\cs_set:Npn \__bar #1 {g[#1]}
 % \\\verb|\cs_set:Npn \__baz #1 {h\{#1\}}|\cs_set:Npn \__baz #1 {h\{#1\}}
 % \\\verb|\tl_set:Nn \l_tmpa_tl{X}|\tl_set:Nn \l_tmpa_tl{X}
@@ -361,14 +383,14 @@
 % \\\verb|\erw_compose_c:nn{|
 % \\\verb|  {__baz}{__bar}{__foo}}|
 % \\\verb|  {X}|\erwtab\erw_compose_c:nn{{__baz}{__bar}{__foo}}{X}
-% \ExplSyntaxOff
+% \\\verb|\ExplSyntaxOff|\ExplSyntaxOff
 % \caption{ }\label{listng:compose:c}
 % \end{Listing}
 %
 % \vspace*{\fill}
 % \begin{Listing}
-% \ExplSyntaxOn
-% \verb|\cs_set:Npn \__foo #1 {f(#1)}|\cs_set:Npn \__foo #1 {f(#1)}
+% \verb|\ExplSyntaxOn|\ExplSyntaxOn
+% \\\verb|\cs_set:Npn \__foo #1 {f(#1)}|\cs_set:Npn \__foo #1 {f(#1)}
 % \\\verb|\cs_set:Npn \__bar #1 {g[#1]}|\cs_set:Npn \__bar #1 {g[#1]}
 % \\\verb|\cs_set:Npn \__baz #1 {h\{#1\}}|\cs_set:Npn \__baz #1 {h\{#1\}}
 % \\\verb|\seq_new:N\l_tmp_seq|\erwtab\seq_new:N \l_tmp_seq
@@ -380,14 +402,14 @@
 % \\\verb|\seq_item:Nn\l_tmp_seq{2}|\erwtab \seq_item:Nn \l_tmp_seq{2}
 % \\\verb|\seq_item:Nn\l_tmp_seq{3}|\erwtab \seq_item:Nn \l_tmp_seq{3}
 % \\\verb|\seq_item:Nn\l_tmp_seq{4}|\erwtab \seq_item:Nn \l_tmp_seq{4}
-% \ExplSyntaxOff
+% \\\verb|\ExplSyntaxOff|\ExplSyntaxOff
 % \caption{}\label{listng:compose:seq}
 % \end{Listing}
 %
 % \vspace*{\fill}
 % \begin{Listing}
-% \ExplSyntaxOn
-% \verb|\cs_set:Npn \__foo #1 {f(#1)}|\cs_set:Npn \__foo #1 {f(#1)}
+% \verb|\ExplSyntaxOn|\ExplSyntaxOn
+% \\\verb|\cs_set:Npn \__foo #1 {f(#1)}|\cs_set:Npn \__foo #1 {f(#1)}
 % \\\verb|\cs_set:Npn \__bar #1 {g[#1]}|\cs_set:Npn \__bar #1 {g[#1]}
 % \\\verb|\cs_set:Npn \__baz #1 {h\{#1\}}|\cs_set:Npn \__baz #1 {h\{#1\}}
 % \\\verb|\seq_new:N\l_tmp_seq|
@@ -399,38 +421,40 @@
 % \\\verb|\seq_item:Nn\l_tmp_seq{2}|\erwtab \seq_item:Nn \l_tmp_seq{2}
 % \\\verb|\seq_item:Nn\l_tmp_seq{3}|\erwtab \seq_item:Nn \l_tmp_seq{3}
 % \\\verb|\seq_item:Nn\l_tmp_seq{4}|\erwtab \seq_item:Nn \l_tmp_seq{4}
-% \ExplSyntaxOff
+% \\\verb|\ExplSyntaxOff|\ExplSyntaxOff
 % \caption{}\label{listng:compose:seq:c}
 % \end{Listing}
 %
 % \vspace*{\fill}
 % \begin{Listing}
-% \ExplSyntaxOn
-% \verb|\cs_set:Npn \__foo #1 {f(#1)}|\cs_set:Npn \__foo #1 {f(#1)}
+% \verb|\ExplSyntaxOn|\ExplSyntaxOn
+% \\\verb|\cs_set:Npn \__foo #1 {f(#1)}|\cs_set:Npn \__foo #1 {f(#1)}
 % \\\verb|\cs_set:Npn \__bar #1 {g[#1]}|\cs_set:Npn \__bar #1 {g[#1]}
 % \\\verb|\cs_set:Npn \__baz #1 {h\{#1\}}|\cs_set:Npn \__baz #1 {h\{#1\}}
 % \\\verb|\erw_compose_vers:nn{|
 % \\\verb|  {\__baz}{g[#1]}{\__foo}}|
 % \\\verb|  {X}|\erwtab\erw_compose_vers:nn{{\__baz}{g[#1]}{\__foo}}{X}
-% \ExplSyntaxOff
+% \\\verb|\ExplSyntaxOff|\ExplSyntaxOff
 % \caption{}\label{listng:compose:vers}
 % \end{Listing}
 %
-% \subsection{csutil}
+% \section{csutil}
 %
+% \subsection{\textsf{backend}}
+%
 % \vspace*{\fill}
 % \begin{Listing}
 % \verb|\ExplSyntaxOn| \ExplSyntaxOn
-% \verb|\cs_set:Npn \__foo #1 {f(#1)}|\erwtab\cs_set:Npn \__foo #1 {f(#1)}
+% \\\verb|\cs_set:Npn \__foo #1 {f(#1)}|\erwtab\cs_set:Npn \__foo #1 {f(#1)}
 % \\\verb|\erw_apply:Nn\__foo{X}|\erwtab\erw_apply:Nn\__foo{X}
 % \\\verb|\ExplSyntaxOff|\ExplSyntaxOff
 % \caption{ }\label{listng:apply}
 % \end{Listing}
-% 
+%
 % \vspace*{\fill}
 % \begin{Listing}
 % \verb|\ExplSyntaxOn| \ExplSyntaxOn
-% \verb|\cs_set:Npn \__foo #1 {f(#1)}|\cs_set:Npn \__foo #1 {f(#1)}
+% \\\verb|\cs_set:Npn \__foo #1 {f(#1)}|\cs_set:Npn \__foo #1 {f(#1)}
 % \\\verb|\tl_set:Nn \l_tmpa_tl{X}|\erwtab\tl_set:Nn \l_tmpa_tl{X}
 % \\\verb|\erw_fold_set_par:n{Nf}|\erw_fold_set_par:n{Nf}
 % \\\verb|\erw_fold_apply_par:n{Nf}|\erw_fold_apply_par:n{Nf}
@@ -446,20 +470,38 @@
 % \vspace*{\fill}
 % \begin{Listing}
 % \verb|\ExplSyntaxOn| \ExplSyntaxOn
-% \verb|\erw_last_item:n{{a}{b}{c}}|\erwtab \erw_last_item:n {{a}{b}{c}}
-% \\\verb|\\\erw_items_to:nn{1}{{a}{b}{c}{d}}|\erwtab \erw_items_to:nn{1}{{a}{b}{c}{d}}
-% \\\verb|\\\erw_items_to:nn{2}{{a}{b}{c}{d}}|\erwtab \erw_items_to:nn{2}{{a}{b}{c}{d}}
-% \\\verb|\\\erw_items_to:nn{3}{{a}{b}{c}{d}}|\erwtab \erw_items_to:nn{3}{{a}{b}{c}{d}}
-% \\\verb|\\\erw_items_to:nn{4}{{a}{b}{c}{d}}|\erwtab \erw_items_to:nn{4}{{a}{b}{c}{d}}
-% \\\verb|\ExplSyntaxOff| \ExplSyntaxOff
-% \caption{ }\label{listng:items}
+% \\\verb|\erw_is_matrix:nTF|
+% \\\verb|{|
+% \\\verb|        { {a}{b}{c} }|
+% \\\verb|        { {k}{l}{m} }|
+% \\\verb|        { {x}{y}{z} }|
+% \\\verb|}{T}{F}|\erwtab\erw_is_matrix:nTF
+% {
+%     { {a}{b}{c} }
+%     { {k}{l}{m} }
+%     { {x}{y}{z} }
+% }{T}{F}
+% \\\verb|\erw_is_matrix:nTF|
+% \\\verb|{|
+% \\\verb|        { {a}{c} }|
+% \\\verb|        { {k} }|
+% \\\verb|        { {x}{y}{z} }|
+% \\\verb|}{T}{F}|\erwtab
+% \erw_is_matrix:nTF
+% {
+%     { {a}{c} }
+%     { {k} }
+%     { {x}{y}{z} }
+% }{T}{F}
+% \\\verb|\ExplSyntaxOff|\ExplSyntaxOff
+% \caption{ }\label{listng:ismatrix}
 % \end{Listing}
 %
 % \vspace*{\fill}
 % \begin{Listing}
 % \verb|\ExplSyntaxOn| \ExplSyntaxOn
-% \\\verb|\erw_repeat:nn{|
-% \\\verb|  {3}{abracad}}abra| \erwtab \erw_repeat:nn{3}{abracad}abra
+% \\\verb|\erw_repeat:nn|
+% \\\verb|  {3}{abracad}abra| \erwtab \erw_repeat:nn{3}{abracad}abra
 % \\\verb|\ExplSyntaxOff|\ExplSyntaxOff
 % \caption{ }\label{listng:repeat}
 % \end{Listing}
@@ -467,18 +509,32 @@
 % \vspace*{\fill}
 % \begin{Listing}
 % \verb|\ExplSyntaxOn| \ExplSyntaxOn
-% \\\verb|\erw_split:nn{|
-% \\\verb|  {{a}{b}{c}}{==}}| \erwtab \erw_split:nn{{a}{b}{c}}{==}
+% \\\verb|\erw_split:nn|
+% \\\verb|  {{a}{b}{c}}{==}| \erwtab \erw_split:nn{{a}{b}{c}}{==}
 % \\\verb|\ExplSyntaxOff|\ExplSyntaxOff
 % \caption{ }\label{listng:split}
 % \end{Listing}
 %
-% \subsection{\textsf{map}}
+% \section{\textsf{int}}
 %
+% \subsection{\textsf{backend}}
+%
+% \begin{Listing}
+% \verb|\ExplSyntaxOn|\ExplSyntaxOn
+% \\\verb|\erw_int_range:nn{2}{5}|\erwtab\erw_int_range:nn{2}{5}
+% \\\verb|\erw_int_range:n{5}|\erwtab\erw_int_range:n{5}
+% \\\verb|\ExplSyntaxOff|\ExplSyntaxOff
+% \caption{ }\label{listng:int:range}
+% \end{Listing}
+%
+% \section{\textsf{map}}
+%
+% \subsection{\textsf{backend}}
+%
 % \vspace*{\fill}
 % \begin{Listing}
 % \verb|\ExplSyntaxOn| \ExplSyntaxOn
-%\verb|\cs_set:Npn \__foo #1 {(#1)}|\cs_set:Npn \__foo #1 {(#1)}
+% \\\verb|\cs_set:Npn \__foo #1 {(#1)}|\cs_set:Npn \__foo #1 {(#1)}
 % \\\verb|\erw_map:Nn \__foo{{a}{b}{c}}|\erwtab\erw_map:Nn \__foo{{a}{b}{c}}
 % \\\verb|\ExplSyntaxOff|\ExplSyntaxOff
 % \caption{ }\label{listng:map}
@@ -487,7 +543,7 @@
 % \vspace*{\fill}
 % \begin{Listing}
 % \verb|\ExplSyntaxOn| \ExplSyntaxOn
-% \verb|\cs_set:Npn \__foo #1 {(#1)}|\cs_set:Npn \__foo #1 {(#1)}
+% \\\verb|\cs_set:Npn \__foo #1 {(#1)}|\cs_set:Npn \__foo #1 {(#1)}
 % \\\verb|\erw_map_inline:nn{|
 % \\\verb|  (#1)}{{a}{b}{c}}| \erwtab\erw_map_inline:nn{(#1)}{{a}{b}{c}}
 % \\\verb|\ExplSyntaxOff|\ExplSyntaxOff
@@ -496,8 +552,8 @@
 %
 % \vspace*{\fill}
 % \begin{Listing}
-% \ExplSyntaxOn
-% \verb|\cs_set:Npn \__foo:n #1 {(#1)}|\cs_set:Npn \__foo:n #1 {(#1)}
+% \verb|\ExplSyntaxOn|\ExplSyntaxOn
+% \\\verb|\cs_set:Npn \__foo:n #1 {(#1)}|\cs_set:Npn \__foo:n #1 {(#1)}
 % \\\verb|\erw_map_thread:Nn \__foo:n|
 % \\\verb|{|
 % \\\verb|     {{a}{b}{c}{d}{e}{f}}|
@@ -546,12 +602,61 @@
 %         {{k}{l}{m}{n}{o}{p}}
 %         {{K}{L}{M}{N}{O}{P}}
 % }
+% \\\verb|\ExplSyntaxOff|\ExplSyntaxOff
 % \caption{ }\label{listng:thread}
-% \ExplSyntaxOff
 % \end{Listing}
 %
-% \subsection{\textsf{numbrdcs}}
+% \begin{Listing}
+% \verb|\ExplSyntaxOn|\ExplSyntaxOn
+% \\\verb|\cs_set_protected:Npn \__foo:nn #1 #2|
+% \\\verb|    {(#1+#2)}| \cs_set_protected:Npn \__foo:nn #1 #2 {(#1+#2)}
+% \\\verb|\erw_map_thread:Nn|
+% \\\verb|    \__foo:nn |
+% \\\verb|        { |
+% \\\verb|            {{1}{2}{3}} |
+% \\\verb|            {{a}{b}{c}}|
+% \\\verb|        }|\erwtab\erw_map_thread:Nn
+%     \__foo:nn 
+%     { 
+%         {{1}{2}{3}} 
+%         {{a}{b}{c}}
+%     }
+% \\\verb|\exp_last_unbraced:Nx|
+% \\\verb|\erw_map_thread:Nn|
+% \\\verb|{|
+% \\\verb|        \__foo:nn |
+% \\\verb|        { |
+% \\\verb|            {\erw_int_range:n{3}} |
+% \\\verb|            {{a}{b}{c}}|
+% \\\verb|        }|
+% \\\verb|}| \erwtab
+% \exp_last_unbraced:Nx
+% \erw_map_thread:Nn
+% {
+%     \__foo:nn 
+%     { 
+%         {\erw_int_range:n{3}} 
+%         {{a}{b}{c}}
+%     }
+% }\erwtab[0.7]{\color{red} (does~not~thread!)}
+% \\\verb|\exp_last_unbraced:Nx|
+% \\\verb|\erw_map_thread:Nn|
+% \\\verb|{|
+% \\\verb|        \__foo:nn |
+% \\\verb|        { |
+% \\\verb|            {\int_step_inline:nn{3}{#1}} |
+% \\\verb|            {{a}{b}{c}}|
+% \\\verb|        }|
+% \\\verb|}| 
+% \erwtab[0.2]{\color{red} \verb|Illegal parameter number in definition of \l__exp_internal_tl!|}
+% \\\verb|\ExplSyntaxOff|\ExplSyntaxOff
+% \caption{Debugging~for~\cs{erw_map_indexed}}\label{listng:mapindexed}
+% \end{Listing}
 %
+% \section{\textsf{numbrdcs}}
+%
+% \subsection{\textsf{backend}}
+%
 % \vspace*{\fill}
 % \begin{Listing}
 % \verb|\NewDocumentCommand{\myfoo}{m}{f(#1)}|\NewDocumentCommand{\myfoo}{m}{f(#1)}
@@ -562,8 +667,8 @@
 % \\\verb|\exp_last_unbraced:Nx|
 % \\\verb|  \erw_compose_c:nn|
 % \\\verb|  {|
-% \\\verb|    {\erw_numbrd_cs_names|
-% \\\verb|         _braced:nnn{1}{1}{3}}|
+% \\\verb|    {\erw_numbrd_cs_names_braced:|
+% \\\verb|         nnn{1}{1}{3}}|
 % \\\verb|    {X}|
 % \\\verb|  }|
 % \\\verb|\ExplSyntaxOff|\erwtab
@@ -576,62 +681,8 @@
 % \caption{ }\label{listng:numbrdcs:names}
 % \end{Listing}
 %
-% \section{Frontend}
+% \subsection{frontend}
 %
-% ^^A\vspace*{\fill}
-% ^^A\begin{Listing}
-% ^^A\verb|\NewDocumentCommand{\thefoo}{m}{f(#1)}|
-% ^^A\\\verb|\NewDocumentCommand{\thebar}{m}{g[#1]}|
-% ^^A\\\verb|\NewDocumentCommand{\thebaz}{m}{h\{#1\}}|
-% ^^A\caption{Initialization}\label{listng:init:front}
-% ^^A\end{Listing}
-%
-% \subsection{disambig}
-%
-% \begin{Listing}
-% \textbf{Input}
-% \begin{verbatim}
-% \disambigset{my}
-% \disambignewcmd{\foo}{m}{#1~world!}
-% \noindent\myfoo{Hello}
-% \disambignewcmd*{\foo}{m}{#1~universe!}
-% \\\myfoo{Hello}
-% \disambigunset
-% \disambignewcmd{\foo}{m}{#1~world!}
-% \\\foo{Hello}
-% \end{verbatim}
-% \textbf{Output}
-% \\\disambigset{my}
-% \disambignewcmd{\foo}{m}{#1~world!}
-% \noindent\myfoo{Hello}
-% \disambignewcmd*{\foo}{m}{#1~universe!}
-% \\\myfoo{Hello}
-% \disambigunset
-% \disambignewcmd{\foo}{m}{#1~world!}
-% \\\foo{Hello}
-% \caption{}\label{listng:disambig:cmd}
-% \end{Listing}
-%
-% \begin{Listing}
-% \textbf{Input}
-% \begin{verbatim}
-% \disambigset{my}
-% \disambignewenv{bar}{}{H}{!}
-% \\\begin{mybar}ello~world\end{mybar}
-% \disambignewenv*{bar}{}{J}{!}
-% \\\begin{mybar}ello~world\end{mybar}
-% \end{verbatim}
-% \textbf{Output}
-% \disambigset{my}
-% \disambignewenv{bar}{}{H}{!}
-% \\\begin{mybar}ello~world\end{mybar}
-% \disambignewenv*{bar}{}{J}{!}
-% \\\begin{mybar}ello~world\end{mybar}
-% \caption{}\label{listng:disambig:env}
-% \end{Listing}
-%
-% \subsection{\textsf{numbrdcs}}
-%
 % \vspace*{\fill}
 % \begin{Listing}
 % \verb|\NewDocumentCommand{\thefoo}{m}{f(#1)}|\NewDocumentCommand{\thefoo}{m}{f(#1)}
@@ -654,60 +705,7 @@
 % \caption{ }\label{listng:numbrdcs}
 % \end{Listing}
 %
-% \part{Other}\label{part:other}
-% 
-% \section{Support}\label{support}
 %
-% This package is available from \url{https://www.ctan.org/pkg/erw-l3} (release) or \url{https://github.com/er-cpp/erw-l3} (development) where you can report issues. 
-%
-% \section{Acknowledgment} 
-% I thank those that have answered my questions on forums pertaining to \LaTeX3. See here: \url{https://tex.stackexchange.com/users/112708/erwann?tab=questions}
-% and here: \url{https://latex.org/forum/memberlist.php?mode=viewprofile&u=61329}
-%
-% ^^A \section{Change history}
-% ^^A TODO Bring the change history under this section
-% ^^A The versions showns are of those of the development stage, some may have been skipped in the release.
-% ^^A \iffalse 
-% ^^A : changes
-% ^^A \fi
-%
-% \changes{0.1}{2018/05/20}{Initial version} 
-% \changes{0.1.1}{2018/05/23}{}
-% \changes{0.1.1}{2018/05/23}{Brought all the modules under one file; renamed \pkg{l3erw} to \pkg{erw-l3};}
-% \changes{0.1.1}{2018/05/23}{\pkg{disambig}/backend: changes to the key, added \cs{ProcessPackageKeysOption};}
-% \changes{0.1.1}{2018/05/23}{\cs{numbrdcsnew} changed to \cs{newnumbrdcs} and made 'disambiguable'}
-% \changes{0.1.2}{2018/06/21}{}
-% \changes{0.1.2}{2018/06/21}{\cs{erw_compose} reversed order in which the functions are composed, such that it now conforms to
-% the mathematical convention ($g\circ f$ means $f$ comes before $g$)}
-%\changes{0.1.2}{2018/06/21}{Front end cmds no longer generated with module \pkg{disambig}; Option of the same name deleted;}
-%\changes{0.1.2}{2018/06/21}{\pkg{disambig}: pushed the code inside \cs{keys_define};\cs{disambignewcmd} no longer takes a token name as arg, rather a token.}
-%\changes{0.1.2}{2018/06/21}{Added \cs{erw_repeat}}
-%\changes{0.1.2}{2018/06/21}{Added \cs{erw_split}}
-%\changes{0.1.2}{2018/06/21}{Added \cs{erw_last_item}}
-%\changes{0.1.2}{2018/06/21}{Added \cs{erw_items_to}}
-%\changes{0.1.2}{2018/06/21}{Added \cs{map_thread}}
-%\changes{0.1.2}{2018/06/21}{Re-arranged the doc to clearly separate frontend from backend}
-% 
-% % \begin{thebibliography}{1}
-%
-% ^^A\bibitem{expl3} The \LaTeX3 Project Team {\em The \pkg{expl3} package and \LaTeX3 programming}  
-% ^^A\url{http://ftp.math.purdue.edu/mirrors/ctan.org/macros/latex/contrib/l3kernel/expl3.pdf}
-%
-% \bibitem{interface3} The \LaTeX3 Project Team {\em The \LaTeX3 interfaces} 
-% \url{http://ftp.math.purdue.edu/mirrors/ctan.org/macros/latex/contrib/l3kernel/interface3.pdf}
-%
-% \bibitem{xparse} The \LaTeX3 Project Team {\em The \pkg{xparse} package} 
-% \url{http://ftp.math.purdue.edu/mirrors/ctan.org/macros/latex/contrib/l3packages/xparse.pdf}
-%
-% ^^A \bibitem{l3pckg} The \LaTeX3 Project Team {\em l3packages}  \url{http://mirror.ctan.org/macros/latex/contrib/l3packages/}
-%
-% ^^A \bibitem{tex.stack:431046} \url{https://tex.stackexchange.com/questions/431046/calling-expl3s-usec-on-an-expression-expanding-to-a-cs-name-causes-error}
-%
-% ^^A \bibitem{tex.stack:432171} \url{https://tex.stackexchange.com/questions/432171/expl3-making-arguments-from-a-loop}
-%
-% \end{thebibliography}
-%
-%
 %\StopEventually{^^A
 %  \PrintChanges
 %  \PrintIndex
@@ -726,8 +724,8 @@
 \ExplSyntaxOn
 \msg_new:nnn{erw}{generic}{#1}
 %    \end{macrocode}
-% \section{Back end} 
-% \subsection{\textsf{compose}} 
+% \section{\textsf{compose}} 
+% \subsection{backend} 
 %    \begin{macrocode}
 \cs_set:Npn \erw_compose:NnV 
   #1 % method
@@ -794,8 +792,13 @@
          {#2}
 }
 %    \end{macrocode}
-% \subsection{\textsf{csutil}} 
+% \section{\textsf{csutil}} 
+% \subsection{\textsf{backend}} 
 %    \begin{macrocode}
+\cs_set:Npn \erw_accum:nn #1 #2
+{
+    {#1{#2}}
+}
 \cs_set:Npn \__erw_cs_name:N #1
 {
     \exp_last_unbraced:Nf \use_i:nnn {\cs_split_function:N #1}
@@ -812,11 +815,21 @@
   \cs_set:Npn #1 ##1{#2{##1}}
 }
 \cs_generate_variant:Nn \erw_cs_set_eq:NN {cN}
+\cs_set:Npn \erw_cs_gset_eq:NN #1 #2
+{
+  \cs_gset:Npn #1 ##1{#2{##1}}
+}
+\cs_generate_variant:Nn \erw_cs_gset_eq:NN {cN}
 \cs_set:Npn \erw_cs_set_inline:Nn #1 #2
 {
   \cs_set:Npn #1 ##1{#2}
 }
 \cs_generate_variant:Nn \erw_cs_set_inline:Nn {cn}
+\cs_set:Npn \erw_cs_gset_inline:Nn #1 #2
+{
+  \cs_gset:Npn #1 ##1{#2}
+}
+\cs_generate_variant:Nn \erw_cs_gset_inline:Nn {cn}
 \tl_set:Nn \__erw_fold_set_par_tl{\c_novalue_tl}
 \tl_set:Nn \__erw_fold_apply_par_tl{\c_novalue_tl}
 \cs_set:Npn \erw_fold_set_par:n #1
@@ -847,28 +860,43 @@
 }
 \cs_generate_variant:Nn \erw_fold_seq:NV {cV}
 \cs_set:Npn \erw_identity:n #1{#1}
-\cs_set:Npn\__erw_items_to:nnn #1 #2 #3
+\prg_set_conditional:Npnn \erw_is_matrix:n #1 { p, TF }
 {
-    \int_compare:nNnTF
-    {#1}>{#2}
+    \erw_gset_map_inline:n{==\tl_count:n{##1}}
+    \int_compare:nTF
     {
-        \exp_args:Nf \tl_head:n{#3}
-        \__erw_items_to:nnn
-            {#1}
-            {\int_eval:n{#2+1}}
-            {\exp_args:Nf \tl_tail:n{#3}}
+        \exp_args:Nf\tl_count:n{\tl_head:n{#1}}
+        \exp_args:Nf \erw_map:n 
+        {
+                \tl_tail:n{#1}
+            }
     }
-    {
-        \exp_args:Nf \tl_head:n{#3}
-    }
+    {\prg_return_true:}
+    {\prg_return_false:}
 }
-\cs_set:Npn \erw_items_to:nn #1 #2
-{
-    \__erw_items_to:nnn
-        {#1}
-        {1}
-        {#2}
-}
+% Deprecated in v0.1.4 after realizing \cs{tl_range:n} does the job
+%\cs_set:Npn\__erw_items_to:nnn #1 #2 #3
+%{
+%    \int_compare:nNnTF
+%    {#1}>{#2}
+%    {
+%        \exp_args:Nf \tl_head:n{#3}
+%        \__erw_items_to:nnn
+%            {#1}
+%            {\int_eval:n{#2+1}}
+%            {\exp_args:Nf \tl_tail:n{#3}}
+%    }
+%    {
+%        \exp_args:Nf \tl_head:n{#3}
+%    }
+%}
+%\cs_set:Npn \erw_items_to:nn #1 #2
+%{
+%    \__erw_items_to:nnn
+%        {#1}
+%        {1}
+%        {#2}
+%}
 \cs_set:Npn \erw_last_item:n #1
 {
     \exp_args:Nof \tl_item:nn
@@ -877,6 +905,10 @@
             \tl_count:n{#1}
         }
 }
+\cs_set:Npn \erw_merge:nn #1 #2
+{
+    {#1#2}
+}
 \cs_set:Npn \erw_repeat:nn #1 #2
 {
     \int_step_inline:nnnn{1}{1}{#1}{#2}
@@ -897,8 +929,52 @@
     \erw_split:nnn{#1}{#2}{Nf}
 }
 %    \end{macrocode}
-% \subsection{\textsf{map}} 
+% \section{\textsf{map}} 
+% \subsection{\textsf{backend}} 
 %    \begin{macrocode}
+\cs_set:Npn \__erw_int_range:nnn #1 #2 #3
+{
+    \int_compare:nNnTF
+    {
+            \int_eval:n{#2+1}
+    }>{#3}
+    { 
+        {#1}
+    }
+    {
+        \__erw_int_range:nnn
+        {
+            \exp_args:Nx\erw_accum:nn{#1}
+            {
+                \int_eval:n{#2+1}
+            }
+        }
+        {\int_eval:n{#2+1}}
+        {#3}
+    }
+}
+\cs_set:Npn \erw_int_range:nn #1 #2
+{
+    \__erw_int_range:nnn {{#1}}{#1}{#2}
+}
+\cs_set:Npn \erw_int_range:n #1
+{
+    \__erw_int_range:nnn {}{0}{#1}
+% Alt to:
+%    \int_step_inline:nn {#1}{##1}
+}
+%    \end{macrocode}
+% \section{\textsf{map}} 
+% \subsection{\textsf{backend}} 
+%    \begin{macrocode}
+\cs_set:Npn \erw_gset_map:N #1
+{
+    \erw_cs_gset_eq:NN \__erw_map:n #1
+}
+\cs_set:Npn \erw_gset_map_inline:n #1
+{
+    \erw_cs_gset_inline:Nn \__erw_map:n {#1}
+}
 \cs_set:Npn \erw_map:n #1
 {    
   \__erw_map:nn#1\q_recursion_tail\q_recursion_stop\q_recursion_tail\q_recursion_stop
@@ -941,7 +1017,6 @@
 {
     #1{#2}{#3}{#4}{#5}
 }
-
 \cs_set:Npn \__erw_map_thread_at:Nnn #1 #2 #3
 { 
      \erw_apply:Nn #1
@@ -989,7 +1064,6 @@
             {erw_map_thread_at:~count~of~#3~not~withing~1~to~4}        
     }
 }
-
 \cs_set:Npn \erw_map_thread:Nn #1 #2
 {
     % TODO check that #2 is a matrix
@@ -1002,7 +1076,8 @@
     }
 }
 %    \end{macrocode}
-% \subsection{\textsf{numbrdcs}}
+% \section{\textsf{numbrdcs}}
+% \subsection{\textsf{backend}} 
 %    \begin{macrocode}
 \int_new:N \__erw_numbrd_cs_int
 \cs_set:Npn \erw_numbrd_cs_name:n #1{__erw_numbrd_cs_\int_to_alph:n{#1}:n}
@@ -1042,58 +1117,7 @@
     \erw_numbrd_cs_names_braced:nnn{1}{1}{\__erw_numbrd_cs_int}
 }
 %    \end{macrocode}
-% \section{frontend} 
-% \subsection{\textsf{disambig}} 
-%   \begin{macrocode}
-\cs_set:Npn \__erw_disambig:NN #1 #2 {#1{#2}}
-\cs_generate_variant:Nn \__erw_disambig:NN { Nc }
-\NewDocumentCommand{\disambignewcmd}{ s m m m }
-{
-  \msg_error:nnn{erw}{generic}{disambignewcmd~undefined}
-}
-\NewDocumentCommand{\disambignewenv}{ s m m m m }
-{
-  \msg_error:nnn{erw}{generic}{disambignewenv~undefined}
-}
-\keys_define:nn { erw }    
-{
-  disambig .code:n = 
-  {
-    \RenewDocumentCommand{\disambignewcmd}{ s m m m }
-  {
-      \IfBooleanTF{##1}
-          {\__erw_disambig:Nc{\RenewDocumentCommand}}
-          {\__erw_disambig:Nc{\NewDocumentCommand}}
-        {#1 \__erw_cs_name:N ##2}
-        {##3}
-        {##4}
-  }
-  \RenewDocumentCommand{\disambignewenv}{ s m m m m }
-  {
-      \IfBooleanTF{##1}
-        {\RenewDocumentEnvironment}
-        {\NewDocumentEnvironment}
-      {#1##2}
-      {##3}
-      {##4}
-      {##5}
-  }
-  },
-  disambig .initial:n = \c_empty_tl
-}
-\NewDocumentCommand{\disambigset}{ m }
-{
-    \keys_set:nn { erw }
-    {    
-          disambig={#1}
-    }        
-}
-\NewDocumentCommand{\disambigunset}{}
-{
-    \disambigset{\c_empty_tl}
-}
-%    \end{macrocode}
-% \subsection{\textsf{numbrdcs}} 
+% \subsection{\textsf{frontend}} 
 %    \begin{macrocode}
 \NewDocumentCommand{\numbrdcsnew}{ s m }
 {
@@ -1106,13 +1130,84 @@
 {
     \erw_numbrd_cs:nn{#1}{#2}
 }
-%    \end{macrocode}
-%    \begin{macrocode}
 % \ProcessKeysPackageOptions{ erw }
 \ExplSyntaxOff
 %    \end{macrocode}
+% \part{Other}\label{part:other}
 %
+% \section{Support}\label{support}
 %
+% This package is available from \url{https://www.ctan.org/pkg/erw-l3} (release) or \url{https://github.com/rogard/erw-l3} (development) where you can report issues. 
+%
+% \section{To do}\label{todo}
+%
+% \begin{itemize}
+% \item Missing variants of \cs{erw_compose}
+% \item \cs{erw_map_indexed}. See Listing~\autoref{listng:mapindexed}
+% \item Need to give some thought to `protected'
+% \end{itemize}
+%
+% \section{Acknowledgment} 
+% I thank those that have answered my questions on forums pertaining to \LaTeX3. See here: \url{https://tex.stackexchange.com/users/112708/erwann?tab=questions}
+% and here: \url{https://latex.org/forum/memberlist.php?mode=viewprofile&u=61329}
+%
+% ^^A \section{Change history}
+% ^^A TODO Bring the change history under this section
+% ^^A The versions showns are of those of the development stage, some may have been skipped in the release.
+% ^^A \iffalse 
+% ^^A : changes
+% ^^A \fi
+%
+% \changes{0.1}{2018/05/20}{Initial version} 
+% \changes{0.1.1}{2018/05/23}{}
+% \changes{0.1.1}{2018/05/23}{Brought all the modules under one file; renamed \pkg{l3erw} to \pkg{erw-l3};}
+% \changes{0.1.1}{2018/05/23}{\pkg{disambig}/backend: changes to the key, added \cs{ProcessPackageKeysOption};}
+% \changes{0.1.1}{2018/05/23}{\cs{numbrdcsnew} changed to \cs{newnumbrdcs} and made 'disambiguable'}
+% \changes{0.1.2}{2018/06/21}{}
+% \changes{0.1.2}{2018/06/21}{\cs{erw_compose} reversed order in which the functions are composed, such that it now conforms to
+% the mathematical convention ($g\circ f$ means $f$ comes before $g$)}
+%\changes{0.1.2}{2018/06/21}{Front end cmds no longer generated with module \pkg{disambig}; Option of the same name deleted;}
+%\changes{0.1.2}{2018/06/21}{\pkg{disambig}: pushed the code inside \cs{keys_define};\cs{disambignewcmd} no longer takes a token name as arg, rather a token.}
+%\changes{0.1.2}{2018/06/21}{Added \cs{erw_repeat}}
+%\changes{0.1.2}{2018/06/21}{Added \cs{erw_split}}
+%\changes{0.1.2}{2018/06/21}{Added \cs{erw_last_item}}
+%\changes{0.1.2}{2018/06/21}{Added \cs{erw_items_to}}
+%\changes{0.1.2}{2018/06/21}{Added \cs{map_thread}}
+%\changes{0.1.2}{2018/06/21}{Re-arranged the doc to clearly separate frontend from backend}
+%\changes{0.1.3}{2018/06/22}{Wrong versioning, should have been 0.1.2}
+%\changes{0.1.4}{2018/06/22}{}
+%\changes{0.1.4}{2018/06/22}{Removed \cs{erw_items_to} (redundant with \cs{tl_range:nnn})}
+%\changes{0.1.4}{2018/06/22}{Added \cs{erw_accum}}
+%\changes{0.1.4}{2018/06/22}{Added \cs{erw_merge}}
+%\changes{0.1.4}{2018/06/22}{Added \cs{erw_int_range}}
+%\changes{0.1.4}{2018/06/22}{Added \cs{erw_set_map}}
+%\changes{0.1.4}{2018/06/22}{Added \cs{erw_set_map_inline}}
+%\changes{0.1.4}{2018/06/22}{Added \cs{erw_is_matrix}}
+%\changes{0.1.5}{2019/12/12}{Modified source repository}
+%\changes{0.1.5}{2019/12/12}{Rearranged frontend/backend sections}
+%\changes{0.1.5}{2019/12/12}{Split Section Preliminaries into Conventions and Requirement.}
+%\changes{0.1.5}{2019/12/12}{Removed \pkg{disambig}}
+% 
+% % \begin{thebibliography}{1}
+%
+% ^^A\bibitem{expl3} The \LaTeX3 Project Team {\em The \pkg{expl3} package and \LaTeX3 programming}  
+% ^^A\url{http://ftp.math.purdue.edu/mirrors/ctan.org/macros/latex/contrib/l3kernel/expl3.pdf}
+%
+% \bibitem{interface3} The \LaTeX3 Project Team {\em The \LaTeX3 interfaces} 
+% \url{http://ftp.math.purdue.edu/mirrors/ctan.org/macros/latex/contrib/l3kernel/interface3.pdf}
+%
+% \bibitem{xparse} The \LaTeX3 Project Team {\em The \pkg{xparse} package} 
+% \url{http://ftp.math.purdue.edu/mirrors/ctan.org/macros/latex/contrib/l3packages/xparse.pdf}
+%
+% ^^A \bibitem{l3pckg} The \LaTeX3 Project Team {\em l3packages}  \url{http://mirror.ctan.org/macros/latex/contrib/l3packages/}
+%
+% ^^A \bibitem{tex.stack:431046} \url{https://tex.stackexchange.com/questions/431046/calling-expl3s-usec-on-an-expression-expanding-to-a-cs-name-causes-error}
+%
+% ^^A \bibitem{tex.stack:432171} \url{https://tex.stackexchange.com/questions/432171/expl3-making-arguments-from-a-loop}
+%
+% \end{thebibliography}
+%
+%
 % \iffalse
 %</package>
 % \fi

Modified: trunk/Master/texmf-dist/tex/latex/erw-l3/erw-l3.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/erw-l3/erw-l3.sty	2019-12-13 19:10:43 UTC (rev 53116)
+++ trunk/Master/texmf-dist/tex/latex/erw-l3/erw-l3.sty	2019-12-13 22:29:17 UTC (rev 53117)
@@ -13,8 +13,8 @@
 %% 
 \ProvidesExplPackage
   {erw-l3}              % Package name
-  {2018/6/21}     % Release date
-  {0.1.3}                 % Release version
+  {2019/10/12}     % Release date
+  {0.1.5}                 % Release version
   {Utilities built around expl3} % Description
 \NeedsTeXFormat{LaTeX2e}
 \RequirePackage{expl3}[2018/06/01]
@@ -86,6 +86,10 @@
          {{\erw_numbrd_cs_names_braced:{}}}
          {#2}
 }
+\cs_set:Npn \erw_accum:nn #1 #2
+{
+    {#1{#2}}
+}
 \cs_set:Npn \__erw_cs_name:N #1
 {
     \exp_last_unbraced:Nf \use_i:nnn {\cs_split_function:N #1}
@@ -102,11 +106,21 @@
   \cs_set:Npn #1 ##1{#2{##1}}
 }
 \cs_generate_variant:Nn \erw_cs_set_eq:NN {cN}
+\cs_set:Npn \erw_cs_gset_eq:NN #1 #2
+{
+  \cs_gset:Npn #1 ##1{#2{##1}}
+}
+\cs_generate_variant:Nn \erw_cs_gset_eq:NN {cN}
 \cs_set:Npn \erw_cs_set_inline:Nn #1 #2
 {
   \cs_set:Npn #1 ##1{#2}
 }
 \cs_generate_variant:Nn \erw_cs_set_inline:Nn {cn}
+\cs_set:Npn \erw_cs_gset_inline:Nn #1 #2
+{
+  \cs_gset:Npn #1 ##1{#2}
+}
+\cs_generate_variant:Nn \erw_cs_gset_inline:Nn {cn}
 \tl_set:Nn \__erw_fold_set_par_tl{\c_novalue_tl}
 \tl_set:Nn \__erw_fold_apply_par_tl{\c_novalue_tl}
 \cs_set:Npn \erw_fold_set_par:n #1
@@ -137,28 +151,20 @@
 }
 \cs_generate_variant:Nn \erw_fold_seq:NV {cV}
 \cs_set:Npn \erw_identity:n #1{#1}
-\cs_set:Npn\__erw_items_to:nnn #1 #2 #3
+\prg_set_conditional:Npnn \erw_is_matrix:n #1 { p, TF }
 {
-    \int_compare:nNnTF
-    {#1}>{#2}
+    \erw_gset_map_inline:n{==\tl_count:n{##1}}
+    \int_compare:nTF
     {
-        \exp_args:Nf \tl_head:n{#3}
-        \__erw_items_to:nnn
-            {#1}
-            {\int_eval:n{#2+1}}
-            {\exp_args:Nf \tl_tail:n{#3}}
+        \exp_args:Nf\tl_count:n{\tl_head:n{#1}}
+        \exp_args:Nf \erw_map:n
+        {
+                \tl_tail:n{#1}
+            }
     }
-    {
-        \exp_args:Nf \tl_head:n{#3}
-    }
+    {\prg_return_true:}
+    {\prg_return_false:}
 }
-\cs_set:Npn \erw_items_to:nn #1 #2
-{
-    \__erw_items_to:nnn
-        {#1}
-        {1}
-        {#2}
-}
 \cs_set:Npn \erw_last_item:n #1
 {
     \exp_args:Nof \tl_item:nn
@@ -167,6 +173,10 @@
             \tl_count:n{#1}
         }
 }
+\cs_set:Npn \erw_merge:nn #1 #2
+{
+    {#1#2}
+}
 \cs_set:Npn \erw_repeat:nn #1 #2
 {
     \int_step_inline:nnnn{1}{1}{#1}{#2}
@@ -186,6 +196,43 @@
 {
     \erw_split:nnn{#1}{#2}{Nf}
 }
+\cs_set:Npn \__erw_int_range:nnn #1 #2 #3
+{
+    \int_compare:nNnTF
+    {
+            \int_eval:n{#2+1}
+    }>{#3}
+    {
+        {#1}
+    }
+    {
+        \__erw_int_range:nnn
+        {
+            \exp_args:Nx\erw_accum:nn{#1}
+            {
+                \int_eval:n{#2+1}
+            }
+        }
+        {\int_eval:n{#2+1}}
+        {#3}
+    }
+}
+\cs_set:Npn \erw_int_range:nn #1 #2
+{
+    \__erw_int_range:nnn {{#1}}{#1}{#2}
+}
+\cs_set:Npn \erw_int_range:n #1
+{
+    \__erw_int_range:nnn {}{0}{#1}
+}
+\cs_set:Npn \erw_gset_map:N #1
+{
+    \erw_cs_gset_eq:NN \__erw_map:n #1
+}
+\cs_set:Npn \erw_gset_map_inline:n #1
+{
+    \erw_cs_gset_inline:Nn \__erw_map:n {#1}
+}
 \cs_set:Npn \erw_map:n #1
 {
   \__erw_map:nn#1\q_recursion_tail\q_recursion_stop\q_recursion_tail\q_recursion_stop
@@ -228,7 +275,6 @@
 {
     #1{#2}{#3}{#4}{#5}
 }
-
 \cs_set:Npn \__erw_map_thread_at:Nnn #1 #2 #3
 {
      \erw_apply:Nn #1
@@ -276,7 +322,6 @@
             {erw_map_thread_at:~count~of~#3~not~withing~1~to~4}
     }
 }
-
 \cs_set:Npn \erw_map_thread:Nn #1 #2
 {
     % TODO check that #2 is a matrix
@@ -325,53 +370,6 @@
 {
     \erw_numbrd_cs_names_braced:nnn{1}{1}{\__erw_numbrd_cs_int}
 }
-\cs_set:Npn \__erw_disambig:NN #1 #2 {#1{#2}}
-\cs_generate_variant:Nn \__erw_disambig:NN { Nc }
-\NewDocumentCommand{\disambignewcmd}{ s m m m }
-{
-  \msg_error:nnn{erw}{generic}{disambignewcmd~undefined}
-}
-\NewDocumentCommand{\disambignewenv}{ s m m m m }
-{
-  \msg_error:nnn{erw}{generic}{disambignewenv~undefined}
-}
-\keys_define:nn { erw }
-{
-  disambig .code:n =
-  {
-    \RenewDocumentCommand{\disambignewcmd}{ s m m m }
-  {
-      \IfBooleanTF{##1}
-          {\__erw_disambig:Nc{\RenewDocumentCommand}}
-          {\__erw_disambig:Nc{\NewDocumentCommand}}
-        {#1 \__erw_cs_name:N ##2}
-        {##3}
-        {##4}
-  }
-  \RenewDocumentCommand{\disambignewenv}{ s m m m m }
-  {
-      \IfBooleanTF{##1}
-        {\RenewDocumentEnvironment}
-        {\NewDocumentEnvironment}
-      {#1##2}
-      {##3}
-      {##4}
-      {##5}
-  }
-  },
-  disambig .initial:n = \c_empty_tl
-}
-\NewDocumentCommand{\disambigset}{ m }
-{
-    \keys_set:nn { erw }
-    {
-          disambig={#1}
-    }
-}
-\NewDocumentCommand{\disambigunset}{}
-{
-    \disambigset{\c_empty_tl}
-}
 \NewDocumentCommand{\numbrdcsnew}{ s m }
 {
     \IfBooleanTF{#1}



More information about the tex-live-commits mailing list