texlive[54753] Master: ccool (15apr20)

commits+karl at tug.org commits+karl at tug.org
Wed Apr 15 23:34:27 CEST 2020


Revision: 54753
          http://tug.org/svn/texlive?view=revision&revision=54753
Author:   karl
Date:     2020-04-15 23:34:27 +0200 (Wed, 15 Apr 2020)
Log Message:
-----------
ccool (15apr20)

Modified Paths:
--------------
    trunk/Master/tlpkg/bin/tlpkg-ctan-check
    trunk/Master/tlpkg/tlpsrc/collection-mathscience.tlpsrc

Added Paths:
-----------
    trunk/Master/texmf-dist/doc/latex/ccool/
    trunk/Master/texmf-dist/doc/latex/ccool/README.md
    trunk/Master/texmf-dist/doc/latex/ccool/ccool--1343bdf--91e.tex
    trunk/Master/texmf-dist/doc/latex/ccool/ccool.pdf
    trunk/Master/texmf-dist/source/latex/ccool/
    trunk/Master/texmf-dist/source/latex/ccool/ccool.dtx
    trunk/Master/texmf-dist/source/latex/ccool/ccool.ins
    trunk/Master/texmf-dist/tex/latex/ccool/
    trunk/Master/texmf-dist/tex/latex/ccool/ccool.sty
    trunk/Master/tlpkg/tlpsrc/ccool.tlpsrc

Added: trunk/Master/texmf-dist/doc/latex/ccool/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/ccool/README.md	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/ccool/README.md	2020-04-15 21:34:27 UTC (rev 54753)
@@ -0,0 +1,7 @@
+----------------------------------------------------------------
+##### ccool --- A tool for encoding mathematical notation
+- 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
+----------------------------------------------------------------
+


Property changes on: trunk/Master/texmf-dist/doc/latex/ccool/README.md
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/ccool/ccool--1343bdf--91e.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/ccool/ccool--1343bdf--91e.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/ccool/ccool--1343bdf--91e.tex	2020-04-15 21:34:27 UTC (rev 54753)
@@ -0,0 +1,12 @@
+\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 


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

Index: trunk/Master/texmf-dist/doc/latex/ccool/ccool.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/latex/ccool/ccool.pdf	2020-04-15 21:33:36 UTC (rev 54752)
+++ trunk/Master/texmf-dist/doc/latex/ccool/ccool.pdf	2020-04-15 21:34:27 UTC (rev 54753)

