texlive[55425] Master/texmf-dist: ccool (5jun20)

commits+karl at tug.org commits+karl at tug.org
Fri Jun 5 23:48:39 CEST 2020


Revision: 55425
          http://tug.org/svn/texlive?view=revision&revision=55425
Author:   karl
Date:     2020-06-05 23:48:38 +0200 (Fri, 05 Jun 2020)
Log Message:
-----------
ccool (5jun20)

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

Added Paths:
-----------
    trunk/Master/texmf-dist/doc/latex/ccool/ccool-1343c9d-92c.tex

Removed Paths:
-------------
    trunk/Master/texmf-dist/doc/latex/ccool/ccool--1343bdf--91e.tex
    trunk/Master/texmf-dist/source/latex/ccool/ccool.ins

Modified: trunk/Master/texmf-dist/doc/latex/ccool/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/ccool/README.md	2020-06-05 21:48:15 UTC (rev 55424)
+++ trunk/Master/texmf-dist/doc/latex/ccool/README.md	2020-06-05 21:48:38 UTC (rev 55425)
@@ -1,5 +1,5 @@
 ----------------------------------------------------------------
-##### ccool --- A tool for encoding mathematical notation
+##### ccool --- A key-value document command parser
 - Source repository: https://github.com/rogard/ccool
 - 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/ccool/ccool--1343bdf--91e.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/ccool/ccool--1343bdf--91e.tex	2020-06-05 21:48:15 UTC (rev 55424)
