summaryrefslogtreecommitdiff
path: root/macros/generic/commado/docsrc/commado.tex
diff options
context:
space:
mode:
Diffstat (limited to 'macros/generic/commado/docsrc/commado.tex')
-rw-r--r--macros/generic/commado/docsrc/commado.tex205
1 files changed, 205 insertions, 0 deletions
diff --git a/macros/generic/commado/docsrc/commado.tex b/macros/generic/commado/docsrc/commado.tex
new file mode 100644
index 0000000000..e7ba43d9d8
--- /dev/null
+++ b/macros/generic/commado/docsrc/commado.tex
@@ -0,0 +1,205 @@
+\ProvidesFile{commado.tex}[2015/11/16 documenting commado.sty]
+\title{\pkg{\huge commado.sty} and \pkg{\huge filesdo.sty}\\---\\%
+ Immediately Extend a One-Argument Macro\\
+ to Comma-Separated Lists and Combinations\\
+ of Filename Bases and Extensions\thanks{This document describes
+ \textcolor{blue}{\UseVersionOf{\jobname.sty}}
+ of \textsf{\jobname.sty} as of \UseDateOf{\jobname.sty}
+ and version \textcolor{blue}{\UseVersionOf{filesdo.sty}}
+ as of \UseDateOf{filesdo.sty} of \pkg{filesdo.sty}..}}
+% \RequirePackage[wrap]{nicefilelist} \listfiles
+\RequirePackage{makedoc} \ProcessLineMessage{}
+\renewcommand*{\mdSectionLevelOne}{\string\subsection}
+\MakeJobDoc{19}{\SectionLevelOneParseInput} %% 2012/11/26
+\documentclass[fleqn]{article}%% TODO paper dimensions!?
+% \documentclass{article} %% TODO paper dimensions!?
+\usepackage{catchdq} %% TODO earlier than `langcode'
+\input{makedoc.cfg} %% shared formatting settings
+\ifpdf\else \errhelp{hyperref v6.83m option [draft] bad with \begin{equation}}
+ \errmessage{run this with pdflatex only}\fi
+\ReadPackageInfos{commado,filesdo}
+% \usepackage{commado}
+\MDkeywords{macro programming, programming structures, loops, lists}
+\sloppy \catchdqs
+\begin{document}
+\maketitle
+\begin{MDabstract}
+'commado.sty' provides \[`\DoWithCSL{<cmd>}{<list>}'\]
+in order to apply an existing one-parameter macro <cmd>
+to each item in a list <list> in which items are
+\wikienref{comma-separated list}{separated by commas.}
+'filesdo.sty' provides \[`\DoWithBasesExts{<cmd>}{<bases>}{<exts>}'\]
+in order to run `<cmd>{<base>.<ext>}' for some (at most)
+one-parameter macro <cmd>, each base filename <base> in the
+comma-separated list <bases> and each filename extension <ext>
+in the comma-separated list <exts>.
+As opposed to \LaTeX's internal `\@for', no assignments are involved
+(unless <cmd> uses assignments---"expandability" in "\TeX's gullet").
+
+Both packages are "generic," i.e., should work with Plain \TeX,
+\LaTeX\ or even other formats, relying on the \ctanpkgref{plainpkg}
+package for some minimal \LaTeX-like behaviour.
+
+\MDaddtoabstract{Related packages} \ctanpkgref{loops} and others
+mentioned in the \ctanpkgref{dowith} package documentation.
+\end{MDabstract}
+\newpage
+\tableofcontents
+% \newpage
+\section{Installing and Calling}
+The files 'commado.sty' and 'filesdo.sty'
+are provided ready, installation just requires
+putting them somewhere where \TeX\ finds them
+(which may need updating the filename data
+ base).\urlfoot{ukfaqref}{inst-wlcf}
+However, installation of the package \ctanpkgdref{plainpkg}
+and the package 'stacklet.sty' (\ctanpkgdref{catcodes} bundle)
+is required additionally.
+
+As to calling (loading): 'commado.sty' and 'filesdo.sty' are
+"\pkg{plainpkg} packages" in the sense of the 'plainpkg'
+documentation that you may consult for details.
+So roughly,
+\begin{itemize}
+ \item load it by \ |\usepackage{<pkg>}| \ if you can,
+ \item otherwise by \ |\RequirePackage{<pkg>}| \\
+ (perhaps from within another "\pkg{plainpkg} package"),
+ \item or by \ |\input <pkg>.sty|
+ \item or even by \ |\input{<pkg>.sty}|~\dots
+\end{itemize}
+---where <pkg> is \qtdcode{commado} or \qtdcode{filesdo}.
+
+% \pagebreak
+\section{Syntax and Relation to the 'dowith' Package}
+In <list> with |\DoWithCSL{<cmd>}{<list>}|, blank spaces %% boxed 2015/11/15
+before entries or after commas as well as preceding the
+closing brace are ignored. So
+\[`\DoWithCSL{<cmd>}{ cfg, sty, tex }'\]
+works like
+\[`\DoWithAllOf{<cmd>}{{cfg}{sty}{tex}}'\] %% added `AllOf' 2015/11/15
+from \ctanpkgstyref{dowith}.\urlfoot{CtanPkgRef}{dowith} %% foot 2012/11/30
+With `\DoWithCSL'
+(at present), %% 2012/11/27
+an item cannot be empty or consist of blank spaces only.
+Empty or blank items can be handled by `\DoWith'\-`AllOf'.
+%% <- was not wrong without `AllOf', however ... 2015/11/15
+%% ... hyphenation is a great compromise! without hyphen?
+\par %% 2015/11/15
+\begingroup \footnotesize
+As to \strong{relevance}, the previous remark addresses those
+who want to understand what I am doing, such as me.
+The two commands provide a rather obvious ``link'' between the 'commado'
+and the 'dowith' bundle. But neither of them is a command that
+``you shouldn't miss.'' 'commado.sty' is mainly a programming tool
+(and I isolate it as an object of study).
+% similar to a chess diagram to demonstrate how to trap a lonely king
+% with king and rook only, the actual task being expandability,
+% in my case to generate \acro{HTML} with \TeX's `\write' primitive).
+ \par\strong{Choosing between 'dowith' and 'commado'.}\quad What I
+\strong{really use} in the case of comma-separated lists is
+\strong{'filesdo.sty'} as described in the next section. %% TODO really?
+It is great to keep certain files or file sections small (\strong{readability}),
+actually in describing package bundles, on \acro{CTAN} as well as
+with a complex book at which I am working. However,
+the comma feature is a little more complex than the 'dowith' way,
+and I like to avoid unnecessarily complex things.
+The real advantage of 'filesdo', as I feel it,
+is the readability of the code with combinations of file \emph{basenames}
+and \emph{extensions}, similar to \emph{brace expansion} in the
+\Wikidisambref{Bash}{Unix shell} shell.
+The braces make obvious which are the basenames and which are the
+extensions, and the commas structure each of these two lists.
+
+In applications of \strong{'dowith'}, saving \strong{tokens} and
+\strong{expansion} steps is more important to me (a kind of sports).
+\emph{Tokens} actually are saved with 'dowith' when <list> consists of
+single tokens rather than ``\strong{brace groups},''
+and the former is the application of 'dowith' in my \ctanpkgdref{langcode} package
+(in the 'dowith' discussion, I compare this with the \ctanpkgdref{xspace} package).
+On the other hand, a <list> of brace groups even needs more tokens than a comma-separated list.
+% (Due to \TeX's tokenization, readability and parsimony are opposite and
+% incompatible goals.)
+The number of tokens or expansion steps is relevant when a list is stored
+as a macro or in a token register. It is less relevant when a list
+is processed once only at the moment the input file is read
+and then is not stored any longer.
+
+There is a situation where I prefer lists of \emph{brace groups}
+to comma-separated lists although the former need more tokens
+and their readablility is worse: I use something like
+\begin{equation}
+ `\autrefs{{apples}{oranges}{pears}}'
+\end{equation}
+to generate a list of internal links in a \acro{HTML} file.
+`\autrefs' this way rests on `\DoSeparateWith' from 'domore.sty'.
+`\DoSeparateWith' is based on `\DoWith'. Sometimes I use the former
+one directly as an \emph{author}. The alternative
+\begin{equation}
+ `\autrefs{apples,oranges,pears}'
+\end{equation}
+would need less tokens (which is absolutely irrelevant in this case
+because the line is in \TeX's memory for a moment only)
+and may be easier to read. However, often I want to change the order
+of the items. When I try this by cut\&paste in a comma-separated list,
+I always wonder whether I should cut/copy the right-hand comma
+of a list item or the left-hand comma; and at the next moment,
+I have forgotten whether I cut the right-hand comma
+or the other one. With the 'dowith' approach, I just cut\&paste
+a brace group. A function key opens an empty brace group in my
+favorite editor.
+
+\par \endgroup
+
+\section{Example for 'filesdo.sty'}
+In the file `srcfiles.tex' for the \ctanpkgdref{nicetext} bundle,
+there is a line
+\begin{quote}
+`\DoWithBasesExts\ReadFileInfos{fifinddo,niceverb}{sty,tex}'\kern-10pt
+\end{quote}
+This works like
+\begin{quote}
+`\ReadFileInfos{fifinddo.sty}'\\
+`\ReadFileInfos{niceverb.sty}'\\
+`\ReadFileInfos{fifinddo.tex}'\\
+`\ReadFileInfos{niceverb.tex}'
+\end{quote}
+or actually
+(a special feature of \ctanpkgref{readprov}'s\urlfoot{CtanPkgRef}{readprov}
+ %% <- foot 2012/11/30
+ `\ReadFileInfos' is that its argument may be
+ a comma-separated list already)
+\begin{quote}
+`\ReadFileInfos{fifinddo.sty,niceverb.sty,'\\
+\null\texttt{ ~ ~ ~ ~ ~ ~ ~ }`fifinddo.tex,niceverb.tex}'
+\end{quote}
+I ponder providing a shorthand `\ReadBaseExtInfos' for
+\begin{quote}
+`\DoWithBasesExts\ReadFileInfos'
+\end{quote}
+and reimplementing `\ReadFileInfos' using `\DoWithCLS' in 'myfilist.sty'
+(2012-11-27).
+
+\pagebreak
+\section{The File 'commado.sty'}
+\subsection{Package File Header (Legalese and 'plainpkg')}
+\input{commado.doc}
+
+\newpage
+
+\section{The File 'filesdo.sty'}
+\subsection{Package File Header (Legalese and 'plainpkg')}
+\ResetCodeLineNumbers
+\renewcommand*{\mdJobName}{filesdo}
+\MakeInputJobDoc{19}{\SectionLevelOneParseInput}
+\end{document}
+
+VERSION HISTORY
+
+2012/11/24 for v0.1 very first
+2012/11/30 for v0.11 \ctanpkgdref moves to `makedoc.cfg',
+ 2 more link footnotes
+2015/11/15f. `AllOf' was missing in the description of
+ the relation to the `dowith' bundle --
+ added an "essay"
+2015/11/15 error message to deal with hyperref's
+ draft/equation problem as in dowith.tex