From fed27f633aadbacbd3d1221da7993fed8d4efffe Mon Sep 17 00:00:00 2001
From: Norbert Preining <norbert@preining.info>
Date: Sun, 15 Sep 2019 03:00:57 +0000
Subject: CTAN sync 201909150300

---
 macros/latex-dev/required/tools/somedefs.dtx | 172 +++++++++++++++++++++++++++
 1 file changed, 172 insertions(+)
 create mode 100644 macros/latex-dev/required/tools/somedefs.dtx

(limited to 'macros/latex-dev/required/tools/somedefs.dtx')

diff --git a/macros/latex-dev/required/tools/somedefs.dtx b/macros/latex-dev/required/tools/somedefs.dtx
new file mode 100644
index 0000000000..f73a45b787
--- /dev/null
+++ b/macros/latex-dev/required/tools/somedefs.dtx
@@ -0,0 +1,172 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 1993-2019
+%
+% The LaTeX3 Project and any individual authors listed elsewhere
+% in this file.
+%
+% This file is part of the Standard LaTeX `Tools Bundle'.
+% -------------------------------------------------------
+%
+% It may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3c
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+%    https://www.latex-project.org/lppl.txt
+% and version 1.3c or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+%
+% The list of all files belonging to the LaTeX `Tools Bundle' is
+% given in the file `manifest.txt'.
+%
+% \fi
+% \title{The \textsf{somedefs} toolkit package}
+% \date{long time ago in a different century\ldots}
+% \author{Alan Jeffrey}
+% \MaintainedByLaTeXTeam{tools}
+% \maketitle
+%
+%
+% \changes{v0.03}{1994/06/01}{Use new style error commands. DPC}
+% \changes{v0.02}{1994/05/10}{Added a \cmd\relax, to stop arguments to
+%    \cmd\newcommand\ being unbraced by \cmd\ProvidesCommand.  Added
+%    an error message for commands which are requested but never
+%    defined.  Spotted by DPC.}
+%
+% \section*{Overview}
+%
+% This is an example `programmers toolkit' package, for use by package
+% writers.  It allows package writers to provide options which switch
+% definitions on and off.  For example, a package |fred| might define a
+% large number of commands, including |\foo| and |\baz|, so:
+% \begin{verbatim}
+%    \usepackage{fred}
+% \end{verbatim}
+% would use a lot of memory, even if |\foo| and |\baz| were the only
+% commands needed.  However, if the author of |fred| used the |somedefs|
+% package, then the user would be able to say:
+% \begin{verbatim}
+%    \usepackage[only,foo,baz]{fred}
+% \end{verbatim}
+% and only the commands |\foo| and |\baz| would be defined.
+%
+% To use the |somedefs| package in your own packages or classes, you
+%  say:
+% \begin{verbatim}
+%    \RequirePackage{somedefs}
+% \end{verbatim}
+% You can then use four new commands:
+% \begin{flushleft}\begin{itemize}
+% \item |\UseAllDefinitions| which says that all the commands in the
+%    file should be defined.
+% \item |\UseSomeDefinitions| which says that only the commands
+%    specified by |\UseDefinition| should be defined.
+% \item |\UseDefinition{|\meta{name}|}| which says that the command
+%    |\name| should be defined.
+% \item |\ProvidesDefinition{|\meta{definition}|}| which provides one
+%    definition, of the form |\definingcommand{\command}...|
+% \end{itemize}\end{flushleft}
+% For example, the package |fred| could say:
+% \begin{verbatim}
+%    \RequirePackage{somedefs}
+%    \UseAllDefinitions
+%    \DeclareOption{only}{\UseSomeDefinitions}
+%    \DeclareOption*{\UseDefinition{\CurrentOption}}
+%    \ProcessOptions
+%    \ProvidesDefinition{\newcommand{\foo}{...}}
+%    \ProvidesDefinition{\newcommand{\baz}{...}}
+% \end{verbatim}
+% One of the commands |\UseAllDefinitions| or |\UseSomeDefinitions|
+% should always be used.  You may have some commands which need other
+% commands, in which case you have to declare the options by hand.  For
+% example, if the command |\bar| needs the command |\foo|, you could
+% say:
+% \begin{verbatim}
+%    \DeclareOption{bar}{\UseDefinition{bar}\UseDefinition{foo}}
+% \end{verbatim}
+% For a longer example of the use of the |somedefs| package, look at the
+% |rawfonts| package.
+%
+% \StopEventually{}
+%
+% \section*{Implementation}
+%
+% The driver for the documentation you're now reading.
+%    \begin{macrocode}
+%<*driver>
+\documentclass{ltxdoc}
+\begin{document}
+\DocInput{somedefs.dtx}
+\end{document}
+%</driver>
+%    \end{macrocode}
+% This is a \LaTeXe{} package.
+%    \begin{macrocode}
+%<*package>
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{somedefs}[1994/06/01 v0.03 Toolkit for optional definitions]
+%    \end{macrocode}
+% \begin{macro}{\UseSomeDefinitions}
+% \begin{macro}{\UseAllDefinitions}
+% \begin{macro}{\UseDefinition}
+% \begin{macro}{\ProvidesDefinition}
+% \begin{macro}{\@providesdefinition}
+% \begin{macro}{\@provides@definition}
+% \begin{macro}{\@unprovided@definition}
+%    The package works by having |\UseDefinition{|\meta{name}|}| define
+%    |\name| to be |\@unprovided@definition|.
+%    If |\UseSomeDefinitions| has been called,
+%    then |\ProvidesDefinition| looks to see if |\name|
+%    is |\@unprovided@definition|.  If
+%    |\UseAllDefinitions| has been called, then |\ProvidesDefinition|
+%    does nothing.  If neither has been called, then
+%    |\ProvidesDefinition| produces an error message.
+%    \begin{macrocode}
+\def\UseSomeDefinitions{%
+   \let\ProvidesDefinition\@providesdefinition
+}
+\def\UseAllDefinitions{%
+   \let\ProvidesDefinition\@firstofone
+}
+\def\UseDefinition#1{%
+   \expandafter\let\csname#1\endcsname\@unprovided@definition
+}
+\def\ProvidesDefinition#1{%
+   \PackageError{somedefs}%
+     {No \noexpand\UseSomeDefinitions or \string\UseAllDefinitions}%
+     {The package which used the `somedefs' package has an error.}%
+}
+\def\@providesdefinition#1{\@provides@definition#1\relax
+   \@provides@definition}
+\def\@provides@definition#1#2#3\@provides@definition{%
+   \ifx#2\@unprovided@definition
+      #1#2#3%
+   \fi
+}
+\def\@unprovided@definition{%
+   \PackageError{somedefs}%
+     {Package `somedefs' error: this command was never defined}%
+     {You have requested a command which does not exist.}%
+}
+\@onlypreamble\UseSomeDefinitions
+\@onlypreamble\UseAllDefinitions
+\@onlypreamble\UseDefinition
+\@onlypreamble\ProvidesDefinition
+\@onlypreamble\@providesdefinition
+\@onlypreamble\@provides@definition
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% That's it!
+%    \begin{macrocode}
+%</package>
+%    \end{macrocode}
+%
+% \Finale
+%
+% \endinput
-- 
cgit v1.2.3