+++ trunk/Master/texmf-dist/doc/latex/ccool/ccool--1343bdf--91e.tex	2020-06-05 21:48:38 UTC (rev 55425)
@@ -1,12 +0,0 @@
-\begingroup \def \@@_log_entry {\Ccool <Math>i{##1}{ SuchThat = { ;~ }, Time = { t }, Process = { \xi }, StopT = { T }, EvalAt = \CcoolLambda {(##1)} }}\expandafter \endgroup \@@_log_entry 
-\begingroup \def \@@_log_entry {\Ccool <Math>i{##1}{ Scale = { \lambda }, Real = {\mathcal {R}} }}\expandafter \endgroup \@@_log_entry 
-\begingroup \def \@@_log_entry {\Ccool <Math>i{##1}{ CUSUMthresh = { \nu } }}\expandafter \endgroup \@@_log_entry 
-\begingroup \def \@@_log_entry {\Ccool <Math>i{##1}{ LogWald = { u }, CUSUMst = { \StopT _{c} }, CUSUM = { y }, LogWaldInf = { m } }}\expandafter \endgroup \@@_log_entry 
-\begingroup \def \@@_log_entry {\Ccool <Math>i{\mathbb {##1}}{ N = { N } , R = { R } }}\expandafter \endgroup \@@_log_entry 
-\begingroup \def \@@_log_entry {\Ccool <Math>i{##1}{ Grad = { \operatorname {grad} } }}\expandafter \endgroup \@@_log_entry 
-\begingroup \def \@@_log_entry {\Ccool <Math>i{##1}{ OffMenge = {D}, Ci = {C^{1}}, Strecke = { \left [x_0,x\right ] } }}\expandafter \endgroup \@@_log_entry 
-\begingroup \def \@@_log_entry {\Ccool <Math>i{##1}{ Steig = { \frac { f(x)-f(x_0) }{ x-x_0 } }, Punkt = { \xi } }}\expandafter \endgroup \@@_log_entry 
-\begingroup \def \@@_log_entry {\Ccool <Math>i{##1}{ Scale = { \lambda }, Real = {\mathcal {R}} }}\expandafter \endgroup \@@_log_entry 
-\begingroup \def \@@_log_entry {\Ccool <Math>i{##1}{ CUSUMthresh = { \nu } }}\expandafter \endgroup \@@_log_entry 
-\begingroup \def \@@_log_entry {\Ccool <Math>i{##1}{ LogWald = { u }, CUSUMst = { \StopT _{c} }, CUSUM = { y }, LogWaldInf = { m } }}\expandafter \endgroup \@@_log_entry 
-\begingroup \def \@@_log_entry {\Ccool <Math>i{##1}{}}\expandafter \endgroup \@@_log_entry 

Added: trunk/Master/texmf-dist/doc/latex/ccool/ccool-1343c9d-92c.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/ccool/ccool-1343c9d-92c.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/ccool/ccool-1343c9d-92c.tex	2020-06-05 21:48:38 UTC (rev 55425)
@@ -0,0 +1,12 @@
+\begingroup \def \__ccool_log_entry {\Ccool <Default>c{##1}{ SuchThat = { ;~ }, Time = { t }, Process = { \xi }, StopT = { T }, EvalAt = \CcoolLambda {(##1)} }}\expandafter \endgroup \__ccool_log_entry 
+\begingroup \def \__ccool_log_entry {\Ccool <Default>c{##1}{ Scale = { \lambda }, Real = {\mathcal {R}} }}\expandafter \endgroup \__ccool_log_entry 
+\begingroup \def \__ccool_log_entry {\Ccool <Default>c{##1}{ CUSUMthresh = { \nu } }}\expandafter \endgroup \__ccool_log_entry 
+\begingroup \def \__ccool_log_entry {\Ccool <Default>c{##1}{ LogWald = { u }, CUSUMst = { \StopT _{c} }, CUSUM = { y }, LogWaldInf = { m } }}\expandafter \endgroup \__ccool_log_entry 
+\begingroup \def \__ccool_log_entry {\Ccool <Default>c{\mathbb {##1}}{ N = { N } , R = { R } }}\expandafter \endgroup \__ccool_log_entry 
+\begingroup \def \__ccool_log_entry {\Ccool <Default>c{##1}{ Grad = { \operatorname {grad} } }}\expandafter \endgroup \__ccool_log_entry 
+\begingroup \def \__ccool_log_entry {\Ccool <Default>c{##1}{ OffMenge = {D}, Ci = {C^{1}}, Strecke = { \left [x_0,x\right ] } }}\expandafter \endgroup \__ccool_log_entry 
+\begingroup \def \__ccool_log_entry {\Ccool <Default>c{##1}{ Steig = { \frac { f(x)-f(x_0) }{ x-x_0 } }, Punkt = { \xi } }}\expandafter \endgroup \__ccool_log_entry 
+\begingroup \def \__ccool_log_entry {\Ccool <Default>c{##1}{ Scale = { \lambda }, Real = {\mathcal {R}} }}\expandafter \endgroup \__ccool_log_entry 
+\begingroup \def \__ccool_log_entry {\Ccool <Default>c{##1}{ CUSUMthresh = { \nu } }}\expandafter \endgroup \__ccool_log_entry 
+\begingroup \def \__ccool_log_entry {\Ccool <Default>c{##1}{ LogWald = { u }, CUSUMst = { \StopT _{c} }, CUSUM = { y }, LogWaldInf = { m } }}\expandafter \endgroup \__ccool_log_entry 
+\begingroup \def \__ccool_log_entry {\Ccool <Default>c{##1}{}}\expandafter \endgroup \__ccool_log_entry 


Property changes on: trunk/Master/texmf-dist/doc/latex/ccool/ccool-1343c9d-92c.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/doc/latex/ccool/ccool.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/source/latex/ccool/ccool.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/ccool/ccool.dtx	2020-06-05 21:48:15 UTC (rev 55424)
+++ trunk/Master/texmf-dist/source/latex/ccool/ccool.dtx	2020-06-05 21:48:38 UTC (rev 55425)
@@ -5,7 +5,7 @@
 %</internal> 
 %<*readme> 
 ----------------------------------------------------------------
-##### ccool --- A tool for encoding mathematical notation
+##### ccool --- A key-value document command parser
 - Source repository: https://github.com/rogard/ccool
 - Released under the LaTeX Project Public License v1.3c or later
 - See http://www.latex-project.org/lppl.txt
@@ -20,12 +20,12 @@
 \fi
 %</internal> 
 %<*install> 
-\input docstrip.tex
+\input l3docstrip.tex
 \keepsilent
 \askforoverwritefalse
 \preamble
 ----------------------------------------------------------------------------
-ccool --- A tool for encoding mathematical notation
+ccool --- A key-value document command parser
 Released under the LaTeX Project Public License v1.3c or later
 See http://www.latex-project.org/lppl.txt
 ----------------------------------------------------------------------------
@@ -67,28 +67,63 @@
 \else
 \expandafter\endgroup
 \fi
-%</internal>
+%</internal> 
 %<package> \NeedsTeXFormat{LaTeX2e}[2020/02/02]
+%<package> \RequirePackage{erw-l3}[2020/06/04]
 %<package> \RequirePackage{etoolbox}[2019/09/21]
 %<package> \RequirePackage{l3keys2e}[2020/03/06]
 %<package> \RequirePackage{xparse}[2020/03/06]
 %<package> \ProvidesExplPackage
-%<package> {ccool}                                                                                      % Package name
-%<package> {2020/04/15}                                                                                 % Release date
-%<package> {2.0}                                                                                        % Release version
-%<package> {cool --- A tool for encoding mathematical notation}                                         % Description
+%<package> {ccool}                                                                            % Package name
+%<package> {2020/06/04}                                                                       % Release date
+%<package> {3.0}                                                                              % Release version
+%<package> {cool --- A key-value document command parser}                                     % Description
 % 
 %<*driver> 
-\documentclass[full]{l3doc}
+\RequirePackage{fvextra}%^^A\NB{done}{Warning:csquotes should be loaded after fvextra->nope}
+\documentclass[full, show-notes]{l3doc}
 \listfiles
 \usepackage{amsmath, amssymb}
-\usepackage[english]{babel}
+\usepackage[
+%^^A afrikaans,
+%^^A basque,
+%^^A catalan,
+%^^A croatian,
+%^^A czech,
+%^^A danish,
+%^^A dutch,
+%^^A %^^A esperanto,        % ERROR
+%^^A estonian,
+%^^A finnish,
+french,
+%^^A % ^^A galician,         % ERROR
+german,
+%^^A hungarian,
+%^^A icelandic,
+%^^A indonesian,
+%^^A irish,
+%^^A italian,
+%^^A %^^A kurmanji,         % ERROR
+%^^A latin,
+%^^A %^^A latvian,          % ERROR
+%^^A lithuanian,
+%^^A ngerman,
+%^^A polish,
+%^^A portuguese,
+%^^A romanian,
+%^^A slovak,
+spanish.noquoting,      
+%^^A swedish,
+%^^A swissgerman,
+%^^A turkish,
+%^^A turkmen,
+%^^A welsh,
+english
+]{babel}
 \usepackage{bookmark}
 \usepackage{ccool}
-\usepackage{fancyvrb}
-\usepackage{fvextra}% csquotes should be loaded after fvextra
 \usepackage[T1]{fontenc}% \char`[
-\usepackage{pdfpages}
+\usepackage{microtype}
 \usepackage{tabto}
 \usepackage{tcolorbox}
 \tcbuselibrary{listings, breakable}
@@ -103,62 +138,105 @@
 \RecordChanges
 % ^^A\AtEndDocument { \PrintChanges \PrintIndex }
 \ExplSyntaxOn
+\newenvironment{docabstract}[1]%https://latex.org/forum/viewtopic.php?t=12156
+{\renewcommand{\abstractname}{#1}\begin{abstract}}
+  {\end{abstract}} 
+\ProvideDocumentCommand\DocPhantomSection{smmm}
+{
+  \leavevmode
+  \refstepcounter{#2}
+  \IfBooleanT{#1}
+  {
+    \addcontentsline{toc}{#2}{\protect\numberline{\use:c{the#2}}#3}
+  }
+  \docsetnameref{#3}
+  \label{#4}
+}
+% ^^A Sort--->
 \providecommand\docarg[1]{\texttt{#1}} % fun[param] (macro) vs fun[arg] (eval)
 \providecommand\docargnoval{\c_novalue_tl}
 \providecommand\docassign[2]{#1~$\leftarrow$~#2}
 \providecommand\docccept[1]{\textit{#1}}
+\providecommand\doccceptargspec{arg~spec}
 \providecommand\doccceptbool{boolean}
+\providecommand\doccceptclist{clist}
 \providecommand\doccceptcode{code}
+\providecommand\doccceptcsname{cs name}
+\providecommand\doccceptcsorcode{cs~or~code}
+\providecommand\doccceptcs{cs}
+\providecommand\doccceptempty{empty}
+\providecommand\doccceptgopt{global~option}
+\providecommand\doccceptgroup{local~group}
 \providecommand\doccceptint{integer}
-\providecommand\doccceptgroup{local~group}
+\providecommand\doccceptitems{items}
+\providecommand\doccceptkey{key}
 \providecommand\doccceptkvl{keyval~list}
+\providecommand\doccceptopt{option}
 \providecommand\doccceptpath{path}
+\providecommand\doccceptplaceh{placeholder}
 \providecommand\doccceptpre{preamble}
+\providecommand\doccceptprop{prop}
+\providecommand\doccceptsep{separators}
+\providecommand\doccceptseq{seq}
+\providecommand\docccepttlvar{tl~var}
+\providecommand\docccepttl{token~list}
 \providecommand\docccepttok{token}
+\providecommand\doccceptval{val}
+\providecommand\docconv[1]{convention~\autoref{conv:#1}}
+\providecommand\docdefaultfor{default~for~}
 \providecommand\docenvdoc{\env{document}}
-\providecommand\docdefaultfor{default~for~}
-\providecommand\doceval[1]{\texttt{\char`\{}#1\texttt{\char`\}}}
+\providecommand\docparm[1]{\texttt{\char`\{}#1\texttt{\char`\}}}
+\providecommand\docexpand[2]{#1~$\rightarrow$~#2}
 \providecommand\docfillblank{\begin{minipage}[t]{\linewidth}\end{minipage}}
+\providecommand\docissuedont{Don't: }
 \providecommand\docissuedo{Do: }
-\providecommand\docissuedont{Don't: }
 \providecommand\docissuesymp{Symptom: }
-\providecommand\doclist[1]{Listing~\autoref{listing:#1}}
-\providecommand\docopto[1]{\texttt{[}#1\texttt{]}}
-\providecommand\docopte[2]{\texttt{#1}\doceval{#2}}
-\providecommand\docoptd[1]{\texttt{\textless}#1\texttt{\textgreater}}
+\providecommand\doclist[1]{Listing~\ref{listing:#1}}
+\providecommand\docmetakeyorkeyval[1][i]{\meta{key_{#1}}|\meta{key_{#1}}=\meta{val_{#1}}}
+\providecommand\docnb{\noindent\textbf{NB}:~}
+\providecommand\docpard[1]{\texttt{\textless}#1\texttt{\textgreater}}
+\providecommand\docpare[2]{\texttt{#1}\docparm{#2}}
+\providecommand\docparo[1]{\texttt{[}#1\texttt{]}}
 \providecommand\docpipe{\textbar}
-\cs_new:Nn \__ccool_docu:n{\MakeUppercase #1}
+\providecommand\docreflist[1]{Listing~\ref{listing:#1}}
+\providecommand\docsee{See:~}
 \providecommand\docstep[1]{step~\ref{step:#1}}
-\providecommand\docsee{See:~}
-\providecommand\docccepttl{token~list}
 \providecommand\doctip{\noindent\textbf{Tip}:~}
-\providecommand\docU[1]{\exp_args:Nx \__ccool_docu:n{#1}}
 \providecommand\docvers[2]{v#1.#2}
 \providecommand\docwarn{\noindent\textbf{Warning}:~}
-\providecommand\pkgparde{kvl$_{1}$}%Adef
-\providecommand\pkgparhe{tl$_{2}$}%head
-\providecommand\pkgparin{code$_{1}$}%inner
-\providecommand\pkgparna{tl$_{1}$}%name
-\providecommand\pkgparou{code$_{2}$}%outer
-\providecommand\pkgpars{\Arg{\pkgparsi}\docpipe\Arg{\pkgparsi}\Arg{\pkgparsii}\docpipe\Arg{\pkgparsi}\Arg{\pkgparsii}\Arg{\pkgparsiii}}%separ
-\providecommand\pkgparsi{tl$_{3}$}
-\providecommand\pkgparsii{tl$_{4}$}
-\providecommand\pkgparsiii{tl$_{5}$}
-\providecommand\pkgparta{tl$_{6}$}%tail
+\providecommand\docxparsed[1][~argument]{`d'-type~#1}
+\providecommand\docxparsee[1][~argument]{`e'-type~#1}
+\providecommand\docxparsem[1][~argument]{`m'-type~#1}
+\providecommand\docxparseo[1][~argument]{`o'-type~#1}
 \providecommand\pkgkey{key$_{i}$}
-\providecommand\pkgval{val$_{i}$}
+\providecommand\pkgobj[1]{object identified by #1}
+\providecommand\pkgoptan{\docarg{And}}
 \providecommand\pkgoptex{\docarg{Expans}}
 \providecommand\pkgoptfi{\docarg{File}}
 \providecommand\pkgoptin{\docarg{Inner}}
-\providecommand\pkgoptna{\docarg{Name}}
-\providecommand\pkgoptnad{\docarg{Math}}%default
+\providecommand\pkgoptions{kvl0}
 \providecommand\pkgoptou{\docarg{Outer}}
+\providecommand\pkgoptpad{\docarg{Default}}%default
+\providecommand\pkgoptpa{\docarg{Param}}
+\providecommand\pkgoptse{\docarg{Separ}}
 \providecommand\pkgoptwr{\docarg{Write}}
-\providecommand\pkgoptse{\docarg{Separ}}
-\providecommand\pkgobj[1]{object identified by #1}
-\providecommand\pkgoptions{kvl0}
+\providecommand\pkgparap{\texttt{+}}%append
+\providecommand\pkgparex{\texttt{*}}%expand
+\providecommand\pkgparhe{tl$_{1}$}%head
+\providecommand\pkgparin{code$_{1}$}%inner
+\providecommand\pkgparkvlnxt{kvl$_{2}$}
+\providecommand\pkgparkvl{kvl$_{1}$}
+\providecommand\pkgparou{code$_{2}$}%outer
+\providecommand\pkgparpa{tl$_{2}$}%param
+\providecommand\pkgparsiii{tl$_{5}$}
+\providecommand\pkgparsii{tl$_{4}$}
+\providecommand\pkgparsi{tl$_{3}$}
+\providecommand\pkgpars{\Arg{\pkgparsi}\docpipe\Arg{\pkgparsi}\Arg{\pkgparsii}\docpipe\Arg{\pkgparsi}\Arg{\pkgparsii}\Arg{\pkgparsiii}}%separ
+\providecommand\pkgparta{tl$_{6}$}%tail
 \providecommand\pkgsep[1]{\Arg{#1}}
-\providecommand\pkgwrite{\cs{Ccool}\docarg{\meta{\pkgparna}}\docopte{i}{\meta{\pkgparin}}\Arg{\pkgparde}}
+\providecommand\pkgval{val$_{i}$}
+\providecommand\pkgwrite{\cs{Ccool}\docarg{\meta{\pkgparpa}}\docpare{i}{\meta{\pkgparin}}\Arg{\pkgparkvl}}
+% ^^A Sort<---
 \ExplSyntaxOff
 \begin{document}
 \DocInput{\jobname.dtx}
@@ -167,7 +245,7 @@
 % \fi
 % 
 % \GetFileInfo{\jobname.sty}
-%^^A\begin{documentation}
+% \begin{documentation}
 %   \title{The \pkg{ccool} package\thanks{^^A
 %   This file describes version \fileversion, last revised \filedate.^^A
 % }^^A
@@ -178,244 +256,290 @@
 %   
 %   \maketitle
 %   
-%   \begin{abstract} \pkg{ccool} stands for Custom COntent Oriented for \LaTeX,
-%     a concept pioneered by \pkg{cool}\cite{cool}\footnote{Whereas \pkg{cool} provided predefined macros, \pkg{ccool} is tool for making macros, hence ``custom''.}.
-%     This is done using a minimalist interface built upon \pkg{xparse}\cite{xparse}.\nobreak
-%     ~Specifically, \nameref{usage:cs:ccool}\docoptd{\meta{name}} begins a series of instructions
-%     alternating between `text' and macro definitions, that themselves optionally expand using predefined or inline rules.
-%     For example,\begin{Verbatim}[breaklines=true]
-%       \Ccool<Math>[Let~]
-%       i{\mathbb{#1}}{ Nat = N, Real = R }*s{{~\rm{and}~}}
-%       [~denote the natural and real numbers.]{}
-%     \end{Verbatim}
-%     expands to: ``\Ccool<Math>[Let~]i{\mathbb{#1}}{Nat = N, Real = R}*s{{~\rm{and}~}}[~denote the natural and real numbers.]{}''
-%     As a side effect, |$\Nat<Math>$|~encodes~``$\Nat<Math>$'' (and likewise for |\Real|).
-%     \pkgoptnad~being the default for \meta{name}, |<Math>| can be dropped. In conjunction with
-%     lamba expressions, this tool allows for encoding the way certain mathematical objects, such as functions, should be formatted.
-%     Optionally, the macros can be written to a file, and read, which
-%     can be useful for typesetting documents sharing the same notation. 
-%   \end{abstract}
+%   \selectlanguage{english}
+%   \begin{docabstract}{Abstract}
+%     The package \pkg{ccool} for \LaTeX~is a \textit{key-value} interface, \nameref{usage:cs:ccool},
+%     on top of \pkg{xparse}'s document command parser. Global options control input processing and its expansion.
+%     By default, they are set to meet likely requirements, depending on context: the selected language,
+%     and which of text and math mode is active. These options can be overriden inline.
+%     This versality could find its use, for example, to encode notational conventions (such as \docexpand{\cs{Real}}{}|\mathbb{R}|)
+%     at the point where they are introduced in the \env{document} (``Let $\mathbb{R}$ denote real numbers'').
+%     Polymorphic commands can be generated by parameterizing the keys
+%     (for instance, one parameter value for style, another for a property).
+%     User input to \cs{Ccool} can optionally be serialized.
+%     This can useful for typesetting documents sharing the same notation.
+%   \end{docabstract}
 %   
+%   \selectlanguage{french}
+%   \begin{docabstract}{Résumé}
+%     L'extension~\pkg{ccool} pour \LaTeX~met à disposition une interface de type \textit{clé-valeur}, \nameref{usage:cs:ccool},
+%     destinée à faciliter la géneration de commandes. Les 
+%     paramètres globaux contrôlant le traitement de ces \textit{clé-valeur} sont fixés
+%     par défaut pour répondre aux besoins courants, suivant le contexte (langage, mode textuel ou mathématique).
+%     Un exemple d'application, est la command-isation des conventions de notation (\docexpand{\cs{Reel}}{} |\mathbb{R}|),
+%     au point dans le \env{document} où elles sont introduites (``Soit~$\mathbb{R}$~les nombres réels.'').
+%     Des commandes polymorphes peuvent être générées, en associant aux clés un paramètre
+%     (par exemple, une valeur pour le style typographique, une autre pour la description du concept associé).
+%     En option, les instructions passées à cette interface peuvent être sauvegardées,
+%     ce qui peut être utile pour la rédaction de documents faisant appel à des conventions typographiques communes.
+%   \end{docabstract}
+%   \selectlanguage{english}
+%   
 %   \tableofcontents 
 %   
 %   \part{Usage}\label{part:usage}
-%   \VerbatimFootnotes
+%   ^^A   \VerbatimFootnotes
 %   
 %   \setcounter{section}{0}
 %   \label{usage:conv}
 %   \addcontentsline{toc}{section}{\protect\numberline{\thesection}Convention}
 %   \section*{Convention}
-%   \begin{enumerate}
-%   \item Loosely, those of \cite{interface3} and \cite{xparse}, for example as to the meaning of \meta{\docccepttl}. 
-%   \item If unspecified, the environment in which a macro must be declared is \docenvdoc.
+%   \begin{enumerate}[label={\emph{\alph*)}}]
+%   \item \label{conv:expl3} Loosely, those of \cite{interface3}, for example as to the meaning of \meta{\docccepttl}.
+%   \item \label{conv:xparse} Those of \cite{xparse}, for example \docparo{arg} is a \docccept{\docxparseo}. 
+%   \item \docassign{\meta{X}}{\docarg{Y}}:  set \meta{X} to |Y|
+%   \item \docexpand{\cs{X}}{\docarg{Y}}: \cs{X} expands to |Y|
+%   \item If unspecified, the environment in which a macro is to be used is \docenvdoc.
 %   \end{enumerate}
 %   
 %   \refstepcounter{section}
 %   \label{usage:load} 
 %   \addcontentsline{toc}{section}{\protect\numberline{\thesection}Loading the package}
-%   
 %   \begin{function}{\usepackage}
 %     \begin{syntax}
-%       \cs{usepackage}\doceval{\pkg{ccool}}
+%       \cs{usepackage}\docparm{\pkg{ccool}}
 %     \end{syntax}
 %     \begin{description}
 %     \item[Requirement]\docfillblank
 %       \begin{enumerate}
 %       \item \file{ccool.sty} is in the path of the \LaTeX~engine. See \autoref{part:other}, \autoref{other:support}.
-%       \item Declare it in the~\docccept{\doccceptpre}
+%       \item Put in the~\docccept{\doccceptpre}
 %       \end{enumerate}
 %     \end{description}  
 %   \end{function}
 %   
-%   \leavevmode
-%   \refstepcounter{section}
-%   \docsetnameref{\cs{Ccool}}
-%   \label{usage:cs:ccool}
-%   \addcontentsline{toc}{section}{\protect\numberline{\thesection}\cs{Ccool}}
-%   \setcounter{subsection}{0}
+%   \DocPhantomSection*{section}{\cs{Ccool}}{usage:cs:ccool}
 %   \begin{function}{\Ccool}
 %     \begin{syntax}
-%       \cs{Ccool}\docoptd{\meta{\pkgparna}}
-%       \docopto{\meta{\pkgparhe}}
-%       \docopte{i}{\meta{\pkgparin}}
-%       \Arg{\pkgparde}
-%       |+|
-%       |*|
-%       \docopte{s}{\pkgpars}
-%       \docopte{o}{\meta{\pkgparou}}
-%       \docopto{\meta{\pkgparta}}
+%       \cs{Ccool}\docparo{\meta{\pkgparhe}}\docpard{\meta{\pkgparpa}}\docpare{c}{\meta{\pkgparin}}\Arg{\pkgparkvl}\pkgparap\pkgparex\docpare{s}{\meta{\doccceptsep}}\docpare{c}{\meta{\pkgparou}}\docparo{\meta{\pkgparta}}
+%     \end{syntax}where \meta{\doccceptsep} is either of: \Arg{\pkgparsi}, \Arg{\pkgparsi}\Arg{\pkgparsii}, and \Arg{\pkgparsi}\Arg{\pkgparsii}\Arg{\pkgparsiii}.
+%     \begin{description}
+%     \item[Semantics] See \autoref{ccool:core}-\ref{ccool:wr}.
+%     \end{description}
+%   \end{function}
+%   
+%   \subsection{Core feature}
+%   \label{ccool:core} 
+%   \nameref{usage:cs:ccool}\Arg{\pkgparkvl} executes for each \meta{\pkgkey}|=|\meta{\pkgval},
+%   \begin{enumerate}[label=\emph{\arabic*)}]
+%   \item \docassign{\meta{\pkgval} }
+%     { \cs{function}\Arg{\pkgval} }\label{step:val}
+%   \item define \cs{\meta{\pkgkey}} such that \docexpand{ \cs{\meta{\pkgkey} } }{\meta{\pkgval}},
+%     \label{step:key}
+%   \end{enumerate}where \cs{function} is encoded in \docccept{\doccceptgopt}~\nameref{usage:opt:in}.
+%   For instance, the side effect of |\Ccool{ Real = \mathbb{R} }| is \docexpand{\cs{Real}}{\docarg{\textbackslash{}mathbb\{R\}}}.
+%   To be sparingly used, \docccept{\doccceptgopt}~\nameref{usage:opt:ex} controls the type of expansion of \meta{\pkgkey}~and \meta{\pkgval}.
+%   
+%   See \nameref{usage:cs:lambda} to allow command \cs{\meta{\pkgkey}} to take arguments.
+%   
+%   \subsection{Process the \texorpdfstring{\docccept{\pkgval}}'s}
+%   \label{ccool:in} 
+%   \nameref{usage:cs:ccool}\ \docpare{c}{\meta{\pkgparin}}\Arg{\pkgparkvl} is identical to the \nameref{ccool:core},
+%   except it overrides \nameref{usage:opt:in}.
+%   
+%   In our example, if multiple number systems are defined with \cs{Ccool} (natural, reals, \dots),
+%   it is more efficient to omit |\mathbb{.}| inside \meta{\pkgval}, and instead
+%   use |c{\mathbb{#1}}|, where |#1| means ``parameter to be replaced''.
+%   
+%   \subsection{Append to a hook}
+%   \label{ccool:ap} 
+%   \nameref{usage:cs:ccool}\Arg{\pkgparkvl}\pkgparap~is identical to the \nameref{ccool:core}, except it
+%   repeats after \nameref{usage:cs:hook}.
+%   This is useful to make the side effect persist after a \docccept{\doccceptgroup} (such as \env{theorem}).
+%   
+%   \subsection{Expand the \texorpdfstring{\docccept{\pkgval}}'s}
+%   \label{ccool:ex} 
+%   \nameref{usage:cs:ccool}\Arg{\pkgparkvl}\pkgparex~supplements the \nameref{ccool:core} with 
+%   the expansion of the \meta{\pkgval}'s using typesetting rules encoded in \docccept{\doccceptgopt}~\nameref{usage:opt:se} 
+%   and~\nameref{usage:opt:ou}. The first are \docccept{\doccceptsep} applied to the \meta{\pkgval}'s to form a \docccept{\docccepttl},
+%   and the second a function applied to the latter. 
+%   
+%   They can be overriden inline by appending further \docpare{s}{\meta{\doccceptsep}}~and~\docpare{c}{\meta{\pkgparou}}, respectively,
+%   to the list of arguments.
+%   
+%   \subsection{Head}
+%   \label{ccool:he}
+%   \nameref{usage:cs:ccool}\docparo{\meta{\pkgparhe}}\Arg{\pkgparkvl}~expands \meta{\pkgparhe} and executes the \nameref{ccool:core}.
+%   
+%   There may be situations where it is convenient to pass \meta{\pkgparhe}~as \doccceptempty.
+%   
+%   \subsection{Tail}
+%   \label{ccool:ta}
+%   \nameref{usage:cs:ccool}\Arg{\pkgparkvl}\docparo{\meta{\pkgparta}}\Arg{\pkgparkvlnxt}~is identical to
+%   \nameref{usage:cs:ccool}\Arg{\pkgparkvl} followed by \nameref{usage:cs:ccool}\docparo{\meta{\pkgparta}}\Arg{\pkgparkvlnxt}.
+%   
+%   The combination of \nameref{ccool:core}, \nameref{ccool:he}, and \nameref{ccool:ta} allows to integrate typesetting and
+%   the creation of commands.
+%   
+%   \subsection{Parameterize the \texorpdfstring{\docccept{\pkgkey}}'s}
+%   \label{ccool:pa}
+%   \nameref{usage:cs:ccool}\docpard{\meta{\pkgparpa}}\Arg{\pkgparkvl} is identical to the  \nameref{ccool:core},
+%   except \meta{\pkgkey} is replaced by \meta{\pkgkey\docpard{\pkgparpa}}.
+%   The default value of \meta{\pkgparpa} is encoded in \nameref{usage:opt:pa}.
+%   In our example, \meta{\pkgparpa} could be \docarg{Style}.
+%   
+%   \subsection{Write}
+%   \label{ccool:wr} 
+%   \docccept{\doccceptgopt}~\nameref{usage:opt:wr}~is identical to the  \nameref{ccool:core},
+%   except that if \nameref{usage:opt:wr} is set to \cs{BooleanTrue},
+%   the code is written to a file whose \doccceptpath~is encoded in \docccept{\doccceptgopt}~\nameref{usage:opt:fi}.
+%   
+%   \DocPhantomSection*{section}{\cs{CcoolClear}}{usage:cs:clear}
+%   \begin{function}{\CcoolClear}
+%     \begin{syntax}
+%       \cs{CcoolClear}\docpard{\meta{\pkgparpa}}\docparm{\dots\meta{\doccceptkey_i},\dots}
 %     \end{syntax}
 %     \begin{description}
-%     \item[Requirement] \meta{\pkgparde} is specified (all others optional).
+%     \item[Semantics] Clears all \cs{\meta{\pkgkey\docpard{\pkgparpa}}}'s
 %     \end{description}
 %   \end{function}
 %   
-%   \leavevmode
-%   \refstepcounter{subsection}
-%   \docsetnameref{\meta{\pkgparna}}
-%   \label{usage:par:na}
-%   \addcontentsline{toc}{subsection}{\protect\numberline{\thesubsection}\docoptd{\meta{\pkgparna}}}
-%   \DescribeOption{\meta{\pkgparna}}
-%   \begin{description}
-%   \item[Default] \nameref{usage:opt:na}
-%   \item[Example] \pkgoptnad, |ModelA|, |ModelB|
-%   \item[Semantics] Identifies a group of macros
-%   \end{description}
+%   \DocPhantomSection*{section}{\cs{CcoolHook}}{usage:cs:hook}
+%   \begin{function}{\CcoolHook}
+%     \begin{syntax}
+%       \cs{CcoolHook}
+%     \end{syntax}
+%     \begin{description}
+%     \item[Semantics] No side effect or expansion
+%     \end{description}
+%   \end{function}
 %   
-%   \leavevmode
-%   \refstepcounter{subsection}
-%   \docsetnameref{\meta{\pkgparhe}}
-%   \label{usage:par:he}
-%   \addcontentsline{toc}{subsection}{\protect\numberline{\thesubsection}\docopto{\meta{\pkgparhe}}}
-%   \DescribeOption{\meta{\pkgparhe}}
-%   \begin{description}
-%   \item[Example]|Let~|
-%   \item[Semantics] Expands~\meta{\pkgparhe}
-%   \end{description}
+%   \DocPhantomSection*{section}{\cs{CcoolLambda}}{usage:cs:lambda}
+%   \begin{function}{\CcoolLambda}
+%     \begin{syntax}
+%       \cs{CcoolLambda}\docparo{\meta{\doccceptargspec}}\Arg{\doccceptcode},
+%     \end{syntax} where \docccept{\doccceptargspec} is by default an \docccept{\docxparseo}.
+%     \begin{description}
+%     \item[Example] \cs{Ccool}|{ EvalAt = \CcoolLambda{(#1)} }|
+%     \item[Semantics] Returns a command of type  \cs{DeclareDocumentCommand}\cite{xparse},
+%     \end{description}
+%   \end{function}
 %   
-%   \leavevmode
-%   \refstepcounter{subsection}
-%   \docsetnameref{\meta{\pkgparin}}
-%   \label{usage:par:in}
-%   \phantomsection\addcontentsline{toc}{subsection}{\protect\numberline{\thesubsection}\docopte{i}{\meta{\pkgparin}}}
-%   \DescribeOption{\meta{\pkgparin}}
+%   \DocPhantomSection*{section}{\cs{CcoolOption}}{usage:cs:option}
+%   \begin{function}{\CcoolOption}
+%     \begin{syntax}
+%       \cs{CcoolOption}\docparo{\dots{}\docmetakeyorkeyval[i],\dots}
+%     \end{syntax}where \meta{\doccceptkey_i} is either of
+%     \nameref{usage:opt:an},
+%     \nameref{usage:opt:ex},
+%     \nameref{usage:opt:fi},
+%     \nameref{usage:opt:in},
+%     \nameref{usage:opt:pa},
+%     \nameref{usage:opt:ou},
+%     \nameref{usage:opt:se},
+%     and \nameref{usage:opt:wr}.
+%     \begin{description}
+%     \item[Semantics] Modify the behavior of \nameref{usage:cs:ccool}
+%     \end{description}
+%   \end{function}
 %   
+%   \DocPhantomSection*{subsection}{\pkgoptan}{usage:opt:an}
+%   \DescribeOption{\pkgoptan}
 %   \begin{description}
-%   \item[Default] \nameref{usage:opt:in}
-%   \item[Example] |\mathbb{#1}|
-%   \item[Semantics] \docfillblank
-%     \begin{enumerate}[label=\emph{\arabic*)}]
-%     \item \docassign{\meta{\pkgval} }
-%       { \meta{\pkgparin} applied to \meta{\pkgval} }\label{step:val}
-%     \end{enumerate}
+%   \item[Also see] \autoref{part:impl}~\nameref{impl:opt:an}
+%   \item[Semantics] Sets the translation of \textit{and} in language \meta{\doccceptkey} to \meta{\doccceptval}
+%   \item[Syntax] \meta{\doccceptkvl}
 %   \end{description}
 %   
-%   \leavevmode
-%   \refstepcounter{subsection}
-%   \docsetnameref{\meta{\pkgparde}}
-%   \label{usage:par:de}
-%   \phantomsection\addcontentsline{toc}{subsection}{\protect\numberline{\thesubsection}\Arg{\pkgparde}}
-%   \DescribeOption{\meta{\pkgparde}}
+%   \DocPhantomSection*{subsection}{\pkgoptex}{usage:opt:ex}
+%   \DescribeOption{\pkgoptex}
 %   \begin{description}
-%   \item[Example] |Elems={\omega_1, \dots, \omega_n}, Sample=\Omega|
-%   \item[Semantics]\docfillblank
-%     \begin{enumerate}[label=\emph{\arabic*)}]
-%       \setcounter{enumi}{1}
-%     \item \docassign{ \cs{\meta{\pkgkey}}\docoptd{\meta{\pkgparna}}}{\meta{val_i}} defined in \docstep{val},
-%       using \nameref{usage:opt:ex} for expansion. \label{step:key}
-%     \item If \nameref{usage:opt:wr}, writes the input used by \docstep{key} to \nameref{usage:opt:fi}\label{step:write}
-%     \end{enumerate}
+%   \item[Also see] \nameref{ccool:core} and \autoref{part:impl}~\nameref{impl:opt:ex}
+%   \item[Syntax] \texttt{eo\docpipe{}ee\docpipe{}ex\docpipe{}xo\docpipe{}xe\docpipe{}xx}
 %   \end{description}
 %   
-%   \leavevmode
-%   \refstepcounter{subsection}
-%   \docsetnameref{parameter \docarg{+}}
-%   \label{usage:par:appto}
-%   \phantomsection\addcontentsline{toc}{subsection}{\protect\numberline{\thesubsection}\docarg{+}}
-%   \DescribeOption{+}
+%   \DocPhantomSection{subsection}{\pkgoptfi}{usage:opt:fi}
+%   \DescribeOption{\pkgoptfi}
 %   \begin{description}
-%   \item[Semantics] Appends \docstep{key} and \docstep{write} to \nameref{usage:cs:hook}
-%   \footnote{Needed inside a \docccept{\doccceptgroup}, for the side effect of \cs{Ccool} to persist thereafter.}
+%   \item[Also see] \autoref{part:usage}~\nameref{ccool:wr} and \autoref{part:impl}~\nameref{impl:opt:fi}
+%   \item[Syntax] \meta{\doccceptpath}
 %   \end{description}
 %   
-%   \leavevmode
-%   \refstepcounter{subsection}
-%   \docsetnameref{parameter \docarg{*}}
-%   \label{usage:par:expand}
-%   \phantomsection\addcontentsline{toc}{subsection}{\protect\numberline{\thesubsection}\docarg{*}}
-%   \DescribeOption{*}
-%   
+%   \DocPhantomSection*{subsection}{\pkgoptin}{usage:opt:in}
+%   \DescribeOption{\pkgoptin}
 %   \begin{description}
-%   \item[Semantics]\docfillblank
-%     \begin{enumerate}
-%       \setcounter{enumi}{3}
-%     \item Expands~\nameref{usage:par:ou} applied to the list created in \docstep{val},
-%       using the separator specified by \nameref{usage:par:si}, \nameref{usage:par:sii}, \nameref{usage:par:siii}.
-%     \end{enumerate}
+%   \item[Also see] \nameref{ccool:in} and \autoref{part:impl}~\nameref{impl:opt:in}
+%   \item[Syntax] \meta{\doccceptcode}, with |####1| as the \docccept{\doccceptplaceh}
 %   \end{description}
 %   
-%   \leavevmode
-%   \refstepcounter{subsection}
-%   \docsetnameref{separators' parameter}
-%   \label{usage:par:s}
-%   \phantomsection\addcontentsline{toc}{subsection}{\protect\numberline{\thesubsection}\docopte{s}{\pkgpars}}
-%   
-%   \leavevmode
-%   \refstepcounter{subsubsection}
-%   \docsetnameref{\meta{\pkgparsi}}
-%   \label{usage:par:si}
-%   \DescribeOption{\meta{\pkgparsi}}
+%   \DocPhantomSection*{subsection}{\pkgoptpa}{usage:opt:pa}
+%   \DescribeOption{\pkgoptpa}
 %   \begin{description}
-%   \item[Default] \nameref{usage:opt:se}
-%   \item[Example] |{~\in~}|
+%   \item[Also see] \nameref{ccool:pa}, and \autoref{part:impl}~\nameref{impl:opt:pa}
+%   \item[Syntax] \meta{\docccepttl}
 %   \end{description}
 %   
-%   \leavevmode
-%   \refstepcounter{subsubsection}
-%   \docsetnameref{\meta{\pkgparsii}}
-%   \label{usage:par:sii}
-%   \DescribeOption{\meta{\pkgparsii}}
+%   \DocPhantomSection*{subsection}{\pkgoptou}{usage:opt:ou}
+%   \DescribeOption{\pkgoptou}
 %   \begin{description}
-%   \item[Default] \nameref{usage:opt:se}
-%   \item[Example] |{,~}|
+%   \item[Also see] \nameref{ccool:ex}, and \autoref{part:impl}~\nameref{impl:opt:ou}
+%   \item[Default] |\ensuremath{####1}|
+%   \item[Syntax] \meta{\doccceptcode}, with |####1| as the \docccept{\doccceptplaceh}
 %   \end{description}
 %   
-%   \leavevmode
-%   \refstepcounter{subsubsection}
-%   \docsetnameref{\meta{\pkgparsiii}}
-%   \label{usage:par:siii}
-%   \DescribeOption{\meta{\pkgparsiii}}
+%   \DocPhantomSection*{subsection}{\pkgoptse}{usage:opt:se}
+%   \DescribeOption{\pkgoptse}
 %   \begin{description}
-%   \item[Default] \nameref{usage:opt:se}
-%   \item[Example] |{~\&~}|
+%   \item[Also see] \nameref{ccool:ex}; \doclist{lang}; and \autoref{part:impl}~\nameref{impl:opt:se}
+%   \item[Other] Default behavior depends on whether \pkg{babel} and \pkg{amsmath} are loaded
+%   \item[Syntax] That of \docccept{\doccceptsep} in \cite[Section 8 of \pkg{l3seq}]{interface3}
 %   \end{description}
 %   
-%   \leavevmode
-%   \refstepcounter{subsection}
-%   \docsetnameref{\meta{\pkgparou}}
-%   \label{usage:par:ou}
-%   \phantomsection\addcontentsline{toc}{subsection}{\protect\numberline{\thesubsection}\docopte{o}{\meta{\pkgparou}}}
-%   \DescribeOption{\meta{\pkgparou}}
+%   \DocPhantomSection*{subsection}{\pkgoptwr}{usage:opt:wr}
+%   \DescribeOption{\pkgoptwr}
 %   \begin{description}
-%   \item[Default] \nameref{usage:opt:ou}
-%   \item[Example] |$\left\{#1\right\}$| 
+%   \item[Also see] \autoref{part:usage}~\nameref{ccool:wr} and \autoref{part:impl}~\nameref{impl:opt:wr}
+%   \item[Syntax] \cs{BooleanFalse}\docpipe\cs{BooleanTrue}
 %   \end{description}
 %   
-%   \leavevmode
-%   \refstepcounter{subsection}
-%   \docsetnameref{\meta{\pkgparta}}
-%   \label{usage:par:ta}
-%   \phantomsection\addcontentsline{toc}{subsection}{\protect\numberline{\thesubsection}\docopto{\meta{\pkgparta}}}
-%   \DescribeOption{\meta{\pkgparta}}
-%   \begin{description}
-%   \item[Semantics]
-%     \nameref{usage:cs:ccool}\docoptd{\meta{\pkgparna}}\docopto{\meta{\pkgparta}}
-%   \end{description}
+%   \DocPhantomSection*{section}{\cs{CcoolRead}}{usage:cs:read}
+%   \begin{function}{\CcoolRead}
+%     \begin{syntax}
+%       \cs{CcoolRead}\docparo{\meta{\doccceptpath}}
+%     \end{syntax}
+%     \begin{description}
+%     \item[Also see] \autoref{part:impl}~\nameref{impl:cs:read}
+%     \item[Semantics]\docfillblank
+%       \begin{enumerate}
+%       \item Reads the definitions in \meta{\doccceptpath}.
+%       \item Writes to \file{ccool.log}: `read from \meta{\doccceptpath}'
+%       \end{enumerate}
+%     \end{description}  
+%   \end{function}
 %   
-%   \leavevmode
-%   \refstepcounter{section}
-%   \docsetnameref{Other}
-%   \label{usage:other}
-%   \addcontentsline{toc}{section}{\protect\numberline{\thesection}Other}
-%   \section*{Other}
-%   Continued in \autoref{part:impl}, \autoref{impl:frontend}.
+%   \DocPhantomSection*{section}{\cs{CcoolVers}}{usage:cs:vers}
+%   \begin{function}{\CcoolVers}
+%     \begin{syntax}
+%       \cs{CcoolVers}
+%     \end{syntax}
+%     \begin{description}
+%     \item[Semantics] \docexpand{}{the package's version}
+%     \end{description}  
+%   \end{function}
 %   
-%   \leavevmode
-%   \refstepcounter{section}
-%   \docsetnameref{Do's and dont's}
+%   \section{Do's and dont's}
 %   \label{usage:dosdont}
-%   \addcontentsline{toc}{section}{\protect\numberline{\thesection}Do's and dont's}
-%   \section*{Do's and dont's}
 %   
-%   \begin{enumerate}
+%   \begin{enumerate}[label=\emph{\arabic*)}]
 %   \item \docfillblank
 %     \begin{itemize}
-%     \item[\docissuedont] |\Ccool{ A = a, B = b }[Hello, world!]|.
-%     \item[\docissuedo] |\Ccool{ A = a, B = b }[Hello, world!]{}|, or \\|\Ccool{ A = a, B = b } Hello, world!|
+%     \item[\docissuedont] |Inner=\{####1\}|
+%     \item[\docissuesymp] \cs{CcoolRead} fails
+%     \item[\docissuedo] |Inner={\char`{####1\char`}}|
 %     \end{itemize}
 %   \item \docfillblank
 %     \begin{itemize}
-%     \item[\docissuedont] |$|\cs{\meta{\pkgkey}}|<x$|.
+%     \item[\docissuedont] |$|\meta{\pkgkey}|<x$|.
 %     \item[\docissuedo] |$|\cs{\meta{\pkgkey}}|{<}x$|
 %     \end{itemize}
 %   \item\docfillblank
@@ -425,14 +549,24 @@
 %     \end{itemize}
 %   \item \docfillblank
 %     \begin{itemize}
-%     \item[\docissuedont] |\Ccool{ F = \cal F }|.
-%     \item[\docissuedo] | \Ccool{ F = \cal{F} } | or | \Ccool{ F = \mathcal{F} } |
+%     \item[\docissuedont] |\cal F|.
+%     \item[\docissuedo] |\cal{F}| or |\mathcal{F}|
 %     \end{itemize}
 %   \item \docfillblank
 %     \begin{itemize}
-%     \item[\docissuedont] |[x_0,x]|
+%     \item[\docissuedont] |\[x_0,x\]|
 %     \item[\docissuedo] |\left[x_0,x\right]|
 %     \end{itemize}
+%   \item \docfillblank
+%     \begin{itemize}
+%     \item[\docissuedont] Use \docccept{\docxparsed[]} or \docccept{\docxparsee[]}~arguments\cite{xparse} for \nameref{usage:cs:lambda}
+%     \item[\docissuedo] Use only \docccept{\docxparsem[]} and \docccept{\docxparseo[]}~arguments
+%     \end{itemize}
+%   \item \docfillblank
+%     \begin{itemize}
+%     \item[\docissuedont] |\usepackage[spanish]{babel}|
+%     \item[\docissuedo] |\usepackage[spanish.noquoting]{babel}|\cite{a-547018}
+%     \end{itemize}
 %   \item Also see \autoref{part:other}, \autoref{other:issue}
 %   \end{enumerate}
 %   
@@ -452,348 +586,1033 @@
 %   outer arc=0pt,
 %   boxrule=1pt,
 %   listing and text,
-%   #2
-% }
+%   #2}
 %   
-%   \phantomsection\addcontentsline{toc}{section}{\doclist{vers}. Version.}
-%   \begin{listing}[]
-%     {label=listing:vers}
-%     \CcoolVers
-%   \end{listing}
-%   
-%   \phantomsection\addcontentsline{toc}{section}{\doclist{pre}. Preamble.}
-%   \begin{listing}[Preamble\footnote{These are the settings to replicate the listings.
-%     For exhaustivity, check the \env{documentation} section of \pkg{ccool}\texttt{.dtx}.}]
-%     {label=listing:pre, listing only}
-%     \usepackage{amsmath, amsthm, commath}
-%     \usepackage[T1]{fontenc}% \char`[
-%   \end{listing}
-%   
-%   \phantomsection\addcontentsline{toc}{section}{\doclist{test:i}. Separators.}
-%   \begin{listing}[Separators]
-%     {label=listing:test:i}
-%     \CcoolOption{
-%     ^^A% spaces betw. inner and outer brackets matter!->
-%     Separ={{\ \char`@\ }{\ \%\ }{\ \char`@\ }}}
-%     \Ccool<Test>{ X = x, Y = y }*[\\]
-%     { X = x, Y = y, Z = z }*[\\]
-%     { X = x, Y = y }*s{{\ \&\ }}[\\]
-%     { X = x, Y = y }*s{{\ \&\ }{,\ }}[\\]
-%     { X = x, Y = y, Z = z }*s{{\ \&\ }}[\\]
-%     { X = x, Y = y, Z = z }*s{{\ \&\ }{,\ }}[\\]
-%     { X = x, Y = y, Z = z }*s{{\ \&\ }{,\ }{\ \&\ }}\\
-%   \end{listing}
-%   
-%   \phantomsection\addcontentsline{toc}{section}{\doclist{test:ii}. Hello, world!}
-%   \begin{listing}[Hello, world!\footnote{If this looks arcane, it's for the purpose of testing.}]
-%     {label=listing:test:ii}
-%     \CcoolOption{ Separ = {{}{.}{.}}, Outer = { ####1 } }
-%     \CcoolOption{ Write = \BooleanTrue }
-%     \Ccool<Test>
-%     { KeyA = {.}, KeyB = {!}, KeyC = {\%} }[]
-%     { KeyD = {d}, KeyE = {\%} }[]i{\{#1\}}
-%     { KeyF = {H}, KeyG = {e}, KeyH = {l} }*[]
-%     { KeyI = {\%}, KeyJ = {\%}, KeyK = {\%} }[.\{l\}.\{o\}] 
-%     { KeyL = {l}, KeyM = {\char`[}, KeyN = {\char`]} }[] 
-%     { KeyO = {o}, KeyP = {\%}, KeyQ = {\%} }[{,\ }]
-%     { KeyR = {w}, KeyS = {o}, KeyT = {r} }*s{{}{}{}}o{{\char`[}#1}[] 
-%     { KeyU = {\%}, KeyV = {\%}, KeyW = {\%} }[] 
-%     { KeyX = {\%}, KeyY = {\%}, KeyZ = {\KeyB<Test>} }\nobreak
-%     \KeyL<Test>\KeyD<Test>\KeyZ<Test>\KeyN<Test>\\
-%     \CcoolOption{ Write = \BooleanFalse }
-%   \end{listing}
-%   
-%   \phantomsection\addcontentsline{toc}{section}{\doclist{test:iii}. \doclist{test:ii} read from file.}
-%   \begin{listing}[\doclist{test:ii} read from file.]
-%     {label=listing:test:iii}
-%     \CcoolRead
-%     \KeyF<Test>\KeyA<Test>\nobreak
-%     \KeyG<Test>\KeyA<Test>\nobreak
-%     \KeyH<Test>\KeyA<Test>\nobreak
-%     \KeyH<Test>\KeyA<Test>\nobreak
-%     {\{}\nobreak\KeyO<Test>{\}},{\ }\nobreak
-%     \KeyM<Test>\KeyR<Test>\nobreak
-%     \KeyO<Test>\nobreak
-%     \KeyT<Test>\nobreak
-%     \KeyL<Test>\nobreak
-%     \KeyD<Test>\nobreak
-%     \KeyZ<Test>\nobreak
-%     \KeyN<Test>\nobreak
-%   \end{listing}
-%   
-%   \phantomsection\addcontentsline{toc}{section}{\doclist{proba:i}. Probability space.}
-%   \begin{listing}[Probability space]
-%     {label=listing:proba:i}
-%     \CcoolOption{ Write = \BooleanTrue }
-%     \Ccool[Let~]
-%     { Space = \Omega, Field = \mathcal{F}, Meas = \mathcal{P} }
-%     *s{{,}}o{$\{#1\}$}
-%     [~denote the probability space, where~]{ PowerSet = { 2^{\Space} } }
-%     [$\Field\subset \PowerSet$.]
-%     {}
-%     \CcoolOption{ Write = \BooleanFalse }
-%   \end{listing}
-%   
-%   \phantomsection\addcontentsline{toc}{section}{\doclist{proba:ii}. \doclist{proba:i} read from file.}
-%   \begin{listing}[\doclist{proba:i} read from file.]
-%     {label=listing:proba:ii}
-%     \CcoolRead \tab $\Omega$ $\Field$ $\Meas$
-%   \end{listing}
-%   
-%   \phantomsection\addcontentsline{toc}{section}{\doclist{mvt:i}. Mittelwertsatz f\"ur $n$ Variable.}
-%   \begin{listing}[{Mittelwertsatz f\"ur $n$ Variable\cite[17.3]{tcolbox}}]
-%     {label=listing:mvt:i}
-%     \CcoolOption{ Write = \BooleanTrue }
-%     \newtheorem{theorem}{Theorem}
-%     \AfterEndEnvironment{theorem}{\CcoolHook}
-%     \Ccool i{\mathbb{#1}}
-%     { N = { N } , R = { R } }+[]
-%     { Grad = { \operatorname{grad} } }+
-%     [\begin{theorem}
-%       [Mittelwertsatz f\"ur $n$ Variable]Es~sei~]
-%       { OffMenge = {D}, Ci = {C^{1}}, Strecke = { \left[x_0,x\right] } }+
-%       [$n\in\N$,~$\OffMenge\subseteq\N^n$ eine offene Menge und $f\in\Ci(\OffMenge,\R)$.
-%       Dann gibt es auf jeder Strecke $\Strecke\subset\OffMenge$ einen Punkt $\xi\in\Strecke$,~]
-%       { Steig = { \frac{ f(x)-f(x_0) }{ x-x_0 } }, Punkt = { \xi } }+
-%       [so dass gilt
-%       \begin{equation*}
-%         \Steig = \Grad f(\Punkt)^{\top}
-%       \end{equation*}
-%     \end{theorem}]
-%     {}
-%     (Check: $\N$, $\Punkt$)
-%     \CcoolOption{ Write = \BooleanFalse }
-%   \end{listing}
-%   
-%   \phantomsection\addcontentsline{toc}{section}{\doclist{mvt:ii}. \doclist{mvt:i} read from file.}
-%   \begin{listing}[\doclist{mvt:i} read from file.]
-%     {label=listing:mvt:ii}
-%     \CcoolRead \tab $\N$ $\R$ $\OffMenge$ $\Ci$ $\Strecke$ 
-%   \end{listing}
-%   
-%   \phantomsection\addcontentsline{toc}{section}{\doclist{lambda:i}. Lambda expression.}
-%   \begin{listing}[Lambda expression.]
-%     {label=listing:lambda:i}
-%     \CcoolOption{ Write = \BooleanTrue }
-%     \Ccool{ EvalAt = \CcoolLambda{(#1)}, ApplyOp = \CcoolLambda[2]{#1[#2]} }
-%     [Supposons une fonction $f\EvalAt{t}$, et \'etudions le probl\`eme o\`u la fonctionnelle $\ApplyOp{S}{f}$ est donn\'ee par\dots]{}
-%     \CcoolOption{ Write = \BooleanFalse }
-%   \end{listing}
-%   
-%   \phantomsection\addcontentsline{toc}{section}{\doclist{lambda:ii}. \doclist{lambda:i} read from file.}
-%   \begin{listing}[\doclist{lambda:i} read from file.]
-%     {label=listing:lambda:ii}
-%     \CcoolRead \tab $f\EvalAt{t}$, $\ApplyOp{S}{f}$
-%   \end{listing}
-%   
-%   \phantomsection\addcontentsline{toc}{section}{\doclist{cusum:i}. CUSUM statistic.}
-%   \begin{listing}[CUSUM statistic\cite{ccool-thesis}]
-%     {label=listing:cusum:i}
-%     \newtheorem{definition}{Definition}
-%     \AfterEndEnvironment{definition}{\CcoolHook}
-%     
-%     \CcoolOption{ Write = \BooleanTrue }
-%     \Ccool{ SuchThat = { ;~ }, Time = { t }, Process = { \xi }, StopT = { T }, EvalAt = \CcoolLambda{(#1)}  }
-%     [The CUSUM statistic process and the corresponding one-sided CUSUM stopping time are defined as follows:
-%     \begin{definition}\label{the CUSUM statistic}. Let~]
-%       { Scale = { \lambda }, Real = {\mathcal{R}} }+*s{{~\in~}}[~and~]
-%       { CUSUMthresh = { \nu } }+*o{$#1\in\Real^{+}$.}
-%       [~Define the following processes:]
-%       { LogWald = { u },  CUSUMst = { \StopT_{c} }, CUSUM = { y }, LogWaldInf = { m } }+
-%       [\begin{enumerate}
-%       \item{$\LogWald_{\Time}\EvalAt{ \Scale } = \Scale\Process_{\Time} - \frac{1}{2}\Scale^2\Time$;
-%         $\LogWaldInf_{\Time}\EvalAt{ \Scale } = \inf_{ 0\le s \le \Time }\CUSUM_{s} \EvalAt{ \Scale }$.}
-%       \item{$\CUSUM_{\Time}\EvalAt{ \Scale } = \LogWaldInf_{\Time}\EvalAt{ \Scale } - \LogWald_{\Time}\EvalAt{ \Scale }\ge0$, which is the CUSUM statistic process.}
-%       \item{$\CUSUMst \EvalAt{ \Scale, \LogWaldInf } = \inf\left[ \Time \ge 0 \SuchThat \CUSUM_{\Time}\EvalAt{\Scale} \ge \LogWaldInf \right]$, which is the CUSUM stopping time.} \end{enumerate}\end{definition}\par]{}
-%     
-%     (Check: $\Scale$, $\CUSUM$)
-%     \CcoolOption{ Write = \BooleanFalse }
-%   \end{listing}
-%   
-%   \phantomsection\addcontentsline{toc}{section}{\doclist{cusum:ii}. \doclist{cusum:i} read from file.}
-%   \begin{listing}[\doclist{cusum:i} read from file.]
-%     {label=listing:cusum:ii}
-%     \CcoolRead \tab $\Time $ $\Process$ $\Scale$ $\Real$ $\CUSUMthresh$ $\LogWald$  $\CUSUMst$ $\CUSUM$ $\LogWaldInf$ 
-%   \end{listing}
-%   
-%   \clearpage
-%   \part{Other}\label{part:other}
-%   
-%   \section{Acknowledgment}\label{other:acknowl} 
-%   
-%   This work has benefited from Q\&A's from the \LaTeX community\cite{user-erw}.
-%   Specific attributions are made throughout this document.
-%   
-%   \section{Install}\label{other:install}
-%   
-%   Compiling \file{ccool.dtx}\footnote{Under Unix, |$tex ccool.dtx|} will generate \file{ccool.sty} and \file{ccool.pdf}
-%   
-%   \section{Issue}\label{other:issue}
-%   
+%   \docnb
 %   \begin{enumerate}
-%   \item
-%     \begin{description}
-%     \item[\docissuedont] |Inner={\{####1\}}|
-%     \item[\docissuesymp] \cs{CcoolRead} fails
-%     \item[\docissuedo] |Inner={\char`{####1\char`}}|
-%     \end{description}
+%   \item Some statements  affect only the output of listings that come after that in which they appear.
+%     The demarcation is indicated by |%^^||A--->| and |%^^||A<---|, where applicable
 %   \end{enumerate}
-%   
-%   \section{Support}\label{other:support}
-%   
-%   This package is available from \url{https://www.ctan.org/pkg/ccool} and \url{https://github.com/rogard/ccool}.
-%   
-%   \section{Testing}\label{other:testing}
-%   
-%   \subsection{Technicality}
-%   Not possible to compile-check the expansion of a certain class of macros against predefined values\cite{a-534100}. 
-%   Instead, one can visually check \autoref{part:listing}, as generated in \autoref{other:install} on one's own machine,
-%   against that \href{https://github.com/rogard/ccool}{of the repository} for the same version.
-%   
-%   
-%   \subsection{Platform}
-%   \begin{enumerate}[label=\emph{\roman*)}]
-%   \item 
-%     ^^A uname -a
-%     \begin{Verbatim}[breaklines=true]
-%       Linux laptop 4.15.0-20-generic #21-Ubuntu SMP Tue Apr 24 06:16:15 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
-%     \end{Verbatim}
-%     \label{plat:lin}
-%   \end{enumerate}
-%   
-%   \subsection{Engine}
-%   \begin{enumerate}[label=\emph{\alph*})]
-%   \item 
-%     \begin{Verbatim}[breaklines=true]
-%       pdfTeX 3.14159265-2.6-1.40.20 (TeX Live 2019)
-%     \end{Verbatim}
-%     \label{eng:tlxviiii:pdf}
-%   \item 
-%     \begin{Verbatim}[breaklines=true]
-%       pdfTeX 3.14159265-2.6-1.40.21 (TeX Live 2020)
-%     \end{Verbatim}
-%     \label{eng:tlxx:pdf}
-%   \item
-%     \begin{Verbatim}[breaklines=true]
-%       LuaHBTeX, Version 1.12.0 (TeX Live 2020)
-%     \end{Verbatim}
-%     \label{eng:tlxx:lua}
-%   \item
-%     \begin{Verbatim}[breaklines=true]
-%       XeTeX 3.14159265-2.6-0.999992 (TeX Live 2020)
-%     \end{Verbatim}
-%     \label{eng:tlxx:xe}
-%   \end{enumerate}
-%   
-%   \subsection{Results}
-%   
-%   \begin{enumerate}
-%   \item \pkg{ccool} \docvers{1}{8} satisfactory on platform \ref{plat:lin} and engine \ref{eng:tlxviiii:pdf}
-%   \item \pkg{ccool} \docvers{1}{8} satisfactory on platform \ref{plat:lin} and engine \ref{eng:tlxx:pdf}
-%   \item \pkg{ccool} \docvers{1}{9} satisfactory on platform \ref{plat:lin} and engines \ref{eng:tlxx:pdf} and \ref{eng:tlxx:lua}
-%   \item \pkg{ccool} \docvers{2}{0} satisfactory on platform \ref{plat:lin} and engines \ref{eng:tlxx:pdf},  \ref{eng:tlxx:lua}, and \ref{eng:tlxx:xe}
-%   \end{enumerate}
-%   
-%   \subsection{Other}
-%   Check \cite{ccool-thesis} for testing \pkg{ccool} with \cls{llncs}
-%   
-%   \leavevmode
-%   \refstepcounter{section}
-%   \docsetnameref{References}
-%   \label{other:bib}
-%   \phantomsection\addcontentsline{toc}{section}{References}
-%   \begin{thebibliography}{1}
-%   \bibitem{cool} Nick Setzer {\em The \pkg{cool} package}, 2005, \url{https://www.ctan.org/pkg/cool}
-%   \bibitem{interface3} The \LaTeX3 Project Team {\em The \LaTeX3 interfaces}, 2019,
-%     \url{http://ftp.math.purdue.edu/mirrors/ctan.org/macros/latex/contrib/l3kernel/interface3.pdf}
-%   \bibitem{tcolbox} Thomas F. Sturm {\em The \pkg{tcolorbox} package}, 2019,
-%     \url{http://www.texdoc.net/texmf-dist/doc/latex/tcolorbox/tcolorbox.pdf}
-%   \bibitem{xparse} The \LaTeX3 Project Team {\em The \pkg{xparse} package}, 2020,
-%     \url{http://ftp.math.purdue.edu/mirrors/ctan.org/macros/latex/contrib/l3packages/xparse.pdf}
-%   \bibitem{ccool-thesis} Erwann Rogard and Olympia Hadjiliadis {\em Typesetting a math thesis with \pkg{ccool}}, 2020,
-%     \url{https://github.com/rogard/ccool/blob/master/thesis.pdf}
-%   \bibitem{user-erw} \url{https://tex.stackexchange.com/users/112708/erwann?tab=questions}
-%   \bibitem{a-188053} \href{https://tex.stackexchange.com/users/17423/sean-allred}{@{}sean-allred}'s answer to
-%     ``How to create lambda expressions?'', \url{https://tex.stackexchange.com/a/188053/112708}
-%   \bibitem{a-534100} \href{https://tex.stackexchange.com/users/73/joseph-wright}{@{}joseph-wright}'s answer to
-%     ``Checking a function's expansion against a string'', \url{https://tex.stackexchange.com/a/534100}
-%   \bibitem{a-536597} \href{https://tex.stackexchange.com/users/73317/frougon}{@{}frougon}'s answer to ``Journaling calls to a function \textdel{taking inline code as argument}'', \url{https://tex.stackexchange.com/a/536620}
-%   \end{thebibliography}
-%   
-%   \changes{\docvers{1}{0}}{2020/03/08}{Initial version}
-%   \changes{\docvers{1}{1}}{2020/04/04}{Revamped: much of the implementation}
-%   \changes{\docvers{1}{1}}{2020/04/04}{Replaced: \Arg{kvl_{2}}~by~\docoptd{kvl_{2}}~given that option type \texttt{G} not recommended\cite{xparse}}
-%   \changes{\docvers{1}{1}}{2020/04/04}{Replaced: \cs{OopsOptions}~by~\cs{OopsOption}}
-%   \changes{\docvers{1}{1}}{2020/04/04}{Replaced: \docarg{GenericObject}~by~\docarg{Name}}
-%   \changes{\docvers{1}{1}}{2020/04/04}{Replaced: \docarg{Separators}~by~\docarg{Separ}}
-%   \changes{\docvers{1}{1}}{2020/04/04}{Added:\cs{OopsTest}}
-%   \changes{\docvers{1}{1}}{2020/04/04}{Added:\cs{OopsRestore}}
-%   \changes{\docvers{1}{1}}{2020/04/04}{Added: \docarg{Save}}
-%   \changes{\docvers{1}{1}}{2020/04/04}{Deleted: Listing 1-5 from \docvers{1}{0}}
-%   \changes{\docvers{1}{1}}{2020/04/04}{Added: Listing~1., 2., 3., 4., 6., and 9.}
-%   \changes{\docvers{1}{1}}{2020/04/04}{Fixed: apparent anomaly in \docvers{1}{0}'s Listing~4, see \doclist{test:i}}
-%   \changes{\docvers{1}{2}}{2020/04/06}{Added: optional |*| to \cs{OopsNew} as instruction to expand \pkgparde}
-%   \changes{\docvers{1}{2}}{2020/04/06}{Replaced: \cs{OopsClear}\Arg{\pkgparna} by \cs{OopsClear}\docopto{\meta{\doccceptkvl}}}
-%   \changes{\docvers{1}{2}}{2020/04/06}{Deleted: \meta{kvl_{2}}~and~\meta{code_{2}}}
-%   \changes{\docvers{1}{2}}{2020/04/06}{Deleted: \cs{OopsTest}}
-%   \changes{\docvers{1}{2}}{2020/04/06}{Deleted: Listing~2-3 from \docvers{1}{1}.}
-%   \changes{\docvers{1}{2}}{2020/04/06}{Replaced: \cs{Save} by \cs{Write}}
-%   \changes{\docvers{1}{2}}{2020/04/06}{Replaced: \cs{Restore} by \cs{Read}}
-%   \changes{\docvers{1}{3}}{2020/04/06}{Replaced: \cs{OopsNew} by \cs{Oops}}
-%   \changes{\docvers{1}{3}}{2020/04/06}{Replaced: \Arg{\pkgparna} and \docopto{\meta{\pkgparna}} by \docoptd{\meta{\pkgparna}} }
-%   \changes{\docvers{1}{4}}{2020/04/10}{Replaced: \docopte{s}{\Arg{\pkgparsi}\Arg{\pkgparsii}\Arg{\pkgparsiii}}
-%   by \docopte{s}{\Arg{\pkgparsi}\docpipe\Arg{\pkgparsi}\Arg{\pkgparsii}\docpipe\Arg{\pkgparsi}\Arg{\pkgparsii}\Arg{\pkgparsiii}}}
-%   \changes{\docvers{1}{4}}{2020/04/10}{Added:optional |+| to \cs{OopsNew} to make side effects presist beyond local group}
-%   \changes{\docvers{1}{4}}{2020/04/10}{Added: \cs{OopsHook}}
-%   \changes{\docvers{1}{4}}{2020/04/10}{Deleted: Listing~1., and 2. }
-%   \changes{\docvers{1}{4}}{2020/04/10}{Added: Listing~1., 2., and 3. }
-%   \changes{\docvers{1}{4}}{2020/04/10}{Added: \docarg{Expans} (for debugging' sake, but...) }
-%   \changes{\docvers{1}{4}}{2020/04/10}{Added: \autoref{usage:dosdont} }
-%   \changes{\docvers{1}{4}}{2020/04/10}{Added: \cs{OopsDebug} }
-%   \changes{\docvers{1}{5}}{2020/04/10}{Deleted: dependence on \pkg{datetime} }
-%   \changes{\docvers{1}{5}}{2020/04/10}{Added: \pkgoptfi }
-%   \changes{\docvers{1}{6}}{2020/04/10}{Renamed: \pkg{oops} to \pkg{ccool} (better describes the purpose) }
-%   \changes{\docvers{1}{6}}{2020/04/10}{Renamed: \cs{Oops} to \cs{Ccool}}
-%   \changes{\docvers{1}{6}}{2020/04/10}{Renamed: \cs{OopsClear} to \cs{CcoolClear}}
-%   \changes{\docvers{1}{6}}{2020/04/10}{Renamed: \cs{OopsDebug} to \cs{CcoolDebug}}
-%   \changes{\docvers{1}{6}}{2020/04/10}{Renamed: \cs{OopsHook} to \cs{CcoolHook}}
-%   \changes{\docvers{1}{6}}{2020/04/10}{Renamed: \cs{OopsOption} to \cs{CcoolOption}}
-%   \changes{\docvers{1}{6}}{2020/04/10}{Renamed: \cs{OopsRead} to \cs{CcoolRead}}
-%   \changes{\docvers{1}{6}}{2020/04/10}{Added: \doclist{pre} (preamble) }
-%   \changes{\docvers{1}{7}}{2020/04/11}{Added: \doclist{cusum:i} (CUSUM) }
-%   \changes{\docvers{1}{7}}{2020/04/11}{Added: Legends to listings }
-%   \changes{\docvers{1}{7}}{2020/04/11}{Deleted: \cs{CcoolDebug} }
-%   \changes{\docvers{1}{7}}{2020/04/11}{Deleted: Listing~5 from \docvers{1}{6} }
-%   \changes{\docvers{1}{8}}{2020/04/12}{Added: \cs{CcoolLambda} }
-%   \changes{\docvers{1}{8}}{2020/04/12}{Added: \doclist{lambda:i}, \doclist{lambda:ii} }
-%   \changes{\docvers{1}{8}}{2020/04/12}{Added: \cs{CcoolVers} }
-%   \changes{\docvers{1}{8}}{2020/04/12}{Added: \doclist{vers} }
-%   \changes{\docvers{1}{9}}{2020/04/14}{Added: support for \LuaTeX }
-%   \changes{\docvers{1}{9}}{2020/04/14}{Moved: from \autoref{part:usage} to \autoref{part:impl}, what is now that part's \autoref{impl:frontend}}
-%   \changes{\docvers{2}{0}}{2020/04/15}{Deleted: \pkgoptfi's dependency on \pkg{texosquery} and \cs{pdfcreationdate}}
-%   \changes{\docvers{2}{0}}{2020/04/15}{Added: support for \XeTeX}
-%   \changes{\docvers{2}{0}}{2020/04/15}{Updated: \cs{RequirePackage}, \cs{NeedsTeXFormat}'s second argument / TeX Live 2020}
-%   
-%   \PrintChanges
-%   \PrintIndex
-%   \clearpage
-%   \StopEventually{
-%   ^^A   \PrintChanges
-%   ^^A   \PrintIndex
+%   \phantomsection\addcontentsline{toc}{section}
+%   {\ref{listing:vers}.\cs{CcoolVers}}
+%   \iffalse
+%<*guardlisting>   
+%   \fi
+\begin{listing}[\cs{CcoolVers}]
+  {label=listing:vers}
+  \CcoolVers
+\end{listing}
+% \iffalse
+%</guardlisting> 
+% \fi
+% 
+% \phantomsection\addcontentsline{toc}{section}
+% {\ref{listing:numbrsys:base}. \texorpdfstring{Let~$\mathbb{N}$ and $\mathbb{R}$ denote\dots} (start of the tutorial)}
+% \iffalse
+%<*guardlisting> 
+% \fi
+\begin{listing}[``Let~$\mathbb{N}$ and $\mathbb{R}$ denote\dots'' (start of the tutorial)]
+  {label=listing:numbrsys:base, listing and text}
+  Let~$\mathbb{N}$ and $\mathbb{R}$ denote the natural and real numbers.
+\end{listing}
+% \iffalse
+%</guardlisting> 
+% \fi
+% 
+% \phantomsection\addcontentsline{toc}{section}
+% {\ref{listing:numbrsys:cmd}. Equivalent to \ref{listing:numbrsys:base}, with \cs{NewDocumentCommand}}
+% \iffalse
+%<*guardlisting> 
+% \fi
+\begin{listing}[ Equivalent to \ref{listing:numbrsys:base}, with \cs{NewDocumentCommand}]
+  {label=listing:numbrsys:cmd, listing and text}
+  \DeclareDocumentCommand\Nat{}{\mathbb{N}}
+  \DeclareDocumentCommand\Real{}{\mathbb{R}}
+  Let~$\Nat$ and $\Real$ denote the natural and real numbers.
+\end{listing}
+% \iffalse
+%</guardlisting> 
+% \fi
+% 
+% \phantomsection\addcontentsline{toc}{section}
+% {\ref{listing:numbrsys:in}.  Equivalent to \ref{listing:numbrsys:cmd}, with \cs{Ccool}}
+% \iffalse
+%<*guardlisting> 
+% \fi
+\begin{listing}[ Equivalent to \ref{listing:numbrsys:cmd}, with \cs{Ccool}]
+  {label=listing:numbrsys:in, listing and text}
+  % ^^A--->
+  \Ccool c{\mathbb{#1}}{ Nat = {N}, Real = {R} }
+  Let~$\Nat$ and $\Real$~denote the natural and real numbers.
+  % ^^A<---
+  \CcoolClear
+\end{listing}
+% \iffalse
+%</guardlisting> 
+% \fi
+% 
+% \phantomsection\addcontentsline{toc}{section}
+% {\ref{listing:numbrsys:ex}.  Equivalent to \ref{listing:numbrsys:in}, with expansion}
+% \iffalse
+%<*guardlisting> 
+\fi
+\begin{listing}[ Equivalent to \ref{listing:numbrsys:in}, with expansion]
+  {label=listing:numbrsys:ex, listing and text}
+  % ^^A--->
+  \Ccool[Let~]
+  c{\mathbb{#1}}{ Nat = {N}, Real = {R} }*
+  [~denote the natural and real numbers.]{}
+  % ^^A<---
+  \CcoolClear
+\end{listing}
+% \iffalse
+%</guardlisting> 
+% \fi
+% 
+% \phantomsection\addcontentsline{toc}{section}
+% {\ref{listing:numbrsys:pa}.  Equivalent to \ref{listing:numbrsys:in}, parameterized (end of the tutorial)}
+% \iffalse
+%<*guardlisting> 
+% \fi
+\begin{listing}[ Equivalent to \ref{listing:numbrsys:in}, parameterized (end of the tutorial)]
+  {label=listing:numbrsys:pa, listing and text}
+  % ^^A--->
+  \Ccool<Style>c{\mathbb{#1}}{ Nat = {N}, Real = {R} }
+  [Let $\Nat<Style>$ and $\Real<Style>$ denote the natural and real numbers.]{}
+  % ^^A<---
+  \CcoolClear<Style>
+\end{listing}
+% \iffalse
+%</guardlisting> 
+% \fi
+% 
+% \phantomsection\addcontentsline{toc}{section}
+% {\ref{listing:lang}. Language and mode}
+%^^A   \selectlanguage{afrikaans}\\
+%^^A   \noindent\textbf{\languagename}{:}\\
+%^^A   \CcoolOption[ Separ ]
+%^^A   \Ccool{ X = x, Y = y }*
+%^^A   \selectlanguage{basque}\\
+%^^A   \noindent\textbf{\languagename}{:}\\
+%^^A   \CcoolOption[ Separ ]
+%^^A   \Ccool{ X = x, Y = y }*
+%^^A   \selectlanguage{catalan}\\
+%^^A   \noindent\textbf{\languagename}{:}\\
+%^^A   \CcoolOption[ Separ ]
+%^^A   \Ccool{ X = x, Y = y }*
+%^^A   \selectlanguage{croatian}\\
+%^^A   \noindent\textbf{\languagename}{:}\\
+%^^A   \CcoolOption[ Separ ]
+%^^A   \Ccool{ X = x, Y = y }*
+%^^A   \selectlanguage{czech}\\
+%^^A   \noindent\textbf{\languagename}{:}\\
+%^^A   \CcoolOption[ Separ ]
+%^^A   \Ccool{ X = x, Y = y }*
+%^^A   \selectlanguage{danish}\\
+%^^A   \noindent\textbf{\languagename}{:}\\
+%^^A   \CcoolOption[ Separ ]
+%^^A   \Ccool{ X = x, Y = y }*
+%^^A   \selectlanguage{dutch}\\
+%^^A   \noindent\textbf{\languagename}{:}\\
+%^^A   \CcoolOption[ Separ ]
+%^^A   \Ccool{ X = x, Y = y }*
+%^^A   % ^^A esperanto,                              % ERROR
+%^^A   \selectlanguage{estonian}\\
+%^^A   \noindent\textbf{\languagename}{:}\\
+%^^A   \CcoolOption[ Separ ]
+%^^A   \Ccool{ X = x, Y = y }*
+%^^A   \selectlanguage{finnish}\\
+%^^A   \noindent\textbf{\languagename}{:}\\
+%^^A   \CcoolOption[ Separ ]
+%^^A   \Ccool{ X = x, Y = y }*
+%^^A   \selectlanguage{french}\\
+%^^A   \noindent\textbf{\languagename}{:}\\
+%^^A   \CcoolOption[ Separ ]
+%^^A   \Ccool{ X = x, Y = y }*
+%^^A   % ^^A galician,                               % ERROR
+%^^A   \selectlanguage{german}\\
+%^^A   \noindent\textbf{\languagename}{:}\\
+%^^A   \CcoolOption[ Separ ]
+%^^A   \Ccool{ X = x, Y = y }*
+%^^A   \selectlanguage{hungarian}\\
+%^^A   \noindent\textbf{\languagename}{:}\\
+%^^A   \CcoolOption[ Separ ]
+%^^A   \Ccool{ X = x, Y = y }*
+%^^A   \selectlanguage{icelandic}\\
+%^^A   \noindent\textbf{\languagename}{:}\\
+%^^A   \CcoolOption[ Separ ]
+%^^A   \Ccool{ X = x, Y = y }*
+%^^A   \selectlanguage{indonesian}\\
+%^^A   \noindent\textbf{\languagename}{:}\\
+%^^A   \CcoolOption[ Separ ]
+%^^A   \Ccool{ X = x, Y = y }*
+%^^A   \selectlanguage{irish}\\
+%^^A   \noindent\textbf{\languagename}{:}\\
+%^^A   \CcoolOption[ Separ ]
+%^^A   \Ccool{ X = x, Y = y }*
+%^^A   \selectlanguage{italian}\\
+%^^A   \noindent\textbf{\languagename}{:}\\
+%^^A   \CcoolOption[ Separ ]
+%^^A   \Ccool{ X = x, Y = y }*
+%^^A   % ^^A kurmanji,                               % ERROR
+%^^A   \selectlanguage{latin}\\
+%^^A   \noindent\textbf{\languagename}{:}\\
+%^^A   \CcoolOption[ Separ ]
+%^^A   \Ccool{ X = x, Y = y }*
+%^^A   % ^^A latvian,                                % ERROR
+%^^A   \selectlanguage{lithuanian}\\
+%^^A   \noindent\textbf{\languagename}{:}\\
+%^^A   \CcoolOption[ Separ ]
+%^^A   \Ccool{ X = x, Y = y }*
+%^^A   \selectlanguage{ngerman}\\
+%^^A   \noindent\textbf{\languagename}{:}\\
+%^^A   \CcoolOption[ Separ ]
+%^^A   \Ccool{ X = x, Y = y }*
+%^^A   \selectlanguage{polish}\\
+%^^A   \noindent\textbf{\languagename}{:}\\
+%^^A   \CcoolOption[ Separ ]
+%^^A   \Ccool{ X = x, Y = y }*
+%^^A   \selectlanguage{portuguese}\\
+%^^A   \noindent\textbf{\languagename}{:}\\
+%^^A   \CcoolOption[ Separ ]
+%^^A   \Ccool{ X = x, Y = y }*
+%^^A   \selectlanguage{romanian}\\
+%^^A   \noindent\textbf{\languagename}{:}\\
+%^^A   \CcoolOption[ Separ ]
+%^^A   \Ccool{ X = x, Y = y }*
+%^^A   \selectlanguage{slovak}\\
+%^^A   \noindent\textbf{\languagename}{:}\\
+%^^A   \CcoolOption[ Separ ]
+%^^A   \Ccool{ X = x, Y = y }*
+%^^A   \selectlanguage{spanish}\\
+%^^A   \noindent\textbf{\languagename}{:}\\
+%^^A   \CcoolOption[ Separ ]
+%^^A   \Ccool{ X = x, Y = y }*
+%^^A   \selectlanguage{swedish}\\
+%^^A   \noindent\textbf{\languagename}{:}\\
+%^^A   \CcoolOption[ Separ ]
+%^^A   \Ccool{ X = x, Y = y }*
+%^^A   \selectlanguage{swissgerman}\\
+%^^A   \noindent\textbf{\languagename}{:}\\
+%^^A   \CcoolOption[ Separ ]
+%^^A   \Ccool{ X = x, Y = y }*
+%^^A   \selectlanguage{turkish}\\
+%^^A   \noindent\textbf{\languagename}{:}\\
+%^^A   \CcoolOption[ Separ ]
+%^^A   \Ccool{ X = x, Y = y }*
+%^^A   \selectlanguage{turkmen}\\
+%^^A   \noindent\textbf{\languagename}{:}\\
+%^^A   \CcoolOption[ Separ ]
+%^^A   \Ccool{ X = x, Y = y }*
+%^^A   \selectlanguage{welsh} \\
+%^^A   \noindent\textbf{\languagename}{:}\\
+%^^A   \CcoolOption[ Separ ]
+%^^A   \Ccool{ X = x, Y = y }*
+% \iffalse
+%<*guardlisting> 
+% \fi
+\begin{listing}[Language and mode]
+  {label=listing:lang}
+  %^^A--->
+  \textbf{\languagename}{:}~\Ccool{ X = x, Y = y }*
+  \begin{otherlanguage}{spanish}
+    \CcoolOption[ Separ ]\\
+    \textbf{\languagename}{:}~\Ccool{ X = x, Y = y }*
+  \end{otherlanguage}\\
+  \textbf{\languagename}{:}~\Ccool{ X = x, Y = y }*
+  \\[1em]
+  \CcoolOption[ Outer = ####1 ]
+  \textbf{\languagename}{:}~\Ccool{ X = this, Y = that }*
+  \begin{otherlanguage}{spanish}
+    \CcoolOption[ Separ ]\\
+    \textbf{\languagename}{:}~\Ccool{ X = esto, Y = aquello }*
+  \end{otherlanguage}\\
+  \textbf{\languagename}{:}~\Ccool{ X = this, Y = that }*
+  \CcoolOption[ Separ ]\\
+  % ^^A<---
+  \CcoolOption
+\end{listing}
+% \iffalse
+%</guardlisting> 
+% \fi
+% 
+% \phantomsection\addcontentsline{toc}{section}
+% {\ref{listing:se}. Separators}
+% \iffalse
+%<*guardlisting> 
+% \fi   
+\begin{listing}[Separators
+  % \NB{bug}
+  % {Removing the closing \CcoolOption subsequently causes inconsistent separators between text and math mode (case replicated in uncommented form in dtx)
+  % ^^A% \begin{listing}[Separators]
+  % ^^A%   {label=listing:se}
+  % ^^A%  %   ^^A--->
+  % ^^A%   \CcoolOption[ Separ={{\ \char`@\ }{\ \%\ }{\ \char`@\ }} ]
+  % ^^A%   \Ccool{ X = x, Y = y }*[\\]
+  % ^^A%   { X = x, Y = y }*s{{~\&~}}[\\]
+  % ^^A%   { X = x, Y = y }*s{{,~}{~\&~}}[\\[1em]]
+  % ^^A%   { X = x, Y = y, Z = z }*[\\]
+  % ^^A%   { X = x, Y = y, Z = z }*s{{~\&~}}[\\]
+  % ^^A%   { X = x, Y = y, Z = z }*s{{,~}{\&~}}[\\]
+  % ^^A%   { X = x, Y = y, Z = z }*s{{~\&~}{,~}{,~\&~}}\\
+  % ^^A%%   ^^A<---
+  % ^^A%   \CcoolClear
+  % ^^A% \end{listing}
+  % ^^A% \begin{listing}[Controlling the mode]
+  % ^^A%   {label=listing:mode}
+  % ^^A%   \Ccool{ X = x, Y = y }*\\
+  % ^^A%   \Ccool{ X = x, Y = y, Z = z }*\\[1em]
+  % ^^A%   \CcoolOption[ Outer = ####1 ]
+  % ^^A%   \Ccool{ X = x, Y = y }*\\
+  % ^^A%   \Ccool{ X = x, Y = y, Z = z }*\\[1em]
+  % ^^A%   \CcoolOption[ Outer ]
+  % ^^A%   \Ccool{ X = x, Y = y }*\\
+  % ^^A%   \Ccool{ X = x, Y = y, Z = z }*
+  % ^^A%   {Symptom:} Inconsistent separators
+  % ^^A%   {Workaround:} Put \CcoolOption in listing:se
+  % ^^A% \end{listing}
+  % ^^A% }
+  % }
+  ]
+  {label=listing:se}
+  % ^^A--->
+  \CcoolOption[ Separ={{\ \char`@\ }{\ \%\ }{\ \char`@\ }} ]
+  \Ccool{ X = x, Y = y }*[\\]
+  { X = x, Y = y }*s{{~\&~}}[\\]
+  { X = x, Y = y }*s{{,~}{~\&~}}[\\[1em]]
+  { X = x, Y = y, Z = z }*[\\]
+  { X = x, Y = y, Z = z }*s{{~\&~}}[\\]
+  { X = x, Y = y, Z = z }*s{{,~}{\&~}}[\\]
+  { X = x, Y = y, Z = z }*s{{~\&~}{,~}{,~\&~}}\\
+  % ^^A<---
+  \CcoolOption
+  \CcoolClear
+\end{listing}
+% \iffalse
+%</guardlisting> 
+% \fi
+% 
+% \phantomsection\addcontentsline{toc}{section}
+% {\ref{listing:hw:i}. Hello, world! (testing)}
+% \iffalse
+%<*guardlisting> 
+% \fi
+\begin{listing}[Hello, world! (testing)]
+  {label=listing:hw:i}
+  \CcoolOption[ Write = \BooleanTrue ]
+  % ^^A--->
+  \CcoolOption[Separ = {{}{.}{.}}, Outer = {####1}]
+  \Ccool
+  <Test>{ KeyA = {.}, KeyB = {!}, KeyC = {\%} }[]
+  <Test>{ KeyD = {d}, KeyE = {\%} }[]
+  <Test>c{\{#1\}}{ KeyF = {H}, KeyG = {e}, KeyH = {l} }*[]
+  <Test>{ KeyI = {\%}, KeyJ = {\%}, KeyK = {\%} }[.\{l\}.\{o\}]
+  <Test>{ KeyL = {l}, KeyM = {\char`[}, KeyN = {\char`]} }[]
+  <Test>{ KeyO = {o}, KeyP = {\%}, KeyQ = {\%} }[{,\ }]
+  <Test>{ KeyR = {w}, KeyS = {o}, KeyT = {r} }*
+  s{{}{}{}}c{{\char`[}#1}[]
+  <Test>{ KeyU = {\%}, KeyV = {\%}, KeyW = {\%} }[]
+  <Test>{ KeyX = {\%}, KeyY = {\%}, KeyZ = {\KeyB<Test>} }\nobreak
+  \KeyL<Test>\KeyD<Test>\KeyZ<Test>\KeyN<Test>\\
+  % ^^A<---
+  \CcoolOption
+  \CcoolClear
+\end{listing}
+% \iffalse
+%</guardlisting> 
+% \fi
+% 
+% \phantomsection\addcontentsline{toc}{section}
+% {\ref{listing:hw:ii}. \docreflist{hw:i} read from file}
+% \iffalse
+%<*guardlisting> 
+% \fi
+\begin{listing}[\docreflist{hw:i} read from file]
+  {label=listing:hw:ii}
+  % ^^A--->
+  \CcoolRead
+  \KeyF<Test>\KeyA<Test>\nobreak
+  \KeyG<Test>\KeyA<Test>\nobreak
+  \KeyH<Test>\KeyA<Test>\nobreak
+  \KeyH<Test>\KeyA<Test>\nobreak
+  {\{}\nobreak\KeyO<Test>{\}},{\ }\nobreak
+  \KeyM<Test>\KeyR<Test>\nobreak
+  \KeyO<Test>\nobreak
+  \KeyT<Test>\nobreak
+  \KeyL<Test>\nobreak
+  \KeyD<Test>\nobreak
+  \KeyZ<Test>\nobreak
+  \KeyN<Test>\nobreak
+  % ^^A<---
+  \CcoolClear
+\end{listing}
+% \iffalse
+%</guardlisting> 
+% \fi
+% 
+% \phantomsection\addcontentsline{toc}{section}{\ref{listing:proba:i}. Probability space}
+% \iffalse
+%<*guardlisting> 
+% \fi
+\begin{listing}[Probability space]
+  {label=listing:proba:i}
+  \CcoolOption[ Write = \BooleanTrue ]
+  % ^^A--->
+  \Ccool[Let~]
+  { Space = \Omega, Field = \mathcal{F}, Meas = \mathcal{P} }
+  *s{{,}}c{$\{#1\}$}
+  [~denote the probability space, where~]{ PowerSet = { 2^{\Space} } }
+  [$\Field\subset \PowerSet$.]
+  {}
+  % ^^A<---
+  \CcoolClear
+  \CcoolOption
+\end{listing}
+% \iffalse
+%</guardlisting> 
+% \fi
+% 
+% \phantomsection\addcontentsline{toc}{section}{\ref{listing:proba:ii}. \docreflist{proba:i} read from file}
+% \iffalse
+%<*guardlisting> 
+% \fi
+\begin{listing}[\docreflist{proba:i} read from file]
+  {label=listing:proba:ii}
+  % ^^A--->
+  \CcoolRead \tab $\Omega$ $\Field$ $\Meas$
+  % ^^A<---
+  \CcoolClear
+\end{listing}
+% \iffalse
+%</guardlisting> 
+% \fi
+% 
+% \phantomsection\addcontentsline{toc}{section}{\ref{listing:mvt:i}. Mittelwertsatz f\"ur \texorpdfstring{$n$} Variable. }
+% \iffalse
+%<*guardlisting> 
+% \fi
+\begin{listing}[{Mittelwertsatz f\"ur $n$ Variable\cite[17.3]{tcolbox}}]
+  {label=listing:mvt:i}
+  \CcoolOption[ Write = \BooleanTrue ]
+  % ^^A--->
+  \selectlanguage{german}
+  \newtheorem{theorem}{Theorem}
+  \AfterEndEnvironment{theorem}{\CcoolHook}
+  \Ccool c{\mathbb{#1}}
+  { N = { N } , R = { R } }+[]
+  { Grad = { \operatorname{grad} } }+
+  [\begin{theorem}
+    [Mittelwertsatz f\"ur $n$ Variable]Es~sei~]
+    { OffMenge = {D}, Ci = {C^{1}}, Strecke = { \left[x_0,x\right] } }+
+    [$n\in\N$,~$\OffMenge\subseteq\N^n$ eine offene Menge und $f\in\Ci(\OffMenge,\R)$.
+    Dann gibt es auf jeder Strecke $\Strecke\subset\OffMenge$ einen Punkt $\xi\in\Strecke$,~]
+    { Steig = { \frac{ f(x)-f(x_0) }{ x-x_0 } }, Punkt = { \xi } }+
+    [so dass gilt
+    \begin{equation*}
+      \Steig = \Grad f(\Punkt)^{\top}
+    \end{equation*}
+  \end{theorem}]
+  {}
+  (Check: $\N$, $\Punkt$)
+  % ^^A<---
+  \CcoolClear
+  \CcoolOption
+\end{listing}
+% \iffalse
+%</guardlisting> 
+% \fi
+% 
+% \phantomsection\addcontentsline{toc}{section}{\ref{listing:mvt:ii}. \docreflist{mvt:i} read from file}
+% \iffalse
+%<*guardlisting> 
+% \fi
+\begin{listing}[\docreflist{mvt:i} read from file]
+  {label=listing:mvt:ii}
+  % ^^A--->
+  \CcoolRead \tab $\N$ $\R$ $\OffMenge$ $\Ci$ $\Strecke$ 
+  % ^^A<---
+  \CcoolClear
+\end{listing}
+% \iffalse
+%</guardlisting> 
+% \fi
+% 
+% \phantomsection\addcontentsline{toc}{section}{\ref{listing:poly:real:i}. Families of polynomial functions}
+% \iffalse
+%<*guardlisting> 
+% \fi
+\begin{listing}[Families of polynomial functions]
+  {label=listing:poly:real:i}
+  \CcoolOption[ Write = \BooleanTrue ]
+  % ^^A--->
+  \Ccool c{\mathbb{#1}}{ Nat = {N}, Real = {R} }
+  [Let~]
+  { PolyR = \CcoolLambda[o]{\Real\IfValueT{#1}{_#1}[X] } }
+  [$\PolyR[n]$ and $\PolyR$, denote the families of polynomial functions on $\Real$, of order $n$ et and their union over $n \in \Nat$, respectively. ]
+  {}
+  % ^^A<---
+  \CcoolClear
+  \CcoolOption
+\end{listing}
+% \iffalse
+%</guardlisting> 
+% \fi
+% 
+% \phantomsection\addcontentsline{toc}{section}{\ref{listing:poly:real:ii}. \docreflist{poly:real:i} read from file}
+% \iffalse
+%<*guardlisting> 
+% \fi
+\begin{listing}[\docreflist{poly:real:i} read from file]
+  {label=listing:poly:real:ii}
+  % ^^A--->
+  \CcoolRead \tab $\PolyR[n]$ et $\PolyR$
+  % ^^A<---
+  \CcoolClear
+\end{listing}
+% \iffalse
+%</guardlisting> 
+% \fi
+% 
+% \phantomsection\addcontentsline{toc}{section}{\ref{listing:poly:arb:i}. Same as \docreflist{poly:real:i}, but arbitrary number system}
+% \iffalse
+%<*guardlisting> 
+% \fi
+\begin{listing}[Same as \docreflist{poly:real:i}, but arbitrary number system]
+  {label=listing:poly:arb:i}
+  \CcoolOption[ Write = \BooleanTrue ]
+  % ^^A--->
+  \selectlanguage{french}
+  \Ccool c{\mathbb{#1}}{ Corps = {K}, Nat = {N}, Reel = {R} }
+  [Soient~]
+  {
+    Poly = \CcoolLambda[om]{#2\IfValueT{#1}{_#1}[X] },
+    PolyR = \CcoolLambda[o]{\Poly[#1]{\Reel}}
+  }
+  [$\Poly[n]{\Corps}$ et $\Poly{\Corps}$, les familles de polyn\^omes sur $\Corps$, de degr\'e $n$ et leur union pour $n \in \Nat$, respectivement. En particulier,
+  ils sont d\'enot\'es $\PolyR[n]$ et $\PolyR$, pour $\Corps=\Reel$.]
+  {}
+  % ^^A<---
+  \CcoolClear
+  \CcoolOption
+\end{listing}
+% \iffalse
+%</guardlisting> 
+% \fi
+% 
+% \phantomsection\addcontentsline{toc}{section}{\ref{listing:poly:real:ii}. \docreflist{poly:arb:i} read from file}
+% \iffalse
+%<*guardlisting> 
+% \fi
+\begin{listing}[\docreflist{poly:arb:i} read from file]
+  {label=listing:poly:arb:ii}
+  % ^^A--->
+  \CcoolRead \tab $\PolyR[n]$ et $\PolyR$
+  % ^^A<---
+  \CcoolClear
+\end{listing}
+% \iffalse
+%</guardlisting> 
+% \fi
+% 
+% \phantomsection\addcontentsline{toc}{section}{\ref{listing:fonc:i}. Fonction et fonctionelle}
+% \iffalse
+%<*guardlisting> 
+% \fi
+\begin{listing}[Fonction et fonctionelle]
+  {label=listing:fonc:i}
+  \CcoolOption[ Write = \BooleanTrue ]
+  % ^^A--->
+  \selectlanguage{french}
+  \Ccool{ EvalAt = \CcoolLambda{(#1)}, ApplyOp = \CcoolLambda[mm]{#1[#2]} }
+  [Supposons une fonction $f\EvalAt{t}$, et \'etudions le probl\`eme o\`u la fonctionnelle $\ApplyOp{S}{f}$ est donn\'ee par\dots]{}
+  % ^^A<---
+  \CcoolClear
+  \CcoolOption
+\end{listing}
+% \iffalse
+%</guardlisting> 
+% \fi
+% 
+% \phantomsection\addcontentsline{toc}{section}{\ref{listing:fonc:ii}. \docreflist{fonc:i} read from file}
+% \iffalse
+%<*guardlisting> 
+% \fi
+\begin{listing}[\docreflist{fonc:i} read from file]
+  {label=listing:fonc:ii}
+  % ^^A--->
+  \CcoolRead \tab $f\EvalAt{t}$, $\ApplyOp{S}{f}$
+  % ^^A<---
+  \CcoolClear
+\end{listing}
+% \iffalse
+%</guardlisting> 
+% \fi
+% 
+% \phantomsection\addcontentsline{toc}{section}{\ref{listing:cusum:i}. CUSUM statistic.}
+% \iffalse
+%<*guardlisting> 
+% \fi
+\begin{listing}[CUSUM statistic\cite{ccool-thesis}]
+  {label=listing:cusum:i}
+  \CcoolOption[ Write = \BooleanTrue ]
+  % ^^A--->
+  \newtheorem{definition}{Definition}
+  \AfterEndEnvironment{definition}{\CcoolHook}  
+  \Ccool{
+    SuchThat = { ;~ },
+    Time = { t },
+    Process = { \xi },
+    StopT = { T },
+    EvalAt = \CcoolLambda{(#1)}
+  }
+  [The CUSUM statistic process and the corresponding one-sided CUSUM stopping time are defined as follows:
+  \begin{definition}\label{the CUSUM statistic}. Let~]
+    {
+      Scale = { \lambda },
+      Real = {\mathcal{R}}
+    }+*s{{~\in~}}
+    [~and~]
+    { CUSUMthresh = { \nu } }+*c{$#1\in\Real^{+}$.}
+    [~Define the following processes:]
+    {
+      LogWald = { u },
+      CUSUMst = { \StopT_{c} },
+      CUSUM = { y },
+      LogWaldInf = { m }
+    }+
+    [\begin{enumerate}
+    \item{
+        $\LogWald_{\Time}\EvalAt{ \Scale } = \Scale\Process_{\Time} - \frac{1}{2}\Scale^2\Time$;
+        $\LogWaldInf_{\Time}\EvalAt{ \Scale } = \inf_{ 0\le s \le \Time }\CUSUM_{s} \EvalAt{ \Scale }$.
+      }
+    \item{
+        $\CUSUM_{\Time}\EvalAt{ \Scale } = \LogWaldInf_{\Time}\EvalAt{ \Scale } - \LogWald_{\Time}\EvalAt{ \Scale }\ge0$,
+        which is the CUSUM statistic process.
+      }
+    \item{
+        $\CUSUMst \EvalAt{ \Scale, \LogWaldInf } = \inf\left[ \Time \ge 0 \SuchThat \CUSUM_{\Time}\EvalAt{\Scale} \ge \LogWaldInf \right]$,
+        which is the CUSUM stopping time.
+      }
+    \end{enumerate}
+  \end{definition}\par]{}
+  
+  (Check: $\Scale$, $\CUSUM$)
+  % ^^A<---
+  \CcoolClear
+  \CcoolOption
+% \end{listing}
+% \iffalse
+%</guardlisting> 
+% \fi
+% 
+% \phantomsection\addcontentsline{toc}{section}{\ref{listing:cusum:ii}. \docreflist{cusum:i} read from file}
+% \iffalse
+%<*guardlisting> 
+% \fi
+\begin{listing}[\docreflist{cusum:i} read from file]
+  {label=listing:cusum:ii}
+  % ^^A--->
+  \CcoolRead \tab $\Time $ $\Process$ $\Scale$ $\Real$ $\CUSUMthresh$ $\LogWald$  $\CUSUMst$ $\CUSUM$ $\LogWaldInf$ 
+  % ^^A<---
+  \CcoolClear
+\end{listing}
+% \iffalse
+%</guardlisting> 
+% \fi
+% 
+% \clearpage
+% \part{Other}\label{part:other}
+% 
+% \section{Acknowledgment}\label{other:acknowl} 
+% 
+% This work has benefited from Q\&A's from the \LaTeX community\cite{user-erw}\cite{p158966}.
+% Specific attributions are made throughout this document.
+% 
+% \section{Genealogy}\label{other:geneal}
+% 
+% \textquote
+% [\pkg{cool}\cite{cool}]
+% {Give commands the ability to contain the mathematical meaning while retaining the typesetting versatility}.
+% The addition of `c', in \pkg{ccool}, is for \emph{custom}. With hinsdight it is restrictive to
+% describe \pkg{ccool} as a tool for encoding mathematical convention.
+% 
+% \section{Install}\label{other:install}
+% \begin{enumerate}[label=\emph{\arabic*)}]
+% \item Compile \file{ccool.dtx} (under Unix, \texttt{\$pdflatex ccool.dtx})
+% \item Put the generated \file{ccool.sty} in the search path of the \LaTeX engine
+%^^A \NB{todo}{\pkg{l3buid} install}
+% \end{enumerate}
+% 
+% \section{Issue}\label{other:issue}
+%
+% Listed under:
+% \begin{enumerate}[label={\emph{\alph*)}}]
+% \item \env{NOTE} or \cs{NB}, tagged either \texttt{bug} or \texttt{fixed}, inside \jobname|.dtx|
+% \end{enumerate}
+% 
+% \section{Support}\label{other:support}
+% 
+% This package is available from \url{https://www.ctan.org/pkg/ccool} and \url{https://github.com/rogard/ccool}.
+% 
+% \section{Testing}\label{other:testing}
+% 
+% \subsection{Technicality}
+% Not possible to compile-check the expansion of a certain class of macros against predefined values\cite{a-534100}. 
+% Instead, one can
+% \begin{enumerate}[label={\emph{\alph*)}}]
+% \item Follow the steps in \autoref{other:install} on one's own machine to generate \jobname|.pdf|
+% \item Visually check \autoref{part:listing}, against that \href{https://github.com/rogard/ccool}{of the repository}, for the same version.
+% \end{enumerate}
+% Also see:
+% \begin{enumerate}[label={\emph{\alph*)}}]
+% \setcounter{enumi}{2}
+% \item Also see: \autoref{other:todo}~\ref{todo:regtest}
+% \end{enumerate}
+% 
+% \subsection{Platform}
+% \begin{enumerate}[label=\emph{\roman*)}]
+% \item 
+%   ^^A uname -a
+%   \begin{Verbatim}[breaklines=true]
+%     Linux laptop 4.15.0-20-generic #21-Ubuntu SMP Tue Apr 24 06:16:15 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
+%   \end{Verbatim}
+%   \label{plat:lin}
+% \end{enumerate}
+% 
+% \subsection{Engine}
+% \begin{enumerate}[label=\emph{\alph*)}]
+% \item 
+%   \begin{Verbatim}[breaklines=true]
+%     pdfTeX 3.14159265-2.6-1.40.20 (TeX Live 2019)
+%   \end{Verbatim}
+%   \label{eng:tlxviiii:pdf}
+% \item 
+%   \begin{Verbatim}[breaklines=true]
+%     pdfTeX 3.14159265-2.6-1.40.21 (TeX Live 2020)
+%   \end{Verbatim}
+%   \label{eng:tlxx:pdf}
+% \item
+%   \begin{Verbatim}[breaklines=true]
+%     LuaHBTeX, Version 1.12.0 (TeX Live 2020)
+%   \end{Verbatim}
+%   \label{eng:tlxx:lua}
+% \item
+%   \begin{Verbatim}[breaklines=true]
+%     XeTeX 3.14159265-2.6-0.999992 (TeX Live 2020)
+%   \end{Verbatim}
+%   \label{eng:tlxx:xe}
+% \end{enumerate}
+% 
+% \subsection{Results}
+% 
+% \begin{enumerate}[label=\emph{\arabic*)}]
+% \item \pkg{ccool} \docvers{1}{8} compiles satisfactorily on platform \ref{plat:lin} and engine \ref{eng:tlxviiii:pdf}
+% \item \pkg{ccool} \docvers{1}{8} compiles satisfactorily on platform \ref{plat:lin} and engine \ref{eng:tlxx:pdf}
+% \item \pkg{ccool} \docvers{1}{9} compiles satisfactorily on platform \ref{plat:lin} and engines \ref{eng:tlxx:pdf} and \ref{eng:tlxx:lua}
+% \item \pkg{ccool} \docvers{2}{0} compiles satisfactorily on platform \ref{plat:lin} and engines \ref{eng:tlxx:pdf},  \ref{eng:tlxx:lua}, and \ref{eng:tlxx:xe}
+% \item \pkg{ccool} \docvers{2}{1} compiles satisfactorily on platform \ref{plat:lin} and engines \ref{eng:tlxx:pdf},  \ref{eng:tlxx:lua}, and \ref{eng:tlxx:xe}
+% \item \pkg{ccool} \docvers{2}{3} compiles satisfactorily on platform \ref{plat:lin} and engines \ref{eng:tlxx:pdf},  \ref{eng:tlxx:lua}, and \ref{eng:tlxx:xe}
+% \item \pkg{ccool} \docvers{2}{7} compiles satisfactorily on platform \ref{plat:lin} and engines \ref{eng:tlxx:pdf},  \ref{eng:tlxx:lua}, and \ref{eng:tlxx:xe}
+% \item \pkg{ccool} \docvers{2}{8} compiles satisfactorily on platform \ref{plat:lin} and engines \ref{eng:tlxx:pdf},  \ref{eng:tlxx:lua}, and \ref{eng:tlxx:xe}
+% \end{enumerate}
+% 
+% \subsection{Other}
+% Check \cite{ccool-thesis} for testing \pkg{ccool} with \cls{llncs}
+% 
+% \section{To do}\label{other:todo}
+%
+% \begin{enumerate}[label=\emph{\alph*)}]
+% \item Regression testing using \cite[Section 3.2—Specifying expectations]{l3build}. \label{todo:regtest}
+% \end{enumerate}
+% Also see:
+% \begin{enumerate}[label=\emph{\alph*)}]
+% \setcounter{enumi}{1}
+% \item \env{NOTE} or \cs{NB} tagged \texttt{abandon\docpipe{}done\docpipe{}todo} inside \jobname|.dtx|
+% \end{enumerate}
+% 
+% \DocPhantomSection*{section}{References}{other:bib}
+% \begin{thebibliography}{1}
+% \bibitem{cool} Nick Setzer {\em The \pkg{cool} package}, 2005, \url{https://www.ctan.org/pkg/cool}
+% \bibitem{interface3} The \LaTeX3 Project Team {\em The \LaTeX3 interfaces}, 2019,
+%   \url{http://ftp.math.purdue.edu/mirrors/ctan.org/macros/latex/contrib/l3kernel/interface3.pdf}
+% \bibitem{l3build} The \LaTeX3 Project Team {\em The \pkg{l3build} package}, 2020,
+%   \url{http://mirror.utexas.edu/ctan/macros/latex/contrib/l3build/l3build.pdf}
+% \bibitem{tcolbox} Thomas F. Sturm {\em The \pkg{tcolorbox} package}, 2019,
+%   \url{http://www.texdoc.net/texmf-dist/doc/latex/tcolorbox/tcolorbox.pdf}
+% \bibitem{xparse} The \LaTeX3 Project Team {\em The \pkg{xparse} package}, 2020,
+%   \url{http://ftp.math.purdue.edu/mirrors/ctan.org/macros/latex/contrib/l3packages/xparse.pdf}
+% \bibitem{ccool-thesis} Erwann Rogard and Olympia Hadjiliadis {\em Typesetting a math thesis with \pkg{ccool}}, 2020,
+%   \url{https://github.com/rogard/ccool/blob/master/thesis.pdf}
+% \bibitem{user-erw} \url{https://tex.stackexchange.com/users/112708/erwann?tab=questions}
+% \bibitem{a-534100} \href{https://tex.stackexchange.com/users/73/joseph-wright}{@{}joseph-wright}'s answer to
+%   ``Checking a function's expansion against a string'', \url{https://tex.stackexchange.com/a/534100}
+% \bibitem{a-536597} \href{https://tex.stackexchange.com/users/73317/frougon}{@{}frougon}'s answer to ``Journaling calls to a function \textdel{taking inline code as argument}'', \url{https://tex.stackexchange.com/a/536620}
+% \bibitem{p158966}\cs{Ccool}, extension à \LaTeX~à vocation mathématique, \url{http://forum.mathematex.net/latex-f6/ccool-extension-latex-a-vocation-mathematique-t17314.html}
+% \bibitem{a-547018}  \href{https://tex.stackexchange.com/users/5735/javier-bezos}{@{}Javier Bezos}'s answer to~\url{https://tex.stackexchange.com/a/547018/112708}
+% \end{thebibliography}
+% 
+% \changes{\docvers{1}{0}}
+% {2020/03/08}
+% {Initial version}
+% \changes{\docvers{1}{1}}
+% {2020/04/04}
+% {Rearrange: much of the implementation}
+% \changes{\docvers{1}{1}}
+% {2020/04/04}
+% {Replace: \Arg{kvl_{2}}~by~\docpard{\meta{kvl_{2}}}~given that option type \texttt{G} not recommended\cite{xparse}}
+% \changes{\docvers{1}{1}}
+% {2020/04/04}
+% {Replace: \cs{OopsOptions}~by~\cs{OopsOption}}
+% \changes{\docvers{1}{1}}
+% {2020/04/04}
+% {Replace: \docarg{GenericObject}~by~\docarg{Name}}
+% \changes{\docvers{1}{1}}
+% {2020/04/04}
+% {Replace: \docarg{Separators}~by~\docarg{Separ}}
+% \changes{\docvers{1}{1}}
+% {2020/04/04}
+% {Add:\cs{OopsTest}}
+% \changes{\docvers{1}{1}}
+% {2020/04/04}
+% {Add:\cs{OopsRestore}}
+% \changes{\docvers{1}{1}}
+% {2020/04/04}
+% {Add: \docarg{Save}}
+% \changes{\docvers{1}{1}}
+% {2020/04/04}
+% {Delete: Listing 1-5 from \docvers{1}{0}}
+% \changes{\docvers{1}{1}}
+% {2020/04/04}
+% {Add: Listing~1., 2., 3., 4., 6., and 9.}
+% \changes{\docvers{1}{1}}
+% {2020/04/04}
+% {Fix: apparent anomaly in \docvers{1}{0}'s Listing~4, see \docreflist{hw:i}}
+% \changes{\docvers{1}{2}}
+% {2020/04/06}
+% {Add: optional \pkgparex to \cs{OopsNew} as instruction to expand \pkgparkvl}
+% \changes{\docvers{1}{2}}
+% {2020/04/06}
+% {Replace: \cs{OopsClear}\Arg{\pkgparpa} by \cs{OopsClear}\docparo{\meta{\doccceptkvl}}}
+% \changes{\docvers{1}{2}}
+% {2020/04/06}
+% {Delete: \meta{kvl_{2}}~and~\meta{code_{2}}}
+% \changes{\docvers{1}{2}}
+% {2020/04/06}
+% {Delete: \cs{OopsTest}}
+% \changes{\docvers{1}{2}}
+% {2020/04/06}
+% {Delete: Listing~2-3 from \docvers{1}{1}.}
+% \changes{\docvers{1}{2}}
+% {2020/04/06}
+% {Replace: \cs{Save} by \cs{Write}}
+% \changes{\docvers{1}{2}}
+% {2020/04/06}
+% {Replace: \cs{Restore} by \cs{Read}}
+% \changes{\docvers{1}{3}}
+% {2020/04/06}
+% {Replace: \cs{OopsNew} by \cs{Oops}}
+% \changes{\docvers{1}{3}}
+% {2020/04/06}
+% {Replace: \Arg{\pkgparpa} and \docparo{\meta{\pkgparpa}} by \docpard{\meta{\pkgparpa}} }
+% \changes{\docvers{1}{4}}
+% {2020/04/10}
+% {Replace: \docpare{s}{\Arg{\pkgparsi}\Arg{\pkgparsii}\Arg{\pkgparsiii}}
+% by \docpare{s}{\Arg{\pkgparsi}\docpipe\Arg{\pkgparsi}\Arg{\pkgparsii}\docpipe\Arg{\pkgparsi}\Arg{\pkgparsii}\Arg{\pkgparsiii}}}
+% \changes{\docvers{1}{4}}
+% {2020/04/10}
+% {Add:optional \pkgparap to \cs{OopsNew} to make side effects presist beyond local group}
+% \changes{\docvers{1}{4}}
+% {2020/04/10}
+% {Add: \cs{OopsHook}}
+% \changes{\docvers{1}{4}}
+% {2020/04/10}
+% {Delete: Listing~1., and 2. }
+% \changes{\docvers{1}{4}}
+% {2020/04/10}
+% {Add: Listing~1., 2., and 3. }
+% \changes{\docvers{1}{4}}
+% {2020/04/10}
+% {Add: \docarg{Expans} (for debugging' sake, but...) }
+% \changes{\docvers{1}{4}}
+% {2020/04/10}
+% {Add: \autoref{usage:dosdont} }
+% \changes{\docvers{1}{4}}
+% {2020/04/10}
+% {Add: \cs{OopsDebug} }
+% \changes{\docvers{1}{5}}
+% {2020/04/10}
+% {Delete: dependence on \pkg{datetime} }
+% \changes{\docvers{1}{5}}
+% {2020/04/10}
+% {Add: \pkgoptfi }
+% \changes{\docvers{1}{6}}
+% {2020/04/10}
+% {Rename: \pkg{oops} to \pkg{ccool} (better describes the purpose) }
+% \changes{\docvers{1}{6}}
+% {2020/04/10}
+% {Rename: \cs{Oops} to \cs{Ccool}}
+% \changes{\docvers{1}{6}}
+% {2020/04/10}
+% {Rename: \cs{OopsClear} to \cs{CcoolClear}}
+% \changes{\docvers{1}{6}}
+% {2020/04/10}
+% {Rename: \cs{OopsDebug} to \cs{CcoolDebug}}
+% \changes{\docvers{1}{6}}
+% {2020/04/10}
+% {Rename: \cs{OopsHook} to \cs{CcoolHook}}
+% \changes{\docvers{1}{6}}
+% {2020/04/10}
+% {Rename: \cs{OopsOption} to \cs{CcoolOption}}
+% \changes{\docvers{1}{6}}
+% {2020/04/10}
+% {Rename: \cs{OopsRead} to \cs{CcoolRead}}
+% \changes{\docvers{1}{6}}
+% {2020/04/10}
+% {Add: Listing showing part of the preamble }
+% \changes{\docvers{1}{7}}
+% {2020/04/11}
+% {Add: \docreflist{cusum:i} (CUSUM) }
+% \changes{\docvers{1}{7}}
+% {2020/04/11}
+% {Add: Legends to listings }
+% \changes{\docvers{1}{7}}
+% {2020/04/11}
+% {Delete: \cs{CcoolDebug} }
+% \changes{\docvers{1}{7}}
+% {2020/04/11}
+% {Delete: Listing~5 from \docvers{1}{6} }
+% \changes{\docvers{1}{8}}
+% {2020/04/12}
+% {Add: \hyperref[usage:cs:lambda]{\cs{CcoolLambda}} }
+% \changes{\docvers{1}{8}}
+% {2020/04/12}
+% {Add: \docreflist{fonc:i}, \docreflist{fonc:ii} }
+% \changes{\docvers{1}{8}}
+% {2020/04/12}
+% {Add: \cs{CcoolVers} }
+% \changes{\docvers{1}{8}}
+% {2020/04/12}
+% {Add: \docreflist{vers} }
+% \changes{\docvers{1}{9}}
+% {2020/04/14}
+% {Add: support for \LuaTeX }
+% \changes{\docvers{1}{9}}
+% {2020/04/14}
+% {Move: from \autoref{part:usage} to \autoref{part:impl}, what is now that part's \autoref{impl:frontend}}
+% \changes{\docvers{2}{0}}
+% {2020/04/15}
+% {Delete: \pkgoptfi's dependency on \pkg{texosquery} and \cs{pdfcreationdate}}
+% \changes{\docvers{2}{0}}
+% {2020/04/15}
+% {Add: support for \XeTeX}
+% \changes{\docvers{2}{0}}
+% {2020/04/15}
+% {Update: \cs{RequirePackage}, \cs{NeedsTeXFormat}'s second argument / TeX Live 2020}
+% \changes{\docvers{2}{1}}
+% {2020/04/17}
+% {Replace: \hyperref[usage:cs:lambda]{\cs{CcoolLambda}}'s optional integer argument (number of \texttt{m}'s)
+% by a standard argument list}
+% \changes{\docvers{2}{1}}
+% {2020/04/17}
+% {Replace: \hyperref[ccool:pa]{\meta{\pkgparpa}}'s position within \cs{Ccool}'s argument list, from first to second. Greater versatility }
+% \changes{\docvers{2}{1}}
+% {2020/04/17}
+% {Replace: as~the~default~of~\pkgoptpa,~\docarg{Math}~by~\pkgoptpad}
+% \changes{\docvers{2}{1}}
+% {2020/04/17}
+% {Replace: \docccept{\doccceptgopt}~\docarg{Name} by \nameref{usage:opt:pa} }
+% \changes{\docvers{2}{1}}
+% {2020/04/17}
+% {Add:Listings 3, 4, 5, 6, 7, 8, and 9}
+% \changes{\docvers{2}{2}}
+% {2020/04/20}
+% {Remove: \% from listings}
+% \changes{\docvers{2}{2}}
+% {2020/04/20}
+% {Replace: part of the abstract's with more straighforward descriptions based on input from forum participtants}
+% \changes{\docvers{2}{3}}
+% {2020/05/16}
+% {Replace: for \cs{Ccool}, \docpare{i}{} by \docpare{c}{}}
+% \changes{\docvers{2}{3}}
+% {2020/05/16}
+% {Rearranged: \nameref{usage:cs:ccool}'s subsections. Previously, by argument. Now, by feature. }
+% \changes{\docvers{2}{3}}
+% {2020/05/16}
+% {Replace: In \docstep{key}, the created command's implementation, from \cs{ProvideDocumentCommand} to \cs{DeclareDocumentCommand}}
+% \changes{\docvers{2}{3}}
+% {2020/05/16}
+% {Complete: \docreflist{poly:real:i}}
+% \changes{\docvers{2}{3}}
+% {2020/05/16}
+% {Add: \docreflist{poly:real:ii}, \docreflist{poly:arb:i}, and \docreflist{poly:arb:ii}}
+% \changes{\docvers{2}{3}}
+% {2020/05/16}
+% {Remove: Listing showing part of the preamble }
+% \changes{\docvers{2}{4}}
+% {2020/05/16}
+% {Fix: minor error in the listings (\cs{Real} rather than \cs{Reel}, hitherto unnoticed). }
+% \changes{\docvers{2}{4}}
+% {2020/05/16}
+% {Remove: examples from \autoref{part:usage},~\nameref{usage:cs:ccool}, as redundant with \autoref{part:listing}~\docreflist{numbrsys:base}-\ref{listing:numbrsys:pa}}
+% \changes{\docvers{2}{5}}
+% {2020/05/21}
+% {Modify: behavior of \autoref{part:usage}~\nameref{ccool:ex}, rely on \pkg{erw-l3}'s \cs{erw_seq_use:Nn} }
+% 
+% \changes{\docvers{2}{5}}
+% {2020/05/21}
+% {Modify: \nameref{impl:opt:fi}, rely on \pkg{erw-l3}'s \cs{erw_jobnametimestamp:} }
+% 
+% \changes{\docvers{2}{6}}
+% {2020/05/22}
+% {Modify: \nameref{impl:cs:lambda}, rely on \pkg{erw-l3}'s \cs{erw_lambda:nnn} }
+% 
+% \changes{\docvers{2}{7}}
+% {2020/05/28}
+% {Add: \docccept{\doccceptgopt}~\nameref{usage:opt:an} }
+% 
+% \changes{\docvers{2}{7}}
+% {2020/05/28}
+% {Add: \doclist{lang} }
+% 
+% \changes{\docvers{2}{7}}
+% {2020/05/28}
+% {Modify: \nameref{usage:opt:se}'s default rely on \pkg{babel} and \pkg{amsmath}, if applicable}
+% 
+% \changes{\docvers{2}{7}}
+% {2020/05/28}
+% {Modify: \nameref{usage:cs:option}'s \docxparsem by \docxparseo}
+%
+% \changes{\docvers{2}{8}}
+% {2020/05/28}
+% {Fix: conflict between \cs{usepackage}\docparo{spanish}\docparm{babel} and \nameref{ccool:pa} }
+%
+% \changes{\docvers{2}{9}}
+% {2020/06/03}
+% {Miscellaneous }
+%
+% \changes{\docvers{3}{0}}
+% {2020/06/04}
+% {Miscellaneous }
+%
+% \PrintChanges
+% \PrintIndex
+% \clearpage
+% \StopEventually{
+% ^^A   \PrintChanges
+% ^^A   \PrintIndex
 % }
-%^^A \end{documentation}
-%^^A% Commented out to eliminate WARNING: Reference `doc/function//
-%^^A \begin{implementation}
+% \end{documentation}
+% \begin{implementation}
+%   \selectlanguage{english}
 %   \part{Implementation}\label{part:impl}
 %   
-%   \iffalse
-%<*package>   
-%   \fi
+%   \section{Opening}
 %    \begin{macrocode}
+%<*package>      
 %<@@=ccool>      
 \ExplSyntaxOn
 %    \end{macrocode}
-% \section{\texttt{aux}}
+% \section{\textsf{aux}}
 % \begin{macro}{\@@_aux_inner_set:n}
 %   \begin{arguments}
 %   \item \meta{code}
@@ -905,75 +1724,102 @@
 }
 %    \end{macrocode}
 % \end{macro}
-% \begin{macro}{\@@_aux_separ:nn}
+% \begin{macro}{\@@_aux_val:Nn}
 %   \begin{arguments}
-%   \item \meta{ int }
-%   \item \meta{ tokens }
+%   \item \meta{ seq }
+%   \item \meta{ tl var name }
 %   \end{arguments}
 %    \begin{macrocode}
-\cs_new:Nn \@@_aux_separ:nn
+\cs_new_protected:Nn \@@_aux_val:Nn
 {
-  \int_case:nnTF {#1}
-  {
-    {1}
-    { \prg_replicate:nn{ 3 }{#2} }
-    {2}
-    {
-      { \use_i:nn #2 }
-      { \use_ii:nn #2 }
-      { \use_i:nn #2 }
-    }
-    {3}{#2}
-  }
-  { \c_empty_tl }
-  {
-    \msg_error:nnnn { @@ }
-    { separ }
-    { \exp_not:N \_@@_aux_separ:nn }
-    {#2}
-  }
+  \seq_gclear_new:N \g@@_aux_val_seq
+  \@@_seq_from_prop:NNn \g@@_aux_val_seq #1 { \@@_prop_name:n{#2} } 
 }
-\cs_generate_variant:Nn \@@_aux_separ:nn { e }
 %    \end{macrocode}
 % \end{macro}
-% \begin{macro}{\@@_aux_separ:n}
-%   \begin{arguments}
-%   \item \meta{ tokens }
-%   \end{arguments}
+% \section{\textsf{lang}}
 %    \begin{macrocode}
-\cs_new:Nn \@@_aux_separ:n
+\prop_new:N \g@@_lang_and_prop
+%    \end{macrocode}
+% \begin{macro}{\@@_lang_and_update:n}
+%    \begin{macrocode}
+\cs_new_protected:Nn \@@_lang_and_update:n
 {
-  \@@_aux_separ:en{ \tl_count:n{#1} }{#1}
+  \erw_prop_keyval_parse:NNNn
+  \g@@_lang_and_prop
+  \erw_keyval_error:Nn
+  \prop_gput:Nnn
+  { #1 }
 }
+\cs_generate_variant:Nn \@@_lang_and_update:n { e }
 %    \end{macrocode}
 % \end{macro}
-% \begin{macro}{\@@_aux_val:Nn}
-%   \begin{arguments}
-%   \item \meta{ seq }
-%   \item \meta{ tl var name }
-%   \end{arguments}
+% \begin{macro}{\@@_lang_and:n, \@@_lang_and:}
 %    \begin{macrocode}
-\cs_new_protected:Nn \@@_aux_val:Nn
+\cs_new:Nn \@@_lang_and:n
 {
-  \seq_gclear_new:N \g@@_aux_val_seq
-  \@@_seq_from_prop:NNn \g@@_aux_val_seq #1 { \@@_prop_name:n{#2} } 
+  \prop_if_in:NnTF
+  \g@@_lang_and_prop
+  {#1}
+  {\prop_item:Nn\g@@_lang_and_prop{#1}}
+  {
+    \msg_warning:nnn{@@}{lang_and}{#1}
+    \@@_lang_and:n{english}
+  }
 }
+\ifcsdef{languagename}
+{
+  \cs_new:Nn \@@_lang_and:{\exp_args:No\@@_lang_and:n{\languagename}}
+}
+{
+  \cs_new:Nn \@@_lang_and:{english}
+}
 %    \end{macrocode}
 % \end{macro}
-% \section{\texttt{lambda}}
-% \begin{macro}{\@@_lambda:nn}\cite{a-188053}
+% \begin{variable}{\c@@_lang_and_tl}
+%\NB{todo}{Non latin-alphabet languages}
 %    \begin{macrocode}
-\cs_new_protected:Npn \@@_lambda:nn #1 #2 
+\tl_const:Nn \c@@_lang_and_tl
 {
-  \exp_args:NNx 
-  \DeclareDocumentCommand \@@_lambda_expression 
-  { \prg_replicate:nn { #1 } { m } }
-  {#2}
-  \@@_lambda_expression
+%^^A https://www.overleaf.com/learn/latex/International_language_support  
+  afrikaans=en,
+  basque=eta,
+  catalan=i,
+  croatian=i,
+  czech=a,
+  danish=og,
+  dutch=en,
+  english=and,
+  esperanto=kaj,
+  estonian=ja,
+  finnish=ja,
+  french=et,
+  galician=e,
+  german=und,
+  hungarian=\'es,
+  icelandic=og,
+  indonesian=dan,
+  irish=agus,
+  italian=e,
+  kurmanji=\^u,
+  latin=et,
+  latvian=un,
+  lithuanian=ir,
+  ngerman=und,
+  polish=i,
+  portuguese=e,
+  romanian=\c{s}i,
+  slovak=a,
+  spanish=y,
+  swedish=och,
+  swissgerman=und,
+  turkish=ve,
+  turkmen=we,
+  welsh=a
 }
 %    \end{macrocode}
-% \end{macro}
-% \section{\texttt{log}}
+% \end{variable}
+% \section{\textsf{log}}
 % \begin{macro}{\@@_log_close:}
 %    \begin{macrocode}
 \iow_new:N \g@@_log_iow
@@ -1033,7 +1879,7 @@
 \cs_generate_variant:Nn \@@_log_write:n { e }
 %    \end{macrocode}
 % \end{macro}
-% \section{\texttt{make_key}}
+% \section{\textsf{make_key}}
 % \begin{macro}{\@@_make_key:Nn}
 %   \begin{arguments}
 %   \item \meta{ token }
@@ -1043,8 +1889,8 @@
 \cs_new_protected:Nn \@@_make_key:Nn 
 {
   \exp_args:NNx
-  \ProvideDocumentCommand{#1} 
-  { D<>{\g@@_option_name_tl} }
+  \DeclareDocumentCommand{#1} 
+  { D<>{\g@@_option_param_tl} }
   {
     \@@_prop_item:nn{##1}{#2}
   }
@@ -1075,7 +1921,7 @@
 }
 %    \end{macrocode}
 % \end{macro}
-% \section{\texttt{make_ccool}}
+% \section{\textsf{make_ccool}}
 % \begin{macro}{\@@_make_ccool_exp:nnn}
 %    \begin{macrocode}
 \cs_new_protected:Nn \@@_make_ccool_exp:nnn
@@ -1085,7 +1931,7 @@
   \@@_aux_outer:n
   {
     \exp_args:NNf
-    \@@_seq_use:Nn
+    \erw_seq_use:Nn
     \g@@_aux_val_seq
     {#2}
   }
@@ -1118,7 +1964,7 @@
     \@@_log_write:n
     {
       \begingroup
-      \def \@@_log_entry { \Ccool<#1>i{#2}{#3} } \expandafter
+      \def \@@_log_entry { \Ccool<#1>c{#2}{#3} } \expandafter
       \endgroup \@@_log_entry      
     }
   }{\c_empty_tl}
@@ -1136,72 +1982,64 @@
 \cs_new_protected:Npn \@@_make_ccool:nnnn #1 #2 #3 #4
 { 
   \exp_args:NNx \DeclareDocumentCommand \Ccool
-  {%^^A      2    3         4 5  6    7 8              9
-    D<>{#1} +o E{ i }{{#2}} m t+ s E{ s o }{{#3}{#4}} +o
+  {%^^A      2         3    4 5  6           7   8    9
+    +o D<>{#1} E{ c }{{#2}} m t+ s E{ s c }{{#3}{#4}} +o
   }
   {
-    \IfValueT{##2}{##2}    
-    \@@_make_ccool_sideeffect:nnn{##1}{##3}{##4}    
+    \IfValueT{##1}{##1}    
+    \@@_make_ccool_sideeffect:nnn{##2}{##3}{##4}    
     \IfBooleanT{##6}
     {
-      \@@_make_ccool_exp:nnn{##1}{##7}{##8}
+      \@@_make_ccool_exp:nnn{##2}{##7}{##8}
     }
     \bool_if:nTF{##5}
     {
       \gappto{\CcoolHook}
       {
-        \@@_make_ccool_sideeffect:nnn{##1}{##3}{##4}
+        \@@_make_ccool_sideeffect:nnn{##2}{##3}{##4}
       }
     }
     {\c_empty_tl}
     \IfValueT{##9}
     {
-      \exp_not:n{ \Ccool<##1>[##9] }
+      \exp_not:n{ \Ccool[##9] }
     }
   }
 }
 %    \end{macrocode}
 % \end{macro}
-% \section{\texttt{msg}}
+% \section{\textsf{msg}}
 %    \begin{macrocode}
-\msg_new:nnn {@@}{ generic }{#1}
-\msg_new:nnn {@@}{ iow }{#1~is~closed~can't~write}
-\msg_new:nnn {@@}{ keyonly }{#1~does~not~take~values;~keyval~is~#2}
-\msg_new:nnn {@@}{ keywrong }{#1~does~not~recognize~key~#2}
-\msg_new:nnn {@@}{ separ }{#1~expects~1~to~3~items,~#2}
-\msg_new:nnn {@@}{ unset }{#1~unset}
+\msg_new:nnn {@@}
+{ iow }
+{#1~is~closed~can't~write}
+\msg_new:nnn {@@}
+{lang_and}
+{~key~#1~missing~for~global~option~'And';~falling~back~on~'english'}
 %    \end{macrocode}
-% \section{\texttt{option}}
-% \begin{macro}{\@@_aux_inner:n}
+% \section{\textsf{option}}
+% \begin{macro}{\@@_option_inner:n}
 %   \begin{arguments}
 %   \item \meta{code}
 %   \end{arguments}
 %    \begin{macrocode}
+\tl_new:N \g@@_option_inner_tl
 \cs_new_protected:Nn \@@_option_inner:n
 {
   \tl_gset:Nn \g@@_option_inner_tl {#1}
 }
-\@@_option_inner:n
-{
-  \msg_warning:nnn{ @@ }{ unset }{ \exp_not:N \g@@_option_inner_tl }
-}
 %    \end{macrocode}
 % \end{macro}
-% \begin{macro}{\@@_option_name:n}
+% \begin{macro}{\@@_option_param:n}
 %   \begin{arguments}
 %   \item \meta{token list}
 %   \end{arguments}
 %    \begin{macrocode}
-\cs_new:Nn \@@_option_name:n
+\tl_new:N \g@@_option_param_tl
+\cs_new_protected:Nn \@@_option_param:n
 {
-  \tl_gset:Nn \g@@_option_name_tl{#1}
+  \tl_gset:Nn \g@@_option_param_tl{#1}
 }
-\@@_option_name:n
-{  
-  \msg_error:nnx{ @@ }
-  { generic }
-  { \exp_not:N\g@@_option_name_tl~undefined }
-}
 %    \end{macrocode}
 % \end{macro}
 % \begin{macro}{\@@_option_outer:n}
@@ -1209,14 +2047,11 @@
 %   \item \meta{ inline code }
 %   \end{arguments}
 %    \begin{macrocode}
+\tl_new:N \g@@_option_outer_tl
 \cs_new_protected:Nn \@@_option_outer:n
 {
   \tl_gset:Nn \g@@_option_outer_tl {#1}
 }
-\@@_option_outer:n
-{
-  \msg_warning:nnn{ @@ }{ unset }{ \exp_not:N \g@@_option_outer_tl }
-}
 %    \end{macrocode}
 % \end{macro}
 % \begin{macro}{\@@_option_separ:n}
@@ -1224,17 +2059,35 @@
 %   \item \Arg{ tl_{1} }\Arg{ tl_{2} }\Arg{ tl_{3} }
 %   \end{arguments}
 %    \begin{macrocode}
+\tl_new:N \g@@_option_separ_tl
 \cs_new_protected:Nn \@@_option_separ:n
 {
   \cs_gset:Npn \g@@_option_separ_tl {#1}
 }
-\@@_option_separ:n
+%    \end{macrocode}
+% \end{macro}
+% \begin{variable}{\g@@_option_separ_tl}
+%    \begin{macrocode}
+\ifcsdef{text}
 {
-  \msg_warning:nnn{ @@ }{ unset }{ \exp_not:N \g@@_option_separ_tl }
+  \tl_const:Nn \c@@_option_separ_default_tl
+  {
+    { \text{{\ }\@@_lang_and:{\ }} }
+    { \text{,{\ }} }
+    { \text{,{\ }\@@_lang_and:{\ }} }
+  }
 }
+{
+  \tl_const:Nn \c@@_option_separ_default_tl
+  {
+    { {\ }\@@_lang_and:{\ } }
+    { ,{\ } }
+    { ,{\ }\@@_lang_and:{\ } }
+  }
+}
 %    \end{macrocode}
-% \end{macro}
-% \section{\texttt{prop}}
+% \end{variable}
+% \section{\textsf{prop}}
 % \begin{macro}{\@@_prop_append:NN}
 %   \begin{arguments}
 %   \item \meta{ prop_{1} }
@@ -1331,7 +2184,7 @@
 }
 %    \end{macrocode}
 % \end{macro}
-% \section{\texttt{seq}}
+% \section{\textsf{seq}}
 % \begin{macro}{\@@_seq_from_prop:NNn}
 %   \begin{arguments}
 %   \item \meta{ seq_{1} }
@@ -1349,151 +2202,58 @@
 }
 %    \end{macrocode}
 % \end{macro}
-% \begin{macro}{\@@_erw_seq_use:Nn}
-%    \begin{macrocode}
-%      \begin{arguments}
-%      \item \meta{ seq }
-%      \item \meta{ tokens }
-%      \end{arguments}
-\cs_new:Nn \@@_seq_use:Nn
-{
-  \exp_last_unbraced:NNf
-  \seq_use:Nnnn #1
-  \@@_aux_separ:n{#2}
-}
-%    \end{macrocode}
-% \end{macro}
-% \section{sys}\label{impl:sys}
-% \begin{macro}{\@@_sys_date:}
-%    \begin{macrocode}
-\cs_new:Nn \@@_sys_date:
-{
-  \int_eval:n
-  {
-    \c_sys_year_int * 10000
-    +\c_sys_month_int * 100
-    +\c_sys_day_int *  1
-  }
-}
-%    \end{macrocode}
-% \end{macro}
-% \begin{macro}{\@@_sys_date_hex:}
-%    \begin{macrocode}
-\cs_new:Nn \@@_sys_date_hex:
-{\int_to_hex:n{\@@_sys_date:}}
-%    \end{macrocode}
-% \end{macro}
-% \begin{macro}{\@@_sys_time:}
-%    \begin{macrocode}
-\cs_new:Nn \@@_sys_time:
-{
-  \int_eval:n
-  {
-    \c_sys_hour_int * 100 
-    +\c_sys_minute_int * 1 
-  }
-}
-%    \end{macrocode}
-% \end{macro}
-% \begin{macro}{\@@_sys_time_hex:}
-%    \begin{macrocode}
-\cs_new:Nn\@@_sys_time_hex:
-{\int_to_hex:n{\@@_sys_time:}}
-%    \end{macrocode}
-% \end{macro}
-% \begin{macro}{\@@_sys_filename:}
-%    \begin{macrocode}
-\cs_new:Nn\@@_sys_filename:
-{
-  \c_sys_jobname_str--
-  \@@_sys_date_hex:--
-  \@@_sys_time_hex:
-}
-%    \end{macrocode}
-% \end{macro}
 % \section{Front-end}\label{impl:frontend}
-% \leavevmode
-% \refstepcounter{section}
-% \label{usage:cs:clear}
-% \docsetnameref{\cs{CcoolClear}}
-% \addcontentsline{toc}{section}{\protect\numberline{\thesection}\cs{CcoolClear}}
-% \begin{function}{\CcoolClear}
-%   \begin{arguments}
-%   \item \meta{\docccepttl}
-%   \end{arguments}
-%   \begin{description}
-%   \item[Semantics] Clears any data created by \nameref{usage:cs:ccool}\Arg{\docccepttl}
-%   \end{description}
+% \DocPhantomSection*{subsection}{\cs{CcoolClear}}{impl:cs:clear}
+% \begin{macro}{\CcoolClear}
 %    \begin{macrocode}
 \NewDocumentCommand{ \CcoolClear }
-{ D<>{\g@@_option_name_tl} }
+{ D<>{\g@@_option_param_tl} }
 { 
   \@@_prop_clear_new_map:n{#1} 
 }
 %    \end{macrocode}
-% \end{function}
-% \leavevmode
-% \refstepcounter{section}
-% \docsetnameref{\cs{CcoolHook}}
-% \label{usage:cs:hook}
-% \addcontentsline{toc}{section}{\protect\numberline{\thesection}\cs{CcoolHook}}
-% \begin{variable}{\CcoolHook}
-%   \begin{description}
-%   \item[Example] |\AfterEndEnvironment{theorem}{\CcoolHook}|
-%   \end{description}
+% \end{macro}
+% \DocPhantomSection*{subsection}{\cs{CcoolHook}}{impl:cs:hook}
+% \begin{macro}{\CcoolHook}
 %    \begin{macrocode}
 \NewDocumentCommand{\CcoolHook}{}{\c_empty_tl}
 %    \end{macrocode}
-% \end{variable}
-% \docsetnameref{\cs{CcoolLambda}}
-% \label{usage:cs:lambda}
-% \addcontentsline{toc}{section}{\protect\numberline{\thesection}\cs{CcoolLambda}}
-% \begin{function}{\CcoolLambda}
-%   \begin{arguments}
-%   \item \meta{\doccceptint}
-%   \item \meta{\doccceptcode}
-%   \end{arguments}
-%   \begin{description}
-%   \item[Example] |\Ccool{ EvalAt = \CcoolLambda{(#1)} }|
-%   \item[Semantics] Creates a lambda expression with \meta{\doccceptint} arguments for \meta{\doccceptcode}
-%   \end{description}
+% \end{macro}
+% \DocPhantomSection*{subsection}{\cs{CcoolLambda}}{impl:cs:lambda}
+% \begin{macro}{\CcoolLambda}
+%   \NB{todo}{allow only m- or o-type arguments}
 %    \begin{macrocode}
-\ProvideDocumentCommand \CcoolLambda { O{1} m }
+\ProvideDocumentCommand \CcoolLambda { O{m} m }
 {
-  \@@_lambda:nn { #1 } { #2 }
+  \erw_lambda:nnn \DeclareDocumentCommand { #1 } { #2 }
 }
 %    \end{macrocode}
-% \end{function}
-% \leavevmode
-% \refstepcounter{subsection}
-% \docsetnameref{\cs{CcoolOption}}
-% \label{usage:cs:option}
-% \addcontentsline{toc}{section}{\protect\numberline{\thesection}\cs{CcoolOption}}
-% \begin{function}{\CcoolOption}
-%   \begin{arguments}
-%   \item \meta{\doccceptkvl}
-%   \end{arguments} 
+% \end{macro}
+% \DocPhantomSection*{subsection}{\cs{CcoolOption}}{impl:cs:option}
+% \begin{macro}{\CcoolOption}
+%   \NB{todo}{Fix placeholders passed to options requiring code (only one pound sign)}
+%   \NB{abandon}{Requirement: write to file if Write; Update: redundant with \cs{Ccool}+Write}
 %    \begin{macrocode}
 \NewDocumentCommand{ \CcoolOption }
-{ m }
+{ O{ And, Expans, File, Inner, Param, Outer, Separ, Write } }
 { 
-  \keys_set:nn{ @@ }{#1} 
+  \keys_set:nn{ @@ }{#1}
 }
 %    \end{macrocode}
-% \end{function}
+% \end{macro}
 %    \begin{macrocode}
 \keys_define:nn { @@ }
 {
 %    \end{macrocode}
-% \leavevmode
-% \refstepcounter{subsection}
-% \docsetnameref{\pkgoptex}
-% \label{usage:opt:ex}
-% \addcontentsline{toc}{subsection}{\protect\numberline{\thesubsection}\pkgoptex}
+% \DocPhantomSection*{subsubsection}{\pkgoptan}{impl:opt:an}
+% \DescribeOption{\pkgoptan}
+%    \begin{macrocode}
+And .code:n = { \@@_lang_and_update:e{ #1 } },
+And .default:n = { \c@@_lang_and_tl },
+And .initial:n = { \c@@_lang_and_tl },
+%    \end{macrocode}
+% \DocPhantomSection*{subsubsection}{\pkgoptex}{impl:opt:ex}
 % \DescribeOption{\pkgoptex}
-% \begin{description}
-% \item[Value] \texttt{eo\docpipe{}ee\docpipe{}ex\docpipe{}xo\docpipe{}xe\docpipe{}xx}
-% \end{description}
 %    \begin{macrocode}
 Expans .multichoices:nn = { eo, ee, ex, xo, xe, xx }
 { \tl_gset_eq:NN \g@@_option_expans_tl \l_keys_choice_tl },
@@ -1500,31 +2260,17 @@
 Expans .default:n = { xo },
 Expans .initial:n = { xo },
 %    \end{macrocode}
-% \leavevmode
-% \refstepcounter{subsubsection}
-% \docsetnameref{\pkgoptfi}
-% \label{usage:opt:fi}
-% \addcontentsline{toc}{subsection}{\protect\numberline{\thesubsection}\pkgoptfi}
+% \DocPhantomSection*{subsubsection}{\pkgoptfi}{impl:opt:fi}
 % \DescribeOption{\pkgoptfi}
-% \begin{description}
-% \item[Value] \meta{\doccceptpath}
-% \end{description}
 %    \begin{macrocode}
 File .code:n = {
   \tl_gset:Nx \g@@_log_file_tl{#1}  
 },
-File .default:n = { \@@_sys_filename: },
-File .initial:n = { \@@_sys_filename: },
+File .default:n = { \erw_sys_jobnametimestamp: },
+File .initial:n = { \erw_sys_jobnametimestamp: },
 %    \end{macrocode}
-% \leavevmode
-% \refstepcounter{subsubsection}
-% \docsetnameref{\pkgoptin}
-% \label{usage:opt:in}
-% \addcontentsline{toc}{subsection}{\protect\numberline{\thesubsection}\pkgoptin}
+% \DocPhantomSection*{subsubsection}{\pkgoptin}{impl:opt:in}
 % \DescribeOption{\pkgoptin}
-% \begin{description}
-% \item[Value] \meta{\doccceptcode}, with |####1| as the argument to be replaced
-% \end{description} 
 %    \begin{macrocode}
 Inner .code:n={
   \@@_option_inner:n{#1}
@@ -1531,7 +2277,7 @@
   \exp_last_unbraced:Nf 
   \@@_make_ccool:nnnn
   {
-    { \g@@_option_name_tl }
+    { \g@@_option_param_tl }
     { \g@@_option_inner_tl }
     { \g@@_option_separ_tl }
     { \g@@_option_outer_tl }
@@ -1541,40 +2287,26 @@
 Inner .default:n = {####1},
 Inner .initial:n = {####1},
 %    \end{macrocode}
-% \leavevmode
-% \refstepcounter{subsubsection}
-% \docsetnameref{\pkgoptna}
-% \label{usage:opt:na}
-% \addcontentsline{toc}{subsection}{\protect\numberline{\thesubsection}\pkgoptna}
-% \DescribeOption{\pkgoptna}
-% \begin{description}
-% \item[Value] \meta{\docccepttl}
-% \end{description} 
+% \DocPhantomSection*{subsubsection}{\pkgoptpa}{impl:opt:pa}
+% \DescribeOption{\pkgoptpa}
 %    \begin{macrocode}
-Name .code:n={
-  \@@_option_name:n{#1}
+Param .code:n={
+  \@@_option_param:n{#1}
   \exp_last_unbraced:Nf 
   \@@_make_ccool:nnnn
   {
-    { \g@@_option_name_tl }
+    { \g@@_option_param_tl }
     { \g@@_option_inner_tl }
     { \g@@_option_separ_tl }
     { \g@@_option_outer_tl }
   }
 },
-Name .value_required:n = false,
-Name .default:n = { Math },
-Name .initial:n = { Math },
+Param .value_required:n = false,
+Param .default:n = { Default },
+Param .initial:n = { Default },
 %    \end{macrocode}
-% \leavevmode
-% \refstepcounter{subsubsection}
-% \docsetnameref{\pkgoptou}
-% \label{usage:opt:ou}
-% \addcontentsline{toc}{subsection}{\protect\numberline{\thesubsection}\pkgoptou}
+% \DocPhantomSection*{subsubsection}{\pkgoptou}{impl:opt:ou}
 % \DescribeOption{\pkgoptou}
-% \begin{description}
-% \item[Value] \meta{\doccceptcode}, with |####1| as the argument to be replaced
-% \end{description}  
 %    \begin{macrocode}
 Outer .code:n={
   \@@_option_outer:n{#1}
@@ -1581,7 +2313,7 @@
   \exp_last_unbraced:Nf 
   \@@_make_ccool:nnnn
   {
-    { \g@@_option_name_tl }
+    { \g@@_option_param_tl }
     { \g@@_option_inner_tl }
     { \g@@_option_separ_tl }
     { \g@@_option_outer_tl }
@@ -1591,15 +2323,8 @@
 Outer .default:n = { \ensuremath{####1} },
 Outer .initial:n = { \ensuremath{####1} },
 %    \end{macrocode}
-% \leavevmode
-% \refstepcounter{subsubsection}
-% \docsetnameref{\pkgoptse}
-% \label{usage:opt:se}
-% \addcontentsline{toc}{subsection}{\protect\numberline{\thesubsection}\pkgoptse}
+% \DocPhantomSection*{subsubsection}{\pkgoptse}{impl:opt:se}
 % \DescribeOption{\pkgoptse}
-% \begin{description}
-% \item[Value] That of `separators' in \cite[Section 8 of \pkg{l3seq}]{interface3}
-% \end{description}  
 %    \begin{macrocode}
 Separ .code:n={
   \@@_option_separ:n{#1}
@@ -1606,7 +2331,7 @@
   \exp_last_unbraced:Nf 
   \@@_make_ccool:nnnn
   {
-    { \g@@_option_name_tl }
+    { \g@@_option_param_tl }
     { \g@@_option_inner_tl }
     { \g@@_option_separ_tl }
     { \g@@_option_outer_tl }
@@ -1613,18 +2338,11 @@
   }
 },
 Separ .value_required:n = false,
-Separ .default:n = { {\ }and{\ } } { ,{\ } } { ,{\ }and{\ } },
-Separ .initial:n = { {\ }and{\ } } { ,{\ } } { ,{\ }and{\ } },
+Separ .default:n = { \c@@_option_separ_default_tl },
+Separ .initial:n = { \c@@_option_separ_default_tl },
 %    \end{macrocode}
-% \leavevmode
-% \addtocounter{subsection}{1}
-% \docsetnameref{\pkgoptwr}
-% \label{usage:opt:wr}
-% \addcontentsline{toc}{subsection}{\protect\numberline{\thesubsection}\pkgoptwr}
+% \DocPhantomSection*{subsubsection}{\pkgoptwr}{impl:opt:wr}
 % \DescribeOption{\pkgoptwr}
-% \begin{description}
-% \item[Value] \meta{\doccceptbool}
-% \end{description}
 %    \begin{macrocode}
 Write .code:n = {
   \bool_if:nTF{#1}
@@ -1638,23 +2356,8 @@
 %    \begin{macrocode}
 }
 %    \end{macrocode}
-% \leavevmode
-% \refstepcounter{section}
-% \docsetnameref{\cs{CcoolRead}}
-% \label{usage:cs:read}
-% \addcontentsline{toc}{section}{\protect\numberline{\thesection}\cs{CcoolRead}}
-% \begin{function}{\CcoolRead}
-%   \begin{arguments}
-%   \item  \meta{\doccceptpath}
-%   \end{arguments} 
-%   \begin{description}
-%   \item[Semantics]\docfillblank
-%     \begin{enumerate}
-%     \item Reads the definitions in \meta{\doccceptpath}.
-%     \item Writes to \file{ccool.log}: `read from \meta{\doccceptpath}'
-%     \end{enumerate}
-%   \end{description}  
-% \end{function}
+% \DocPhantomSection*{subsection}{\cs{CcoolRead}}{impl:cs:read}
+% \begin{macro}{\CcoolRead}
 %    \begin{macrocode}
 \NewDocumentCommand{\CcoolRead}
 {o}
@@ -1664,29 +2367,23 @@
   {\@@_log_read:}
 }
 %    \end{macrocode}
-% \leavevmode
-% \refstepcounter{section}
-% \docsetnameref{\cs{CcoolVers}}
-% \label{usage:cs:vers}
-% \addcontentsline{toc}{section}{\protect\numberline{\thesection}\cs{CcoolVers}}
-% \begin{variable}{\CcoolVers}
-% \end{variable} 
-% \begin{description}
-% \item[Semantics] Expands to the package's version
-% \end{description}  
+% \end{macro}
+% \DocPhantomSection*{subsection}{\cs{CcoolVers}}{impl:cs:vers}
+% \begin{macro}{\CcoolVers}
 %    \begin{macrocode}
 \NewDocumentCommand{\CcoolVers}
 {}
 {\use:c{ver at ccool.sty}}
 %    \end{macrocode}
-% \section{Misc}
+% \end{macro} 
+% \section{Closing}
+% 
 %    \begin{macrocode}
 \ExplSyntaxOff
+%</package> 
 %    \end{macrocode}
-%^^A \end{implementation}
 % 
-% \iffalse
-%</package> 
-% \fi
+% \end{implementation}
+% 
 % \Finale
 \endinput
\ No newline at end of file

Deleted: trunk/Master/texmf-dist/source/latex/ccool/ccool.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/ccool/ccool.ins	2020-06-05 21:48:15 UTC (rev 55424)
+++ trunk/Master/texmf-dist/source/latex/ccool/ccool.ins	2020-06-05 21:48:38 UTC (rev 55425)
@@ -1,64 +0,0 @@
-%%
-%% This is file `ccool.ins',
-%% generated with the docstrip utility.
-%%
-%% The original source files were:
-%%
-%% ccool.dtx  (with options: `install')
-%% ----------------------------------------------------------------------------
-%% ccool --- A tool for encoding mathematical notation
-%% Released under the LaTeX Project Public License v1.3c or later
-%% See http://www.latex-project.org/lppl.txt
-%% ----------------------------------------------------------------------------
-%% 
-\input docstrip.tex
-\keepsilent
-\askforoverwritefalse
-\preamble
-----------------------------------------------------------------------------
-ccool --- A tool for encoding mathematical notation
-Released under the LaTeX Project Public License v1.3c or later
-See http://www.latex-project.org/lppl.txt
-----------------------------------------------------------------------------
-
-\endpreamble
-\postamble
-
-Copyright (C) 2020 by Erwann Rogard
-
-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
-Erwann Rogard.
-
-This work consists of the file ccool.dtx and the derived files:
-ccool.sty, and ccool.pdf.
-
-\endpostamble
-\generate{
-  \file{\jobname.sty}{\from{\jobname.dtx}{package}}
-}
- \endbatchfile
-%% 
-%% Copyright (C) 2020 by Erwann Rogard
-%% 
-%% 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
-%% Erwann Rogard.
-%% 
-%% This work consists of the file ccool.dtx and the derived files:
-%% ccool.sty, and ccool.pdf.
-%% 
-%%
-%% End of file `ccool.ins'.

Modified: trunk/Master/texmf-dist/tex/latex/ccool/ccool.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/ccool/ccool.sty	2020-06-05 21:48:15 UTC (rev 55424)
+++ trunk/Master/texmf-dist/tex/latex/ccool/ccool.sty	2020-06-05 21:48:38 UTC (rev 55425)
@@ -6,408 +6,412 @@
 %%
 %% ccool.dtx  (with options: `package')
 %% ----------------------------------------------------------------------------
-%% ccool --- A tool for encoding mathematical notation
+%% ccool --- A key-value document command parser
 %% Released under the LaTeX Project Public License v1.3c or later
 %% See http://www.latex-project.org/lppl.txt
 %% ----------------------------------------------------------------------------
 %% 
  \NeedsTeXFormat{LaTeX2e}[2020/02/02]
+ \RequirePackage{erw-l3}[2020/06/04]
  \RequirePackage{etoolbox}[2019/09/21]
  \RequirePackage{l3keys2e}[2020/03/06]
  \RequirePackage{xparse}[2020/03/06]
  \ProvidesExplPackage
- {ccool}                                                                                      % Package name
- {2020/04/15}                                                                                 % Release date
- {2.0}                                                                                        % Release version
- {cool --- A tool for encoding mathematical notation}                                         % Description
+ {ccool}                                                                            % Package name
+ {2020/06/04}                                                                       % Release date
+ {3.0}                                                                              % Release version
+ {cool --- A key-value document command parser}                                     % Description
 \ExplSyntaxOn
-\cs_new_protected:Nn \@@_aux_inner_set:n
+\cs_new_protected:Nn \__ccool_aux_inner_set:n
 {
-  \cs_gset:Npn \@@_aux_inner:n ##1 {#1}
-  \cs_generate_variant:Nn \@@_aux_inner:n { e }
+  \cs_gset:Npn \__ccool_aux_inner:n ##1 {#1}
+  \cs_generate_variant:Nn \__ccool_aux_inner:n { e }
 }
-\cs_new_protected:Npn \@@_aux_key:w #1 = #2 \q_stop
+\cs_new_protected:Npn \__ccool_aux_key:w #1 = #2 \q_stop
 {
-  \seq_gput_right:Nx \g@@_aux_key_seq { \tl_trim_spaces:n{#1} }
+  \seq_gput_right:Nx \g__ccool_aux_key_seq { \tl_trim_spaces:n{#1} }
 }
-\cs_new_protected:Nn \@@_aux_key:n
+\cs_new_protected:Nn \__ccool_aux_key:n
 {
-  \@@_aux_key:w #1 \q_stop
+  \__ccool_aux_key:w #1 \q_stop
 }
-\cs_new_protected:Nn \@@_aux_key:N
+\cs_new_protected:Nn \__ccool_aux_key:N
 {
-  \seq_gclear_new:N \g@@_aux_key_seq
-  \seq_map_function:NN #1 \@@_aux_key:n
+  \seq_gclear_new:N \g__ccool_aux_key_seq
+  \seq_map_function:NN #1 \__ccool_aux_key:n
 }
-\cs_new_protected:Nn \@@_aux_outer_set:n
+\cs_new_protected:Nn \__ccool_aux_outer_set:n
 {
-  \cs_gset:Npn \@@_aux_outer:n ##1 {#1}
+  \cs_gset:Npn \__ccool_aux_outer:n ##1 {#1}
 }
-\prop_new:N \g@@_aux_prop
-\cs_new_protected:Nn \@@_aux_prop:nn
+\prop_new:N \g__ccool_aux_prop
+\cs_new_protected:Nn \__ccool_aux_prop:nn
 {
-  \prop_gput:Nnn \g@@_aux_prop{#1}{#2}
+  \prop_gput:Nnn \g__ccool_aux_prop{#1}{#2}
 }
-\cs_generate_variant:Nn \@@_aux_prop:nn { eo, ee, ex, xo, xe, xx }
-\tl_new:N \g@@_option_expans_tl
-\cs_new_protected:Npn \@@_aux_prop:w #1 = #2 \q_stop
+\cs_generate_variant:Nn \__ccool_aux_prop:nn { eo, ee, ex, xo, xe, xx }
+\tl_new:N \g__ccool_option_expans_tl
+\cs_new_protected:Npn \__ccool_aux_prop:w #1 = #2 \q_stop
 {
   \exp_args:Nx
-  \use:c{@@_aux_prop:\g@@_option_expans_tl}
+  \use:c{__ccool_aux_prop:\g__ccool_option_expans_tl}
   { \tl_trim_spaces:n{#1} }
-  { \@@_aux_inner:n{ \tl_trim_spaces:n{#2} } }
+  { \__ccool_aux_inner:n{ \tl_trim_spaces:n{#2} } }
 }
-\cs_new_protected:Nn \@@_aux_prop:n
+\cs_new_protected:Nn \__ccool_aux_prop:n
 {
-  \@@_aux_prop:w #1 \q_stop
+  \__ccool_aux_prop:w #1 \q_stop
 }
-\cs_new_protected:Nn \@@_aux_prop:N
+\cs_new_protected:Nn \__ccool_aux_prop:N
 {
-  \prop_gclear_new:N \g@@_aux_prop
+  \prop_gclear_new:N \g__ccool_aux_prop
   \seq_if_empty:NTF #1
   { \c_empty_tl }
   {
-    \seq_map_function:NN #1 \@@_aux_prop:n
+    \seq_map_function:NN #1 \__ccool_aux_prop:n
   }
 }
-\cs_new:Nn \@@_aux_separ:nn
+\cs_new_protected:Nn \__ccool_aux_val:Nn
 {
-  \int_case:nnTF {#1}
+  \seq_gclear_new:N \g__ccool_aux_val_seq
+  \__ccool_seq_from_prop:NNn \g__ccool_aux_val_seq #1 { \__ccool_prop_name:n{#2} }
+}
+\prop_new:N \g__ccool_lang_and_prop
+\cs_new_protected:Nn \__ccool_lang_and_update:n
+{
+  \erw_prop_keyval_parse:NNNn
+  \g__ccool_lang_and_prop
+  \erw_keyval_error:Nn
+  \prop_gput:Nnn
+  { #1 }
+}
+\cs_generate_variant:Nn \__ccool_lang_and_update:n { e }
+\cs_new:Nn \__ccool_lang_and:n
+{
+  \prop_if_in:NnTF
+  \g__ccool_lang_and_prop
+  {#1}
+  {\prop_item:Nn\g__ccool_lang_and_prop{#1}}
   {
-    {1}
-    { \prg_replicate:nn{ 3 }{#2} }
-    {2}
-    {
-      { \use_i:nn #2 }
-      { \use_ii:nn #2 }
-      { \use_i:nn #2 }
-    }
-    {3}{#2}
+    \msg_warning:nnn{__ccool}{lang_and}{#1}
+    \__ccool_lang_and:n{english}
   }
-  { \c_empty_tl }
-  {
-    \msg_error:nnnn { @@ }
-    { separ }
-    { \exp_not:N \_@@_aux_separ:nn }
-    {#2}
-  }
 }
-\cs_generate_variant:Nn \@@_aux_separ:nn { e }
-\cs_new:Nn \@@_aux_separ:n
+\ifcsdef{languagename}
 {
-  \@@_aux_separ:en{ \tl_count:n{#1} }{#1}
+  \cs_new:Nn \__ccool_lang_and:{\exp_args:No\__ccool_lang_and:n{\languagename}}
 }
-\cs_new_protected:Nn \@@_aux_val:Nn
 {
-  \seq_gclear_new:N \g@@_aux_val_seq
-  \@@_seq_from_prop:NNn \g@@_aux_val_seq #1 { \@@_prop_name:n{#2} }
+  \cs_new:Nn \__ccool_lang_and:{english}
 }
-\cs_new_protected:Npn \@@_lambda:nn #1 #2
+\tl_const:Nn \c__ccool_lang_and_tl
 {
-  \exp_args:NNx
-  \DeclareDocumentCommand \@@_lambda_expression
-  { \prg_replicate:nn { #1 } { m } }
-  {#2}
-  \@@_lambda_expression
+  afrikaans=en,
+  basque=eta,
+  catalan=i,
+  croatian=i,
+  czech=a,
+  danish=og,
+  dutch=en,
+  english=and,
+  esperanto=kaj,
+  estonian=ja,
+  finnish=ja,
+  french=et,
+  galician=e,
+  german=und,
+  hungarian=\'es,
+  icelandic=og,
+  indonesian=dan,
+  irish=agus,
+  italian=e,
+  kurmanji=\^u,
+  latin=et,
+  latvian=un,
+  lithuanian=ir,
+  ngerman=und,
+  polish=i,
+  portuguese=e,
+  romanian=\c{s}i,
+  slovak=a,
+  spanish=y,
+  swedish=och,
+  swissgerman=und,
+  turkish=ve,
+  turkmen=we,
+  welsh=a
 }
-\iow_new:N \g@@_log_iow
-\AtEndDocument{\iow_close:N \g@@_log_iow}
-\bool_set_false:N \g@@_log_open_bool
-\cs_new_protected:Nn \@@_log_close:
+\iow_new:N \g__ccool_log_iow
+\AtEndDocument{\iow_close:N \g__ccool_log_iow}
+\bool_set_false:N \g__ccool_log_open_bool
+\cs_new_protected:Nn \__ccool_log_close:
 {
-  \iow_close:N \g@@_log_iow
-  \bool_gset_false:N \g@@_log_open_bool
+  \iow_close:N \g__ccool_log_iow
+  \bool_gset_false:N \g__ccool_log_open_bool
 }
-\tl_new:N \g@@_log_file_tl
-\cs_new_protected:Nn \@@_log_open:
+\tl_new:N \g__ccool_log_file_tl
+\cs_new_protected:Nn \__ccool_log_open:
 {
-  \tl_gset:Nx \g@@_log_to_tl{\g@@_log_file_tl}
-  \iow_open:Nn \g@@_log_iow {\g@@_log_to_tl}
-  \bool_gset_true:N \g@@_log_open_bool
+  \tl_gset:Nx \g__ccool_log_to_tl{\g__ccool_log_file_tl}
+  \iow_open:Nn \g__ccool_log_iow {\g__ccool_log_to_tl}
+  \bool_gset_true:N \g__ccool_log_open_bool
 }
-\cs_new_protected:Nn \@@_log_read:n
+\cs_new_protected:Nn \__ccool_log_read:n
 {
   \file_input:n{#1}
   \tl_log:n{read~from~#1}
 }
-\cs_generate_variant:Nn \@@_log_read:n { e }
-\cs_new_protected:Nn \@@_log_read:
+\cs_generate_variant:Nn \__ccool_log_read:n { e }
+\cs_new_protected:Nn \__ccool_log_read:
 {
-  \@@_log_read:e{\g@@_log_to_tl}
+  \__ccool_log_read:e{\g__ccool_log_to_tl}
 }
-\tl_new:N \g@@_log_to_tl
-\cs_new_protected:Nn \@@_log_write:n
+\tl_new:N \g__ccool_log_to_tl
+\cs_new_protected:Nn \__ccool_log_write:n
 {
-  \bool_if:nTF{ \g@@_log_open_bool }
+  \bool_if:nTF{ \g__ccool_log_open_bool }
   {
-    \iow_now:Nn \g@@_log_iow {#1}
+    \iow_now:Nn \g__ccool_log_iow {#1}
     \tl_log:n{ write~to~#1 }
   }
-  { \msg_error:nnn{ @@ }{ iow }{ \g@@_log_iow }  }
+  { \msg_error:nnn{ __ccool }{ iow }{ \g__ccool_log_iow }  }
 }
-\cs_generate_variant:Nn \@@_log_write:n { e }
-\cs_new_protected:Nn \@@_make_key:Nn
+\cs_generate_variant:Nn \__ccool_log_write:n { e }
+\cs_new_protected:Nn \__ccool_make_key:Nn
 {
   \exp_args:NNx
-  \ProvideDocumentCommand{#1}
-  { D<>{\g@@_option_name_tl} }
+  \DeclareDocumentCommand{#1}
+  { D<>{\g__ccool_option_param_tl} }
   {
-    \@@_prop_item:nn{##1}{#2}
+    \__ccool_prop_item:nn{##1}{#2}
   }
 }
-\cs_generate_variant:Nn \@@_make_key:Nn {c}
-\cs_new_protected:Nn \@@_make_key:n
+\cs_generate_variant:Nn \__ccool_make_key:Nn {c}
+\cs_new_protected:Nn \__ccool_make_key:n
 {
-  \@@_make_key:cn{#1}{#1}
+  \__ccool_make_key:cn{#1}{#1}
 }
-\cs_generate_variant:Nn \@@_make_key:n { e }
-\cs_new_protected:Nn \@@_make_key:N
+\cs_generate_variant:Nn \__ccool_make_key:n { e }
+\cs_new_protected:Nn \__ccool_make_key:N
 {
-  \seq_map_function:NN #1 \@@_make_key:e
+  \seq_map_function:NN #1 \__ccool_make_key:e
 }
-\cs_new_protected:Nn \@@_make_ccool_exp:nnn
+\cs_new_protected:Nn \__ccool_make_ccool_exp:nnn
 {
-  \@@_aux_val:Nn \g@@_aux_key_seq {#1}
-  \@@_aux_outer_set:n{#3}
-  \@@_aux_outer:n
+  \__ccool_aux_val:Nn \g__ccool_aux_key_seq {#1}
+  \__ccool_aux_outer_set:n{#3}
+  \__ccool_aux_outer:n
   {
     \exp_args:NNf
-    \@@_seq_use:Nn
-    \g@@_aux_val_seq
+    \erw_seq_use:Nn
+    \g__ccool_aux_val_seq
     {#2}
   }
 }
-\cs_new_protected:Nn \@@_make_ccool_key:nnn
+\cs_new_protected:Nn \__ccool_make_ccool_key:nnn
 {
-  \@@_prop_if_exist:nTF{#1}
+  \__ccool_prop_if_exist:nTF{#1}
   { \c_empty_tl }
-  { \@@_prop_new:n{#1} }
-  \exp_args:No \@@_aux_inner_set:n{#2}
-  \seq_set_from_clist:Nn \g@@_aux_keyval_seq {#3}
-  \@@_aux_prop:N \g@@_aux_keyval_seq
-  \@@_prop_append:Nn \g@@_aux_prop {#1}
-  \@@_aux_key:N \g@@_aux_keyval_seq
-  \@@_make_key:N \g@@_aux_key_seq
+  { \__ccool_prop_new:n{#1} }
+  \exp_args:No \__ccool_aux_inner_set:n{#2}
+  \seq_set_from_clist:Nn \g__ccool_aux_keyval_seq {#3}
+  \__ccool_aux_prop:N \g__ccool_aux_keyval_seq
+  \__ccool_prop_append:Nn \g__ccool_aux_prop {#1}
+  \__ccool_aux_key:N \g__ccool_aux_keyval_seq
+  \__ccool_make_key:N \g__ccool_aux_key_seq
 }
-\cs_new_protected:Nn \@@_make_ccool_sideeffect:nnn
+\cs_new_protected:Nn \__ccool_make_ccool_sideeffect:nnn
 {
-  \@@_make_ccool_key:nnn{#1}{#2}{#3}
-  \bool_if:nTF{ \g@@_log_open_bool }
+  \__ccool_make_ccool_key:nnn{#1}{#2}{#3}
+  \bool_if:nTF{ \g__ccool_log_open_bool }
   {
-    \@@_log_write:n
+    \__ccool_log_write:n
     {
       \begingroup
-      \def \@@_log_entry { \Ccool<#1>i{#2}{#3} } \expandafter
-      \endgroup \@@_log_entry
+      \def \__ccool_log_entry { \Ccool<#1>c{#2}{#3} } \expandafter
+      \endgroup \__ccool_log_entry
     }
   }{\c_empty_tl}
 }
-\cs_new_protected:Npn \@@_make_ccool:nnnn #1 #2 #3 #4
+\cs_new_protected:Npn \__ccool_make_ccool:nnnn #1 #2 #3 #4
 {
   \exp_args:NNx \DeclareDocumentCommand \Ccool
-  {%^^A      2    3         4 5  6    7 8              9
-    D<>{#1} +o E{ i }{{#2}} m t+ s E{ s o }{{#3}{#4}} +o
+  {%^^A      2         3    4 5  6           7   8    9
+    +o D<>{#1} E{ c }{{#2}} m t+ s E{ s c }{{#3}{#4}} +o
   }
   {
-    \IfValueT{##2}{##2}
-    \@@_make_ccool_sideeffect:nnn{##1}{##3}{##4}
+    \IfValueT{##1}{##1}
+    \__ccool_make_ccool_sideeffect:nnn{##2}{##3}{##4}
     \IfBooleanT{##6}
     {
-      \@@_make_ccool_exp:nnn{##1}{##7}{##8}
+      \__ccool_make_ccool_exp:nnn{##2}{##7}{##8}
     }
     \bool_if:nTF{##5}
     {
       \gappto{\CcoolHook}
       {
-        \@@_make_ccool_sideeffect:nnn{##1}{##3}{##4}
+        \__ccool_make_ccool_sideeffect:nnn{##2}{##3}{##4}
       }
     }
     {\c_empty_tl}
     \IfValueT{##9}
     {
-      \exp_not:n{ \Ccool<##1>[##9] }
+      \exp_not:n{ \Ccool[##9] }
     }
   }
 }
-\msg_new:nnn {@@}{ generic }{#1}
-\msg_new:nnn {@@}{ iow }{#1~is~closed~can't~write}
-\msg_new:nnn {@@}{ keyonly }{#1~does~not~take~values;~keyval~is~#2}
-\msg_new:nnn {@@}{ keywrong }{#1~does~not~recognize~key~#2}
-\msg_new:nnn {@@}{ separ }{#1~expects~1~to~3~items,~#2}
-\msg_new:nnn {@@}{ unset }{#1~unset}
-\cs_new_protected:Nn \@@_option_inner:n
+\msg_new:nnn {__ccool}
+{ iow }
+{#1~is~closed~can't~write}
+\msg_new:nnn {__ccool}
+{lang_and}
+{~key~#1~missing~for~global~option~'And';~falling~back~on~'english'}
+\tl_new:N \g__ccool_option_inner_tl
+\cs_new_protected:Nn \__ccool_option_inner:n
 {
-  \tl_gset:Nn \g@@_option_inner_tl {#1}
+  \tl_gset:Nn \g__ccool_option_inner_tl {#1}
 }
-\@@_option_inner:n
+\tl_new:N \g__ccool_option_param_tl
+\cs_new_protected:Nn \__ccool_option_param:n
 {
-  \msg_warning:nnn{ @@ }{ unset }{ \exp_not:N \g@@_option_inner_tl }
+  \tl_gset:Nn \g__ccool_option_param_tl{#1}
 }
-\cs_new:Nn \@@_option_name:n
+\tl_new:N \g__ccool_option_outer_tl
+\cs_new_protected:Nn \__ccool_option_outer:n
 {
-  \tl_gset:Nn \g@@_option_name_tl{#1}
+  \tl_gset:Nn \g__ccool_option_outer_tl {#1}
 }
-\@@_option_name:n
+\tl_new:N \g__ccool_option_separ_tl
+\cs_new_protected:Nn \__ccool_option_separ:n
 {
-  \msg_error:nnx{ @@ }
-  { generic }
-  { \exp_not:N\g@@_option_name_tl~undefined }
+  \cs_gset:Npn \g__ccool_option_separ_tl {#1}
 }
-\cs_new_protected:Nn \@@_option_outer:n
+\ifcsdef{text}
 {
-  \tl_gset:Nn \g@@_option_outer_tl {#1}
+  \tl_const:Nn \c__ccool_option_separ_default_tl
+  {
+    { \text{{\ }\__ccool_lang_and:{\ }} }
+    { \text{,{\ }} }
+    { \text{,{\ }\__ccool_lang_and:{\ }} }
+  }
 }
-\@@_option_outer:n
 {
-  \msg_warning:nnn{ @@ }{ unset }{ \exp_not:N \g@@_option_outer_tl }
+  \tl_const:Nn \c__ccool_option_separ_default_tl
+  {
+    { {\ }\__ccool_lang_and:{\ } }
+    { ,{\ } }
+    { ,{\ }\__ccool_lang_and:{\ } }
+  }
 }
-\cs_new_protected:Nn \@@_option_separ:n
+\cs_new_protected:Npn \__ccool_prop_append:NN #1 #2
 {
-  \cs_gset:Npn \g@@_option_separ_tl {#1}
-}
-\@@_option_separ:n
-{
-  \msg_warning:nnn{ @@ }{ unset }{ \exp_not:N \g@@_option_separ_tl }
-}
-\cs_new_protected:Npn \@@_prop_append:NN #1 #2
-{
-  \cs_set:Nn \@@_prop_append:nn
+  \cs_set:Nn \__ccool_prop_append:nn
   {
     \prop_gput:Nnx #1 {##1}{ \prop_item:Nn #2{##1} }
   }
-  \prop_map_function:NN #2 \@@_prop_append:nn
+  \prop_map_function:NN #2 \__ccool_prop_append:nn
 }
-\cs_generate_variant:Nn \@@_prop_append:NN { cN }
-\cs_new_protected:Nn \@@_prop_append:Nn
+\cs_generate_variant:Nn \__ccool_prop_append:NN { cN }
+\cs_new_protected:Nn \__ccool_prop_append:Nn
 {
-  \@@_prop_append:cN{ \@@_prop_name:n {#2} } #1
+  \__ccool_prop_append:cN{ \__ccool_prop_name:n {#2} } #1
 }
-\cs_new_protected:Nn \@@_prop_clear_new:n
+\cs_new_protected:Nn \__ccool_prop_clear_new:n
 {
-  \exp_args:No \prop_clear_new:c{ \@@_prop_name:n {#1} }
+  \exp_args:No \prop_clear_new:c{ \__ccool_prop_name:n {#1} }
 }
-\cs_new_protected:Nn \@@_prop_clear_new_map:n
+\cs_new_protected:Nn \__ccool_prop_clear_new_map:n
 {
-  \seq_set_from_clist:Nn \g@@_aux_key_seq {#1}
-  \seq_map_function:NN \g@@_aux_key_seq \@@_prop_clear_new:n
+  \seq_set_from_clist:Nn \g__ccool_aux_key_seq {#1}
+  \seq_map_function:NN \g__ccool_aux_key_seq \__ccool_prop_clear_new:n
 }
-\cs_new:Nn \@@_prop_if_exist:nTF
+\cs_new:Nn \__ccool_prop_if_exist:nTF
 {
-  \prop_if_exist:cTF{ \@@_prop_name:n {#1} }{#2}{#3}
+  \prop_if_exist:cTF{ \__ccool_prop_name:n {#1} }{#2}{#3}
 }
-\cs_new:Nn \@@_prop_item:nn
+\cs_new:Nn \__ccool_prop_item:nn
 {
-  \prop_item:cn { \@@_prop_name:n {#1} } {#2}
+  \prop_item:cn { \__ccool_prop_name:n {#1} } {#2}
 }
-\cs_new:Npn \@@_prop_name:n #1{ @@_#1 }
-\cs_new_protected:Nn \@@_prop_new:n
+\cs_new:Npn \__ccool_prop_name:n #1{ __ccool_#1 }
+\cs_new_protected:Nn \__ccool_prop_new:n
 {
-  \prop_new:c{ \@@_prop_name:n {#1} }
+  \prop_new:c{ \__ccool_prop_name:n {#1} }
 }
-\cs_new_protected:Nn \@@_seq_from_prop:NNn
+\cs_new_protected:Nn \__ccool_seq_from_prop:NNn
 {
-  \cs_set_protected:Nn \@@_seq_from_prop:n
+  \cs_set_protected:Nn \__ccool_seq_from_prop:n
   {
     \seq_gput_right:No #1 { \prop_item:cn{#3}{##1} }
   }
-  \seq_map_function:NN #2 \@@_seq_from_prop:n
+  \seq_map_function:NN #2 \__ccool_seq_from_prop:n
 }
-\cs_new:Nn \@@_seq_use:Nn
-{
-  \exp_last_unbraced:NNf
-  \seq_use:Nnnn #1
-  \@@_aux_separ:n{#2}
-}
-\cs_new:Nn \@@_sys_date:
-{
-  \int_eval:n
-  {
-    \c_sys_year_int * 10000
-    +\c_sys_month_int * 100
-    +\c_sys_day_int *  1
-  }
-}
-\cs_new:Nn \@@_sys_date_hex:
-{\int_to_hex:n{\@@_sys_date:}}
-\cs_new:Nn \@@_sys_time:
-{
-  \int_eval:n
-  {
-    \c_sys_hour_int * 100
-    +\c_sys_minute_int * 1
-  }
-}
-\cs_new:Nn\@@_sys_time_hex:
-{\int_to_hex:n{\@@_sys_time:}}
-\cs_new:Nn\@@_sys_filename:
-{
-  \c_sys_jobname_str--
-  \@@_sys_date_hex:--
-  \@@_sys_time_hex:
-}
 \NewDocumentCommand{ \CcoolClear }
-{ D<>{\g@@_option_name_tl} }
+{ D<>{\g__ccool_option_param_tl} }
 {
-  \@@_prop_clear_new_map:n{#1}
+  \__ccool_prop_clear_new_map:n{#1}
 }
 \NewDocumentCommand{\CcoolHook}{}{\c_empty_tl}
-\ProvideDocumentCommand \CcoolLambda { O{1} m }
+\ProvideDocumentCommand \CcoolLambda { O{m} m }
 {
-  \@@_lambda:nn { #1 } { #2 }
+  \erw_lambda:nnn \DeclareDocumentCommand { #1 } { #2 }
 }
 \NewDocumentCommand{ \CcoolOption }
-{ m }
+{ O{ And, Expans, File, Inner, Param, Outer, Separ, Write } }
 {
-  \keys_set:nn{ @@ }{#1}
+  \keys_set:nn{ __ccool }{#1}
 }
-\keys_define:nn { @@ }
+\keys_define:nn { __ccool }
 {
+And .code:n = { \__ccool_lang_and_update:e{ #1 } },
+And .default:n = { \c__ccool_lang_and_tl },
+And .initial:n = { \c__ccool_lang_and_tl },
 Expans .multichoices:nn = { eo, ee, ex, xo, xe, xx }
-{ \tl_gset_eq:NN \g@@_option_expans_tl \l_keys_choice_tl },
+{ \tl_gset_eq:NN \g__ccool_option_expans_tl \l_keys_choice_tl },
 Expans .default:n = { xo },
 Expans .initial:n = { xo },
 File .code:n = {
-  \tl_gset:Nx \g@@_log_file_tl{#1}
+  \tl_gset:Nx \g__ccool_log_file_tl{#1}
 },
-File .default:n = { \@@_sys_filename: },
-File .initial:n = { \@@_sys_filename: },
+File .default:n = { \erw_sys_jobnametimestamp: },
+File .initial:n = { \erw_sys_jobnametimestamp: },
 Inner .code:n={
-  \@@_option_inner:n{#1}
+  \__ccool_option_inner:n{#1}
   \exp_last_unbraced:Nf
-  \@@_make_ccool:nnnn
+  \__ccool_make_ccool:nnnn
   {
-    { \g@@_option_name_tl }
-    { \g@@_option_inner_tl }
-    { \g@@_option_separ_tl }
-    { \g@@_option_outer_tl }
+    { \g__ccool_option_param_tl }
+    { \g__ccool_option_inner_tl }
+    { \g__ccool_option_separ_tl }
+    { \g__ccool_option_outer_tl }
   }
 },
 Inner .value_required:n = false,
 Inner .default:n = {####1},
 Inner .initial:n = {####1},
-Name .code:n={
-  \@@_option_name:n{#1}
+Param .code:n={
+  \__ccool_option_param:n{#1}
   \exp_last_unbraced:Nf
-  \@@_make_ccool:nnnn
+  \__ccool_make_ccool:nnnn
   {
-    { \g@@_option_name_tl }
-    { \g@@_option_inner_tl }
-    { \g@@_option_separ_tl }
-    { \g@@_option_outer_tl }
+    { \g__ccool_option_param_tl }
+    { \g__ccool_option_inner_tl }
+    { \g__ccool_option_separ_tl }
+    { \g__ccool_option_outer_tl }
   }
 },
-Name .value_required:n = false,
-Name .default:n = { Math },
-Name .initial:n = { Math },
+Param .value_required:n = false,
+Param .default:n = { Default },
+Param .initial:n = { Default },
 Outer .code:n={
-  \@@_option_outer:n{#1}
+  \__ccool_option_outer:n{#1}
   \exp_last_unbraced:Nf
-  \@@_make_ccool:nnnn
+  \__ccool_make_ccool:nnnn
   {
-    { \g@@_option_name_tl }
-    { \g@@_option_inner_tl }
-    { \g@@_option_separ_tl }
-    { \g@@_option_outer_tl }
+    { \g__ccool_option_param_tl }
+    { \g__ccool_option_inner_tl }
+    { \g__ccool_option_separ_tl }
+    { \g__ccool_option_outer_tl }
   }
 },
 Outer .value_required:n = false,
@@ -414,23 +418,23 @@
 Outer .default:n = { \ensuremath{####1} },
 Outer .initial:n = { \ensuremath{####1} },
 Separ .code:n={
-  \@@_option_separ:n{#1}
+  \__ccool_option_separ:n{#1}
   \exp_last_unbraced:Nf
-  \@@_make_ccool:nnnn
+  \__ccool_make_ccool:nnnn
   {
-    { \g@@_option_name_tl }
-    { \g@@_option_inner_tl }
-    { \g@@_option_separ_tl }
-    { \g@@_option_outer_tl }
+    { \g__ccool_option_param_tl }
+    { \g__ccool_option_inner_tl }
+    { \g__ccool_option_separ_tl }
+    { \g__ccool_option_outer_tl }
   }
 },
 Separ .value_required:n = false,
-Separ .default:n = { {\ }and{\ } } { ,{\ } } { ,{\ }and{\ } },
-Separ .initial:n = { {\ }and{\ } } { ,{\ } } { ,{\ }and{\ } },
+Separ .default:n = { \c__ccool_option_separ_default_tl },
+Separ .initial:n = { \c__ccool_option_separ_default_tl },
 Write .code:n = {
   \bool_if:nTF{#1}
-  {\@@_log_open:}
-  {\@@_log_close:}
+  {\__ccool_log_open:}
+  {\__ccool_log_close:}
 },
 Write .value_required:n = false,
 Write .default:n = \BooleanFalse,
@@ -440,8 +444,8 @@
 {o}
 {
   \IfValueTF{#1}
-  {\@@_log_read:e{#1}}
-  {\@@_log_read:}
+  {\__ccool_log_read:e{#1}}
+  {\__ccool_log_read:}
 }
 \NewDocumentCommand{\CcoolVers}
 {}



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