Property changes on: trunk/Master/texmf-dist/doc/latex/ccool/ccool.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/latex/ccool/ccool.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/ccool/ccool.dtx	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/ccool/ccool.dtx	2020-04-15 21:34:27 UTC (rev 54753)
@@ -0,0 +1,1692 @@
+% \iffalse meta-comment
+% !TEX program  = pdfLaTeX
+%<*internal> 
+\iffalse
+%</internal> 
+%<*readme> 
+----------------------------------------------------------------
+##### ccool --- A tool for encoding mathematical notation
+- 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
+----------------------------------------------------------------
+
+%</readme> 
+%<*internal> 
+\fi
+\def\nameofplainTeX{plain}
+\ifx\fmtname\nameofplainTeX\else
+\expandafter\begingroup
+\fi
+%</internal> 
+%<*install> 
+\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}}
+}
+%</install> 
+%<install> \endbatchfile
+%<*internal> 
+\generate{
+  \file{\jobname.ins}{\from{\jobname.dtx}{install}}
+}
+\nopreamble\nopostamble
+\generate{
+  \file{README.md}{\from{\jobname.dtx}{readme}}
+}
+\ifx\fmtname\nameofplainTeX
+\expandafter\endbatchfile
+\else
+\expandafter\endgroup
+\fi
+%</internal>
+%<package> \NeedsTeXFormat{LaTeX2e}[2020/02/02]
+%<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
+% 
+%<*driver> 
+\documentclass[full]{l3doc}
+\listfiles
+\usepackage{amsmath, amssymb}
+\usepackage[english]{babel}
+\usepackage{bookmark}
+\usepackage{ccool}
+\usepackage{fancyvrb}
+\usepackage{fvextra}% csquotes should be loaded after fvextra
+\usepackage[T1]{fontenc}% \char`[
+\usepackage{pdfpages}
+\usepackage{tabto}
+\usepackage{tcolorbox}
+\tcbuselibrary{listings, breakable}
+\makeatletter
+\newcommand*{\docsetnameref}{\def\@currentlabelname}%https://tex.stackexchange.com/questions/537751
+\makeatother
+\ExplSyntaxOn
+\tl_gset:Nn \partname {Part}
+\ExplSyntaxOff
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+% ^^A\AtEndDocument { \PrintChanges \PrintIndex }
+\ExplSyntaxOn
+\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\doccceptbool{boolean}
+\providecommand\doccceptcode{code}
+\providecommand\doccceptint{integer}
+\providecommand\doccceptgroup{local~group}
+\providecommand\doccceptkvl{keyval~list}
+\providecommand\doccceptpath{path}
+\providecommand\doccceptpre{preamble}
+\providecommand\docccepttok{token}
+\providecommand\docenvdoc{\env{document}}
+\providecommand\docdefaultfor{default~for~}
+\providecommand\doceval[1]{\texttt{\char`\{}#1\texttt{\char`\}}}
+\providecommand\docfillblank{\begin{minipage}[t]{\linewidth}\end{minipage}}
+\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\docpipe{\textbar}
+\cs_new:Nn \__ccool_docu:n{\MakeUppercase #1}
+\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\pkgkey{key$_{i}$}
+\providecommand\pkgval{val$_{i}$}
+\providecommand\pkgoptex{\docarg{Expans}}
+\providecommand\pkgoptfi{\docarg{File}}
+\providecommand\pkgoptin{\docarg{Inner}}
+\providecommand\pkgoptna{\docarg{Name}}
+\providecommand\pkgoptnad{\docarg{Math}}%default
+\providecommand\pkgoptou{\docarg{Outer}}
+\providecommand\pkgoptwr{\docarg{Write}}
+\providecommand\pkgoptse{\docarg{Separ}}
+\providecommand\pkgobj[1]{object identified by #1}
+\providecommand\pkgoptions{kvl0}
+\providecommand\pkgsep[1]{\Arg{#1}}
+\providecommand\pkgwrite{\cs{Ccool}\docarg{\meta{\pkgparna}}\docopte{i}{\meta{\pkgparin}}\Arg{\pkgparde}}
+\ExplSyntaxOff
+\begin{document}
+\DocInput{\jobname.dtx}
+\end{document}
+%</driver> 
+% \fi
+% 
+% \GetFileInfo{\jobname.sty}
+%^^A\begin{documentation}
+%   \title{The \pkg{ccool} package\thanks{^^A
+%   This file describes version \fileversion, last revised \filedate.^^A
+% }^^A
+% }
+%   \author{Erwann Rogard\thanks{firstname dot lastname AusTria gmail dot com}}
+%   
+%   \date{Released \filedate}
+%   
+%   \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}
+%   
+%   \tableofcontents 
+%   
+%   \part{Usage}\label{part:usage}
+%   \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.
+%   \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}}
+%     \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}
+%       \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}
+%   \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}}
+%     \end{syntax}
+%     \begin{description}
+%     \item[Requirement] \meta{\pkgparde} is specified (all others optional).
+%     \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}
+%   
+%   \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}
+%   
+%   \leavevmode
+%   \refstepcounter{subsection}
+%   \docsetnameref{\meta{\pkgparin}}
+%   \label{usage:par:in}
+%   \phantomsection\addcontentsline{toc}{subsection}{\protect\numberline{\thesubsection}\docopte{i}{\meta{\pkgparin}}}
+%   \DescribeOption{\meta{\pkgparin}}
+%   
+%   \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}
+%   \end{description}
+%   
+%   \leavevmode
+%   \refstepcounter{subsection}
+%   \docsetnameref{\meta{\pkgparde}}
+%   \label{usage:par:de}
+%   \phantomsection\addcontentsline{toc}{subsection}{\protect\numberline{\thesubsection}\Arg{\pkgparde}}
+%   \DescribeOption{\meta{\pkgparde}}
+%   \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}
+%   \end{description}
+%   
+%   \leavevmode
+%   \refstepcounter{subsection}
+%   \docsetnameref{parameter \docarg{+}}
+%   \label{usage:par:appto}
+%   \phantomsection\addcontentsline{toc}{subsection}{\protect\numberline{\thesubsection}\docarg{+}}
+%   \DescribeOption{+}
+%   \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.}
+%   \end{description}
+%   
+%   \leavevmode
+%   \refstepcounter{subsection}
+%   \docsetnameref{parameter \docarg{*}}
+%   \label{usage:par:expand}
+%   \phantomsection\addcontentsline{toc}{subsection}{\protect\numberline{\thesubsection}\docarg{*}}
+%   \DescribeOption{*}
+%   
+%   \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}
+%   \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}}
+%   \begin{description}
+%   \item[Default] \nameref{usage:opt:se}
+%   \item[Example] |{~\in~}|
+%   \end{description}
+%   
+%   \leavevmode
+%   \refstepcounter{subsubsection}
+%   \docsetnameref{\meta{\pkgparsii}}
+%   \label{usage:par:sii}
+%   \DescribeOption{\meta{\pkgparsii}}
+%   \begin{description}
+%   \item[Default] \nameref{usage:opt:se}
+%   \item[Example] |{,~}|
+%   \end{description}
+%   
+%   \leavevmode
+%   \refstepcounter{subsubsection}
+%   \docsetnameref{\meta{\pkgparsiii}}
+%   \label{usage:par:siii}
+%   \DescribeOption{\meta{\pkgparsiii}}
+%   \begin{description}
+%   \item[Default] \nameref{usage:opt:se}
+%   \item[Example] |{~\&~}|
+%   \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}}
+%   \begin{description}
+%   \item[Default] \nameref{usage:opt:ou}
+%   \item[Example] |$\left\{#1\right\}$| 
+%   \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}
+%   
+%   \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}.
+%   
+%   \leavevmode
+%   \refstepcounter{section}
+%   \docsetnameref{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}
+%   \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!|
+%     \end{itemize}
+%   \item \docfillblank
+%     \begin{itemize}
+%     \item[\docissuedont] |$|\cs{\meta{\pkgkey}}|<x$|.
+%     \item[\docissuedo] |$|\cs{\meta{\pkgkey}}|{<}x$|
+%     \end{itemize}
+%   \item\docfillblank
+%     \begin{itemize}
+%     \item[\docissuedont] |[a, b)|
+%     \item[\docissuedo] |{[}a, b{)}|
+%     \end{itemize}
+%   \item \docfillblank
+%     \begin{itemize}
+%     \item[\docissuedont] |\Ccool{ F = \cal F }|.
+%     \item[\docissuedo] | \Ccool{ F = \cal{F} } | or | \Ccool{ F = \mathcal{F} } |
+%     \end{itemize}
+%   \item \docfillblank
+%     \begin{itemize}
+%     \item[\docissuedont] |[x_0,x]|
+%     \item[\docissuedo] |\left[x_0,x\right]|
+%     \end{itemize}
+%   \item Also see \autoref{part:other}, \autoref{other:issue}
+%   \end{enumerate}
+%   
+%   \clearpage
+%   \part{Listing}\label{part:listing}
+%   
+%   \newtcblisting[auto counter]
+%   {listing}[2][]{
+%   noparskip,
+%   breakable,
+%   colback=white,
+%   colframe=black,
+%   opacitybacktitle=.8,%
+%   fonttitle=\bfseries,
+%   title={Listing~\thetcbcounter. #1},
+%   arc=0pt,
+%   outer arc=0pt,
+%   boxrule=1pt,
+%   listing and text,
+%   #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}
+%   
+%   \begin{enumerate}
+%   \item
+%     \begin{description}
+%     \item[\docissuedont] |Inner={\{####1\}}|
+%     \item[\docissuesymp] \cs{CcoolRead} fails
+%     \item[\docissuedo] |Inner={\char`{####1\char`}}|
+%     \end{description}
+%   \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
+% }
+%^^A \end{documentation}
+%^^A% Commented out to eliminate WARNING: Reference `doc/function//
+%^^A \begin{implementation}
+%   \part{Implementation}\label{part:impl}
+%   
+%   \iffalse
+%<*package>   
+%   \fi
+%    \begin{macrocode}
+%<@@=ccool>      
+\ExplSyntaxOn
+%    \end{macrocode}
+% \section{\texttt{aux}}
+% \begin{macro}{\@@_aux_inner_set:n}
+%   \begin{arguments}
+%   \item \meta{code}
+%   \end{arguments}
+%    \begin{macrocode}
+\cs_new_protected:Nn \@@_aux_inner_set:n
+{
+  \cs_gset:Npn \@@_aux_inner:n ##1 {#1}
+  \cs_generate_variant:Nn \@@_aux_inner:n { e }
+}
+%    \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_aux_key:w }
+%   \begin{arguments}
+%   \item \meta{ key }
+%   \item \meta{ value }
+%   \end{arguments}
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_aux_key:w #1 = #2 \q_stop
+{
+  \seq_gput_right:Nx \g@@_aux_key_seq { \tl_trim_spaces:n{#1} }
+}
+%    \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_aux_key:n }
+%   \begin{arguments}
+%   \item \meta{ key = value }
+%   \end{arguments}
+%    \begin{macrocode}
+\cs_new_protected:Nn \@@_aux_key:n
+{
+  \@@_aux_key:w #1 \q_stop
+}
+%    \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_aux_key:N }
+%   \begin{arguments}
+%   \item \meta{ seq }
+%   \end{arguments}
+%    \begin{macrocode}
+\cs_new_protected:Nn \@@_aux_key:N 
+{
+  \seq_gclear_new:N \g@@_aux_key_seq
+  \seq_map_function:NN #1 \@@_aux_key:n
+}
+%    \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_aux_outer_set:n}
+%   \begin{arguments}
+%   \item \meta{ inline code }
+%   \end{arguments}
+%    \begin{macrocode}
+\cs_new_protected:Nn \@@_aux_outer_set:n
+{
+  \cs_gset:Npn \@@_aux_outer:n ##1 {#1}
+}
+%    \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_aux_prop:nn}
+%    \begin{macrocode}
+\prop_new:N \g@@_aux_prop
+\cs_new_protected:Nn \@@_aux_prop:nn 
+{
+  \prop_gput:Nnn \g@@_aux_prop{#1}{#2}
+}
+\cs_generate_variant:Nn \@@_aux_prop:nn { eo, ee, ex, xo, xe, xx }
+%    \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_aux_prop:w}
+%   \begin{arguments}
+%   \item \meta{ key }
+%   \item \meta{ value }
+%   \end{arguments}
+%    \begin{macrocode}
+\tl_new:N \g@@_option_expans_tl
+\cs_new_protected:Npn \@@_aux_prop:w #1 = #2 \q_stop
+{
+  \exp_args:Nx
+  \use:c{@@_aux_prop:\g@@_option_expans_tl}
+  { \tl_trim_spaces:n{#1} }
+  { \@@_aux_inner:n{ \tl_trim_spaces:n{#2} } }
+}
+%    \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_aux_prop:n}
+%   \begin{arguments}
+%   \item \meta{ key = value }
+%   \end{arguments}
+%    \begin{macrocode}
+\cs_new_protected:Nn \@@_aux_prop:n
+{
+  \@@_aux_prop:w #1 \q_stop 
+}
+%    \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_aux_prop:N}
+%   \begin{arguments}
+%   \item \meta{keyval list}
+%   \end{arguments}
+%    \begin{macrocode}
+\cs_new_protected:Nn \@@_aux_prop:N
+{
+  \prop_gclear_new:N \g@@_aux_prop
+  \seq_if_empty:NTF #1
+  { \c_empty_tl }
+  {
+    \seq_map_function:NN #1 \@@_aux_prop:n
+  }
+}
+%    \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_aux_separ:nn}
+%   \begin{arguments}
+%   \item \meta{ int }
+%   \item \meta{ tokens }
+%   \end{arguments}
+%    \begin{macrocode}
+\cs_new:Nn \@@_aux_separ: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}
+  }
+}
+\cs_generate_variant:Nn \@@_aux_separ:nn { e }
+%    \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_aux_separ:n}
+%   \begin{arguments}
+%   \item \meta{ tokens }
+%   \end{arguments}
+%    \begin{macrocode}
+\cs_new:Nn \@@_aux_separ:n
+{
+  \@@_aux_separ:en{ \tl_count:n{#1} }{#1}
+}
+%    \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_aux_val:Nn}
+%   \begin{arguments}
+%   \item \meta{ seq }
+%   \item \meta{ tl var name }
+%   \end{arguments}
+%    \begin{macrocode}
+\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} } 
+}
+%    \end{macrocode}
+% \end{macro}
+% \section{\texttt{lambda}}
+% \begin{macro}{\@@_lambda:nn}\cite{a-188053}
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_lambda:nn #1 #2 
+{
+  \exp_args:NNx 
+  \DeclareDocumentCommand \@@_lambda_expression 
+  { \prg_replicate:nn { #1 } { m } }
+  {#2}
+  \@@_lambda_expression
+}
+%    \end{macrocode}
+% \end{macro}
+% \section{\texttt{log}}
+% \begin{macro}{\@@_log_close:}
+%    \begin{macrocode}
+\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_close:N \g@@_log_iow
+  \bool_gset_false:N \g@@_log_open_bool
+}
+%    \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_log_open:}
+%    \begin{macrocode}
+\tl_new:N \g@@_log_file_tl
+\cs_new_protected:Nn \@@_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
+}
+%    \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_log_read:n}
+%   \begin{arguments}
+%   \item \meta{path}
+%   \end{arguments}
+%    \begin{macrocode}
+\cs_new_protected:Nn \@@_log_read:n
+{
+  \file_input:n{#1}
+  \tl_log:n{read~from~#1}
+}
+\cs_generate_variant:Nn \@@_log_read:n { e }
+%    \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_log_read:}
+%    \begin{macrocode}
+\cs_new_protected:Nn \@@_log_read:
+{
+  \@@_log_read:e{\g@@_log_to_tl}
+}
+%    \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_log_write:n}
+%    \begin{macrocode}
+\tl_new:N \g@@_log_to_tl
+\cs_new_protected:Nn \@@_log_write:n
+{
+  \bool_if:nTF{ \g@@_log_open_bool }
+  {
+    \iow_now:Nn \g@@_log_iow {#1}
+    \tl_log:n{ write~to~#1 }
+  }
+  { \msg_error:nnn{ @@ }{ iow }{ \g@@_log_iow }  }
+}
+\cs_generate_variant:Nn \@@_log_write:n { e }
+%    \end{macrocode}
+% \end{macro}
+% \section{\texttt{make_key}}
+% \begin{macro}{\@@_make_key:Nn}
+%   \begin{arguments}
+%   \item \meta{ token }
+%   \item \meta{ key }
+%   \end{arguments}
+%    \begin{macrocode}
+\cs_new_protected:Nn \@@_make_key:Nn 
+{
+  \exp_args:NNx
+  \ProvideDocumentCommand{#1} 
+  { D<>{\g@@_option_name_tl} }
+  {
+    \@@_prop_item:nn{##1}{#2}
+  }
+}
+\cs_generate_variant:Nn \@@_make_key:Nn {c}
+%    \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_make_key:n}
+%   \begin{arguments}
+%   \item \meta{ key }
+%   \end{arguments}
+%    \begin{macrocode}
+\cs_new_protected:Nn \@@_make_key:n
+{
+  \@@_make_key:cn{#1}{#1}
+}
+\cs_generate_variant:Nn \@@_make_key:n { e }
+%    \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_make_key:N}
+%   \begin{arguments}
+%   \item \meta{ seq }
+%   \end{arguments}
+%    \begin{macrocode}
+\cs_new_protected:Nn \@@_make_key:N
+{
+  \seq_map_function:NN #1 \@@_make_key:e
+}
+%    \end{macrocode}
+% \end{macro}
+% \section{\texttt{make_ccool}}
+% \begin{macro}{\@@_make_ccool_exp:nnn}
+%    \begin{macrocode}
+\cs_new_protected:Nn \@@_make_ccool_exp:nnn
+{
+  \@@_aux_val:Nn \g@@_aux_key_seq {#1}
+  \@@_aux_outer_set:n{#3}
+  \@@_aux_outer:n
+  {
+    \exp_args:NNf
+    \@@_seq_use:Nn
+    \g@@_aux_val_seq
+    {#2}
+  }
+}
+%    \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_make_ccool_key:nnn}
+%    \begin{macrocode}
+\cs_new_protected:Nn \@@_make_ccool_key:nnn
+{
+  \@@_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
+}
+%    \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_make_ccool_sideeffect:nnn}\cite{a-536597}
+%    \begin{macrocode}
+\cs_new_protected:Nn \@@_make_ccool_sideeffect:nnn
+{
+  \@@_make_ccool_key:nnn{#1}{#2}{#3}
+  \bool_if:nTF{ \g@@_log_open_bool }
+  {
+    \@@_log_write:n
+    {
+      \begingroup
+      \def \@@_log_entry { \Ccool<#1>i{#2}{#3} } \expandafter
+      \endgroup \@@_log_entry      
+    }
+  }{\c_empty_tl}
+}
+%    \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_make_ccool:nnnn}
+%   \begin{arguments}
+%   \item \meta{ token list }
+%   \item \meta{ seq_{1} }
+%   \item \meta{ seq_{2} } 
+%   \item \meta{ prop }
+%   \end{arguments}
+%    \begin{macrocode}
+\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
+  }
+  {
+    \IfValueT{##2}{##2}    
+    \@@_make_ccool_sideeffect:nnn{##1}{##3}{##4}    
+    \IfBooleanT{##6}
+    {
+      \@@_make_ccool_exp:nnn{##1}{##7}{##8}
+    }
+    \bool_if:nTF{##5}
+    {
+      \gappto{\CcoolHook}
+      {
+        \@@_make_ccool_sideeffect:nnn{##1}{##3}{##4}
+      }
+    }
+    {\c_empty_tl}
+    \IfValueT{##9}
+    {
+      \exp_not:n{ \Ccool<##1>[##9] }
+    }
+  }
+}
+%    \end{macrocode}
+% \end{macro}
+% \section{\texttt{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}
+%    \end{macrocode}
+% \section{\texttt{option}}
+% \begin{macro}{\@@_aux_inner:n}
+%   \begin{arguments}
+%   \item \meta{code}
+%   \end{arguments}
+%    \begin{macrocode}
+\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{arguments}
+%   \item \meta{token list}
+%   \end{arguments}
+%    \begin{macrocode}
+\cs_new:Nn \@@_option_name:n
+{
+  \tl_gset:Nn \g@@_option_name_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}
+%   \begin{arguments}
+%   \item \meta{ inline code }
+%   \end{arguments}
+%    \begin{macrocode}
+\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}
+%   \begin{arguments}
+%   \item \Arg{ tl_{1} }\Arg{ tl_{2} }\Arg{ tl_{3} }
+%   \end{arguments}
+%    \begin{macrocode}
+\cs_new_protected:Nn \@@_option_separ:n
+{
+  \cs_gset:Npn \g@@_option_separ_tl {#1}
+}
+\@@_option_separ:n
+{
+  \msg_warning:nnn{ @@ }{ unset }{ \exp_not:N \g@@_option_separ_tl }
+}
+%    \end{macrocode}
+% \end{macro}
+% \section{\texttt{prop}}
+% \begin{macro}{\@@_prop_append:NN}
+%   \begin{arguments}
+%   \item \meta{ prop_{1} }
+%   \item \meta{ prop_{2} }
+%   \end{arguments}
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_prop_append:NN #1 #2
+{
+  \cs_set:Nn \@@_prop_append:nn
+  {
+    \prop_gput:Nnx #1 {##1}{ \prop_item:Nn #2{##1} }
+  }
+  \prop_map_function:NN #2 \@@_prop_append:nn
+}
+\cs_generate_variant:Nn \@@_prop_append:NN { cN }
+%    \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_prop_append:Nn}
+%   \begin{arguments}
+%   \item \meta{ prop }
+%   \item \meta{ tl var name }
+%   \end{arguments}
+%    \begin{macrocode}
+\cs_new_protected:Nn \@@_prop_append:Nn 
+{
+  \@@_prop_append:cN{ \@@_prop_name:n {#2} } #1
+}
+%    \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_prop_clear_new:n}
+%   \begin{arguments}
+%   \item \meta{ tl var name }
+%   \end{arguments}
+%    \begin{macrocode}
+\cs_new_protected:Nn \@@_prop_clear_new:n
+{
+  \exp_args:No \prop_clear_new:c{ \@@_prop_name:n {#1} }
+}
+%    \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_prop_clear_new_map:n}
+%   \begin{arguments}
+%   \item \meta{ keyval list }
+%   \end{arguments}
+%    \begin{macrocode}
+\cs_new_protected:Nn \@@_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
+}
+%    \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_prop_if_exist:nTF}
+%   \begin{arguments}
+%   \item \meta{tl_{1}}
+%   \item \meta{tl_{2}}
+%   \item \meta{tl_{3}}
+%   \end{arguments}
+%    \begin{macrocode}
+\cs_new:Nn \@@_prop_if_exist:nTF 
+{
+  \prop_if_exist:cTF{ \@@_prop_name:n {#1} }{#2}{#3}
+}
+%    \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_prop_item:nn}
+%   \begin{arguments}
+%   \item \meta{ tl var name }
+%   \item \meta{ key }
+%   \end{arguments}
+%    \begin{macrocode}
+\cs_new:Nn \@@_prop_item:nn
+{
+  \prop_item:cn { \@@_prop_name:n {#1} } {#2}
+}
+%    \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_prop_name:n}
+%   \begin{arguments}
+%   \item \meta{ tl var name }
+%   \end{arguments}
+%    \begin{macrocode}
+\cs_new:Npn \@@_prop_name:n #1{ @@_#1 }
+%    \end{macrocode}
+% \end{macro}
+% \begin{macro}{\@@_prop_new:n}
+%   \begin{arguments}
+%   \item \meta{ tl var name }
+%   \end{arguments}
+%    \begin{macrocode}
+\cs_new_protected:Nn \@@_prop_new:n 
+{
+  \prop_new:c{ \@@_prop_name:n {#1} }
+}
+%    \end{macrocode}
+% \end{macro}
+% \section{\texttt{seq}}
+% \begin{macro}{\@@_seq_from_prop:NNn}
+%   \begin{arguments}
+%   \item \meta{ seq_{1} }
+%   \item \meta{ seq_{2} } (keys)
+%   \item \meta{ prop }
+%   \end{arguments}
+%    \begin{macrocode}
+\cs_new_protected:Nn \@@_seq_from_prop:NNn
+{
+  \cs_set_protected:Nn \@@_seq_from_prop:n
+  {
+    \seq_gput_right:No #1 { \prop_item:cn{#3}{##1} }
+  }
+  \seq_map_function:NN #2 \@@_seq_from_prop:n
+}
+%    \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}
+%    \begin{macrocode}
+\NewDocumentCommand{ \CcoolClear }
+{ D<>{\g@@_option_name_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}
+%    \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}
+%    \begin{macrocode}
+\ProvideDocumentCommand \CcoolLambda { O{1} m }
+{
+  \@@_lambda:nn { #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} 
+%    \begin{macrocode}
+\NewDocumentCommand{ \CcoolOption }
+{ m }
+{ 
+  \keys_set:nn{ @@ }{#1} 
+}
+%    \end{macrocode}
+% \end{function}
+%    \begin{macrocode}
+\keys_define:nn { @@ }
+{
+%    \end{macrocode}
+% \leavevmode
+% \refstepcounter{subsection}
+% \docsetnameref{\pkgoptex}
+% \label{usage:opt:ex}
+% \addcontentsline{toc}{subsection}{\protect\numberline{\thesubsection}\pkgoptex}
+% \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 },
+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}
+% \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: },
+%    \end{macrocode}
+% \leavevmode
+% \refstepcounter{subsubsection}
+% \docsetnameref{\pkgoptin}
+% \label{usage:opt:in}
+% \addcontentsline{toc}{subsection}{\protect\numberline{\thesubsection}\pkgoptin}
+% \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}
+  \exp_last_unbraced:Nf 
+  \@@_make_ccool:nnnn
+  {
+    { \g@@_option_name_tl }
+    { \g@@_option_inner_tl }
+    { \g@@_option_separ_tl }
+    { \g@@_option_outer_tl }
+  }
+},
+Inner .value_required:n = false,
+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} 
+%    \begin{macrocode}
+Name .code:n={
+  \@@_option_name:n{#1}
+  \exp_last_unbraced:Nf 
+  \@@_make_ccool:nnnn
+  {
+    { \g@@_option_name_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 },
+%    \end{macrocode}
+% \leavevmode
+% \refstepcounter{subsubsection}
+% \docsetnameref{\pkgoptou}
+% \label{usage:opt:ou}
+% \addcontentsline{toc}{subsection}{\protect\numberline{\thesubsection}\pkgoptou}
+% \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}
+  \exp_last_unbraced:Nf 
+  \@@_make_ccool:nnnn
+  {
+    { \g@@_option_name_tl }
+    { \g@@_option_inner_tl }
+    { \g@@_option_separ_tl }
+    { \g@@_option_outer_tl }
+  }
+},
+Outer .value_required:n = false,
+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}
+% \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}
+  \exp_last_unbraced:Nf 
+  \@@_make_ccool:nnnn
+  {
+    { \g@@_option_name_tl }
+    { \g@@_option_inner_tl }
+    { \g@@_option_separ_tl }
+    { \g@@_option_outer_tl }
+  }
+},
+Separ .value_required:n = false,
+Separ .default:n = { {\ }and{\ } } { ,{\ } } { ,{\ }and{\ } },
+Separ .initial:n = { {\ }and{\ } } { ,{\ } } { ,{\ }and{\ } },
+%    \end{macrocode}
+% \leavevmode
+% \addtocounter{subsection}{1}
+% \docsetnameref{\pkgoptwr}
+% \label{usage:opt:wr}
+% \addcontentsline{toc}{subsection}{\protect\numberline{\thesubsection}\pkgoptwr}
+% \DescribeOption{\pkgoptwr}
+% \begin{description}
+% \item[Value] \meta{\doccceptbool}
+% \end{description}
+%    \begin{macrocode}
+Write .code:n = {
+  \bool_if:nTF{#1}
+  {\@@_log_open:}
+  {\@@_log_close:}
+},
+Write .value_required:n = false,
+Write .default:n = \BooleanFalse,
+Write .initial:n = \BooleanFalse
+%    \end{macrocode}
+%    \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}
+%    \begin{macrocode}
+\NewDocumentCommand{\CcoolRead}
+{o}
+{
+  \IfValueTF{#1}
+  {\@@_log_read:e{#1}}
+  {\@@_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}  
+%    \begin{macrocode}
+\NewDocumentCommand{\CcoolVers}
+{}
+{\use:c{ver at ccool.sty}}
+%    \end{macrocode}
+% \section{Misc}
+%    \begin{macrocode}
+\ExplSyntaxOff
+%    \end{macrocode}
+%^^A \end{implementation}
+% 
+% \iffalse
+%</package> 
+% \fi
+% \Finale
+\endinput
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/source/latex/ccool/ccool.dtx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/latex/ccool/ccool.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/ccool/ccool.ins	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/ccool/ccool.ins	2020-04-15 21:34:27 UTC (rev 54753)
@@ -0,0 +1,64 @@
+%%
+%% 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'.

Added: trunk/Master/texmf-dist/tex/latex/ccool/ccool.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/ccool/ccool.sty	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/ccool/ccool.sty	2020-04-15 21:34:27 UTC (rev 54753)
@@ -0,0 +1,467 @@
+%%
+%% This is file `ccool.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% ccool.dtx  (with options: `package')
+%% ----------------------------------------------------------------------------
+%% 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
+%% ----------------------------------------------------------------------------
+%% 
+ \NeedsTeXFormat{LaTeX2e}[2020/02/02]
+ \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
+\ExplSyntaxOn
+\cs_new_protected:Nn \@@_aux_inner_set:n
+{
+  \cs_gset:Npn \@@_aux_inner:n ##1 {#1}
+  \cs_generate_variant:Nn \@@_aux_inner:n { e }
+}
+\cs_new_protected:Npn \@@_aux_key:w #1 = #2 \q_stop
+{
+  \seq_gput_right:Nx \g@@_aux_key_seq { \tl_trim_spaces:n{#1} }
+}
+\cs_new_protected:Nn \@@_aux_key:n
+{
+  \@@_aux_key:w #1 \q_stop
+}
+\cs_new_protected:Nn \@@_aux_key:N
+{
+  \seq_gclear_new:N \g@@_aux_key_seq
+  \seq_map_function:NN #1 \@@_aux_key:n
+}
+\cs_new_protected:Nn \@@_aux_outer_set:n
+{
+  \cs_gset:Npn \@@_aux_outer:n ##1 {#1}
+}
+\prop_new:N \g@@_aux_prop
+\cs_new_protected:Nn \@@_aux_prop:nn
+{
+  \prop_gput:Nnn \g@@_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
+{
+  \exp_args:Nx
+  \use:c{@@_aux_prop:\g@@_option_expans_tl}
+  { \tl_trim_spaces:n{#1} }
+  { \@@_aux_inner:n{ \tl_trim_spaces:n{#2} } }
+}
+\cs_new_protected:Nn \@@_aux_prop:n
+{
+  \@@_aux_prop:w #1 \q_stop
+}
+\cs_new_protected:Nn \@@_aux_prop:N
+{
+  \prop_gclear_new:N \g@@_aux_prop
+  \seq_if_empty:NTF #1
+  { \c_empty_tl }
+  {
+    \seq_map_function:NN #1 \@@_aux_prop:n
+  }
+}
+\cs_new:Nn \@@_aux_separ: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}
+  }
+}
+\cs_generate_variant:Nn \@@_aux_separ:nn { e }
+\cs_new:Nn \@@_aux_separ:n
+{
+  \@@_aux_separ:en{ \tl_count:n{#1} }{#1}
+}
+\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_protected:Npn \@@_lambda:nn #1 #2
+{
+  \exp_args:NNx
+  \DeclareDocumentCommand \@@_lambda_expression
+  { \prg_replicate:nn { #1 } { m } }
+  {#2}
+  \@@_lambda_expression
+}
+\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_close:N \g@@_log_iow
+  \bool_gset_false:N \g@@_log_open_bool
+}
+\tl_new:N \g@@_log_file_tl
+\cs_new_protected:Nn \@@_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
+}
+\cs_new_protected:Nn \@@_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:
+{
+  \@@_log_read:e{\g@@_log_to_tl}
+}
+\tl_new:N \g@@_log_to_tl
+\cs_new_protected:Nn \@@_log_write:n
+{
+  \bool_if:nTF{ \g@@_log_open_bool }
+  {
+    \iow_now:Nn \g@@_log_iow {#1}
+    \tl_log:n{ write~to~#1 }
+  }
+  { \msg_error:nnn{ @@ }{ iow }{ \g@@_log_iow }  }
+}
+\cs_generate_variant:Nn \@@_log_write:n { e }
+\cs_new_protected:Nn \@@_make_key:Nn
+{
+  \exp_args:NNx
+  \ProvideDocumentCommand{#1}
+  { D<>{\g@@_option_name_tl} }
+  {
+    \@@_prop_item:nn{##1}{#2}
+  }
+}
+\cs_generate_variant:Nn \@@_make_key:Nn {c}
+\cs_new_protected:Nn \@@_make_key:n
+{
+  \@@_make_key:cn{#1}{#1}
+}
+\cs_generate_variant:Nn \@@_make_key:n { e }
+\cs_new_protected:Nn \@@_make_key:N
+{
+  \seq_map_function:NN #1 \@@_make_key:e
+}
+\cs_new_protected:Nn \@@_make_ccool_exp:nnn
+{
+  \@@_aux_val:Nn \g@@_aux_key_seq {#1}
+  \@@_aux_outer_set:n{#3}
+  \@@_aux_outer:n
+  {
+    \exp_args:NNf
+    \@@_seq_use:Nn
+    \g@@_aux_val_seq
+    {#2}
+  }
+}
+\cs_new_protected:Nn \@@_make_ccool_key:nnn
+{
+  \@@_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
+}
+\cs_new_protected:Nn \@@_make_ccool_sideeffect:nnn
+{
+  \@@_make_ccool_key:nnn{#1}{#2}{#3}
+  \bool_if:nTF{ \g@@_log_open_bool }
+  {
+    \@@_log_write:n
+    {
+      \begingroup
+      \def \@@_log_entry { \Ccool<#1>i{#2}{#3} } \expandafter
+      \endgroup \@@_log_entry
+    }
+  }{\c_empty_tl}
+}
+\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
+  }
+  {
+    \IfValueT{##2}{##2}
+    \@@_make_ccool_sideeffect:nnn{##1}{##3}{##4}
+    \IfBooleanT{##6}
+    {
+      \@@_make_ccool_exp:nnn{##1}{##7}{##8}
+    }
+    \bool_if:nTF{##5}
+    {
+      \gappto{\CcoolHook}
+      {
+        \@@_make_ccool_sideeffect:nnn{##1}{##3}{##4}
+      }
+    }
+    {\c_empty_tl}
+    \IfValueT{##9}
+    {
+      \exp_not:n{ \Ccool<##1>[##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
+{
+  \tl_gset:Nn \g@@_option_inner_tl {#1}
+}
+\@@_option_inner:n
+{
+  \msg_warning:nnn{ @@ }{ unset }{ \exp_not:N \g@@_option_inner_tl }
+}
+\cs_new:Nn \@@_option_name:n
+{
+  \tl_gset:Nn \g@@_option_name_tl{#1}
+}
+\@@_option_name:n
+{
+  \msg_error:nnx{ @@ }
+  { generic }
+  { \exp_not:N\g@@_option_name_tl~undefined }
+}
+\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 }
+}
+\cs_new_protected:Nn \@@_option_separ:n
+{
+  \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
+  {
+    \prop_gput:Nnx #1 {##1}{ \prop_item:Nn #2{##1} }
+  }
+  \prop_map_function:NN #2 \@@_prop_append:nn
+}
+\cs_generate_variant:Nn \@@_prop_append:NN { cN }
+\cs_new_protected:Nn \@@_prop_append:Nn
+{
+  \@@_prop_append:cN{ \@@_prop_name:n {#2} } #1
+}
+\cs_new_protected:Nn \@@_prop_clear_new:n
+{
+  \exp_args:No \prop_clear_new:c{ \@@_prop_name:n {#1} }
+}
+\cs_new_protected:Nn \@@_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
+}
+\cs_new:Nn \@@_prop_if_exist:nTF
+{
+  \prop_if_exist:cTF{ \@@_prop_name:n {#1} }{#2}{#3}
+}
+\cs_new:Nn \@@_prop_item:nn
+{
+  \prop_item:cn { \@@_prop_name:n {#1} } {#2}
+}
+\cs_new:Npn \@@_prop_name:n #1{ @@_#1 }
+\cs_new_protected:Nn \@@_prop_new:n
+{
+  \prop_new:c{ \@@_prop_name:n {#1} }
+}
+\cs_new_protected:Nn \@@_seq_from_prop:NNn
+{
+  \cs_set_protected:Nn \@@_seq_from_prop:n
+  {
+    \seq_gput_right:No #1 { \prop_item:cn{#3}{##1} }
+  }
+  \seq_map_function:NN #2 \@@_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} }
+{
+  \@@_prop_clear_new_map:n{#1}
+}
+\NewDocumentCommand{\CcoolHook}{}{\c_empty_tl}
+\ProvideDocumentCommand \CcoolLambda { O{1} m }
+{
+  \@@_lambda:nn { #1 } { #2 }
+}
+\NewDocumentCommand{ \CcoolOption }
+{ m }
+{
+  \keys_set:nn{ @@ }{#1}
+}
+\keys_define:nn { @@ }
+{
+Expans .multichoices:nn = { eo, ee, ex, xo, xe, xx }
+{ \tl_gset_eq:NN \g@@_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}
+},
+File .default:n = { \@@_sys_filename: },
+File .initial:n = { \@@_sys_filename: },
+Inner .code:n={
+  \@@_option_inner:n{#1}
+  \exp_last_unbraced:Nf
+  \@@_make_ccool:nnnn
+  {
+    { \g@@_option_name_tl }
+    { \g@@_option_inner_tl }
+    { \g@@_option_separ_tl }
+    { \g@@_option_outer_tl }
+  }
+},
+Inner .value_required:n = false,
+Inner .default:n = {####1},
+Inner .initial:n = {####1},
+Name .code:n={
+  \@@_option_name:n{#1}
+  \exp_last_unbraced:Nf
+  \@@_make_ccool:nnnn
+  {
+    { \g@@_option_name_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 },
+Outer .code:n={
+  \@@_option_outer:n{#1}
+  \exp_last_unbraced:Nf
+  \@@_make_ccool:nnnn
+  {
+    { \g@@_option_name_tl }
+    { \g@@_option_inner_tl }
+    { \g@@_option_separ_tl }
+    { \g@@_option_outer_tl }
+  }
+},
+Outer .value_required:n = false,
+Outer .default:n = { \ensuremath{####1} },
+Outer .initial:n = { \ensuremath{####1} },
+Separ .code:n={
+  \@@_option_separ:n{#1}
+  \exp_last_unbraced:Nf
+  \@@_make_ccool:nnnn
+  {
+    { \g@@_option_name_tl }
+    { \g@@_option_inner_tl }
+    { \g@@_option_separ_tl }
+    { \g@@_option_outer_tl }
+  }
+},
+Separ .value_required:n = false,
+Separ .default:n = { {\ }and{\ } } { ,{\ } } { ,{\ }and{\ } },
+Separ .initial:n = { {\ }and{\ } } { ,{\ } } { ,{\ }and{\ } },
+Write .code:n = {
+  \bool_if:nTF{#1}
+  {\@@_log_open:}
+  {\@@_log_close:}
+},
+Write .value_required:n = false,
+Write .default:n = \BooleanFalse,
+Write .initial:n = \BooleanFalse
+}
+\NewDocumentCommand{\CcoolRead}
+{o}
+{
+  \IfValueTF{#1}
+  {\@@_log_read:e{#1}}
+  {\@@_log_read:}
+}
+\NewDocumentCommand{\CcoolVers}
+{}
+{\use:c{ver at ccool.sty}}
+\ExplSyntaxOff
+%% 
+%% 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.sty'.


Property changes on: trunk/Master/texmf-dist/tex/latex/ccool/ccool.sty
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/tlpkg/bin/tlpkg-ctan-check
===================================================================
--- trunk/Master/tlpkg/bin/tlpkg-ctan-check	2020-04-15 21:33:36 UTC (rev 54752)
+++ trunk/Master/tlpkg/bin/tlpkg-ctan-check	2020-04-15 21:34:27 UTC (rev 54753)
@@ -151,7 +151,7 @@
     cascade cascadilla cases casyl
     catchfile catchfilebetweentags catcodes catechis catoptions
     cbcoptic cbfonts cbfonts-fd
-    cc-pl ccaption ccfonts ccicons cclicenses
+    cc-pl ccaption ccfonts ccicons cclicenses ccool
     cd cd-cover cdpbundl
     cell cellprops cellspace celtic censor centeredline cesenaexam
     cfr-initials cfr-lm

Added: trunk/Master/tlpkg/tlpsrc/ccool.tlpsrc
===================================================================
Modified: trunk/Master/tlpkg/tlpsrc/collection-mathscience.tlpsrc
===================================================================
--- trunk/Master/tlpkg/tlpsrc/collection-mathscience.tlpsrc	2020-04-15 21:33:36 UTC (rev 54752)
+++ trunk/Master/tlpkg/tlpsrc/collection-mathscience.tlpsrc	2020-04-15 21:34:27 UTC (rev 54753)
@@ -36,6 +36,7 @@
 depend calculation
 depend cascade
 depend ccfonts
+depend ccool
 depend chemarrow
 depend chemcompounds
 depend chemcono



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