% \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@ccool.sty}}
%    \end{macrocode}
% \section{Misc}
%    \begin{macrocode}
\ExplSyntaxOff
%    \end{macrocode}
%^^A \end{implementation}
% 
% \iffalse
%</package> 
% \fi
% \Finale
\endinput