From 481a4b4e4d8b009b5e86afd316395ebefda4bc6c Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Tue, 17 Nov 2009 23:22:39 +0000 Subject: rm keys3, merged into expl3 (Wright mail 17 Nov 2009 19:40:12) git-svn-id: svn://tug.org/texlive/trunk@16052 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/doc/latex/keys3/README | 36 - Master/texmf-dist/doc/latex/keys3/keys3-test.tex | 282 ---- Master/texmf-dist/doc/latex/keys3/keys3.pdf | Bin 476644 -> 0 bytes Master/texmf-dist/doc/latex/keys3/keys3opts2.pdf | Bin 313237 -> 0 bytes Master/texmf-dist/source/latex/keys3/keys3.dtx | 1371 -------------------- Master/texmf-dist/source/latex/keys3/keys3.ins | 89 -- .../texmf-dist/source/latex/keys3/keys3opts2.dtx | 256 ---- .../texmf-dist/source/latex/keys3/keys3opts2.ins | 89 -- Master/texmf-dist/tex/latex/keys3/keys3.sty | 406 ------ Master/texmf-dist/tex/latex/keys3/keys3opts2.sty | 90 -- Master/tlpkg/libexec/ctan2tds | 1 + Master/tlpkg/tlpsrc/collection-latex3.tlpsrc | 1 - Master/tlpkg/tlpsrc/keys3.tlpsrc | 0 13 files changed, 1 insertion(+), 2620 deletions(-) delete mode 100644 Master/texmf-dist/doc/latex/keys3/README delete mode 100644 Master/texmf-dist/doc/latex/keys3/keys3-test.tex delete mode 100644 Master/texmf-dist/doc/latex/keys3/keys3.pdf delete mode 100644 Master/texmf-dist/doc/latex/keys3/keys3opts2.pdf delete mode 100644 Master/texmf-dist/source/latex/keys3/keys3.dtx delete mode 100644 Master/texmf-dist/source/latex/keys3/keys3.ins delete mode 100644 Master/texmf-dist/source/latex/keys3/keys3opts2.dtx delete mode 100644 Master/texmf-dist/source/latex/keys3/keys3opts2.ins delete mode 100644 Master/texmf-dist/tex/latex/keys3/keys3.sty delete mode 100644 Master/texmf-dist/tex/latex/keys3/keys3opts2.sty delete mode 100644 Master/tlpkg/tlpsrc/keys3.tlpsrc (limited to 'Master') diff --git a/Master/texmf-dist/doc/latex/keys3/README b/Master/texmf-dist/doc/latex/keys3/README deleted file mode 100644 index 02413bf1c9e..00000000000 --- a/Master/texmf-dist/doc/latex/keys3/README +++ /dev/null @@ -1,36 +0,0 @@ ---------------------------------------------------------------- -The keys3 package --- Key management for LaTeX3 -Maintained by Joseph Wright -E-mail: joseph.wright@morningstar2.co.uk -Released under the LaTeX Project Public License v1.3c or later -See http://www.latex-project.org/lppl.txt ---------------------------------------------------------------- - -The keys3 package is an experimental implementation of key -management for LaTeX3. The entire package is written in -expl3 code rather than in traditional TeX/LaTeX. The key -model used by keys3 is based on the idea that keys are created -by setting key properties: - - \keys_define:nn { module } { - key .code:n = Hello #1, - key .value_required: - } - -The keys3 package is intended as a method for testing how key -management might be implemented in LaTeX3. Both the methods -used inside the package and the interface provided are intended -to be discussed. Feedback is welcomed either by e-mail -(joseph.wright@morningstar2.co.uk) or to the LaTeX-L mailing -list. - -The experimental nature of keys3 means that it should not be -used in production documents. However, programmers testing -expl3, or keen to work on improved key management systems, -are encouraged to try the package and provide feedback. - -keys3 is *not* an official LaTeX3 team package. Whether any of -the ideas explored here will be taken up by the team is -therefore unknown. However, the keys3 package should provide -ideas on what needs to be available for key management and how -it can be implemented. diff --git a/Master/texmf-dist/doc/latex/keys3/keys3-test.tex b/Master/texmf-dist/doc/latex/keys3/keys3-test.tex deleted file mode 100644 index a3a2c5c3e26..00000000000 --- a/Master/texmf-dist/doc/latex/keys3/keys3-test.tex +++ /dev/null @@ -1,282 +0,0 @@ -% !TEX program = pdflatex -% -% This is a test file demonstrating the keys3 experimental LaTeX3 -% package. This file illustrates the methods made available by keys3 -% for managing key-value input. It also acts as a check, as almost all -% of the keys3 methods are used (with known output) and because a number -% of errors are deliberately raised. - -\documentclass{article} -\usepackage{keys3,xparse} -\usepackage[parfill]{parskip} - -% The document commands for using keys is very simple. - -\ExplSyntaxOn -\DeclareDocumentCommand \SetModuleKeys { m } { - \keys_set:nn { module } {#1} -} -\ExplSyntaxOff - -\begin{document} - -% Each test starts with a short piece of text explaining the property -% being used. Under this, the expected output is given, followed -% if relevant by the text of any error messages expected. - -% Test one: Simply creating a key with one argument and then using it. -% Notice that the text length determines the limits of the argument: -% spaces at either end are ignored. Literal spaces between text are -% counted, as are those enclosed in braces. -% ---------------------------------------------------------------------- -% You said: `Hello World' -% You said: ` Hello World ' -% You said: `' -% ---------------------------------------------------------------------- -\ExplSyntaxOn -\keys_show:nn { module } {unknown} -\keys_set:nn { module } { - clive = india -} -\keys_define:nn { module } { - key .code:n = {You~said:~`#1'\\} -} -\ExplSyntaxOff - -\SetModuleKeys{ - key = Hello World , - key = { Hello World }, - key -} - -% Test two: Creating a multiple-argument key. Here, the arguments -% given need to be at least as many as those required by the code! -% ---------------------------------------------------------------------- -% You said: `A', `B', `C', D'. -% You said: `AAA', `BBB', `CCC', ` DDD'. -% ---------------------------------------------------------------------- -\ExplSyntaxOn -\keys_define:nn { module } { - key .code:Nn = 4 {You said:~`#1',~`#2',~`#3',~`#4'.\\}, -} -\ExplSyntaxOff - -\SetModuleKeys{ - key = ABCD, - key = {AAA}{BBB} {CCC} { DDD} -} - -% Test three: Variants of .code:n and .code:Nn exist which carry out a -% full expansion on code definition. First the :x variant is tested. -% ---------------------------------------------------------------------- -% Temp holds: ABC -% Temp hold: 123 -% ---------------------------------------------------------------------- -\newcommand*{\temp}{123} - -\ExplSyntaxOn -\keys_define:nn { module } { - key-one .code:n = Temp~holds:~\temp\\, - key-two .code:x = Temp~holds:~\temp, -} -\ExplSyntaxOff - -\renewcommand*{\temp}{ABC} - -\SetModuleKeys{ - key-one, - key-two -} - -% Now the :Nx version -% ---------------------------------------------------------------------- -% Arguments: A, B. Temp holds: ABC -% Arguments: 1, 2. Temp hold: 123 -% ---------------------------------------------------------------------- -\renewcommand*{\temp}{123} - -\ExplSyntaxOn -\keys_define:nn { module } { - key-one .code:Nn = 2 {Arguments:~#1,~#2.~Temp~holds:~\temp\\}, - key-two .code:Nx = 2 {Arguments:~#1,~#2.~Temp~holds:~\temp}, -} -\ExplSyntaxOff - -\renewcommand*{\temp}{ABC} -\SetModuleKeys{ - key-one = {A} {B}, - key-two = {1} {2} -} - -% Test four: Values can be required and forbidden with the -% .value_required: and .value_forbidden: properties. -% ---------------------------------------------------------------------- -% All okay -% All okay -% ---------------------------------------------------------------------- -% The key `module/key-one' cannot taken a value: -% the given input `Not allowed' is being ignored. -% -% The key `module/key-two' requires a value -% and is being ignored. -% ---------------------------------------------------------------------- -\ExplSyntaxOn -\keys_define:nn { module } { - key-one .code:n = All okay\\, - key-one .value_forbidden:, - key-two .code:n = #1, - key-two .value_required: -} -\ExplSyntaxOff - -\SetModuleKeys{ - key-one, - key-one = Not allowed, - key-two = All okay, - key-two -} - -% Test five: Keys can be given a default value, to be used if nothing is -% specified by the user. This can be done by name or by value. -% ---------------------------------------------------------------------- -% Default -% Real -% Stuff -% Real -% Literal -% Real -% ---------------------------------------------------------------------- -\ExplSyntaxOn -\renewcommand*{\temp}{Stuff} -\keys_define:nn { module } { - key-one .code:n = #1\\, - key-one .default:n = \temp, - key-two .code:n = #1\\, - key-two .default:V = \temp, - key-three .code:n = #1\\, - key-three .default:n = Literal, -} -\ExplSyntaxOff -\renewcommand*{\temp}{Default} - -\SetModuleKeys{ - key-one, - key-one = Real, - key-two, - key-two = Real, - key-three, - key-three = Real -} - -% Test six: Keys can be created to store data both locally and -% globally. This is illustrated using token list variables. -% ---------------------------------------------------------------------- -% Some content -% Outside -% Some content -% Some content -% ---------------------------------------------------------------------- -\ExplSyntaxOn -\tl_new:Nn \l_temp_tl {Outside} -\tl_new:Nn \g_temp_tl {Outside} -\keys_define:nn { module } { - key-one .set:N = \l_temp_tl, - key-two .set:N = \g_temp_tl, -} - -\begingroup -\SetModuleKeys{ - key-one = Some~content -} -\l_temp_tl\\ -\endgroup -\l_temp_tl\\ - -\begingroup -\SetModuleKeys{ - key-two = Some~content -} -\g_temp_tl\\ -\endgroup -\g_temp_tl\\ -\ExplSyntaxOff - -% Test seven: An expanded version of .set:N is available. -% ---------------------------------------------------------------------- -% Unexpanded -% Expanded -% ---------------------------------------------------------------------- -\ExplSyntaxOn -\tl_set:Nn \l_temp_tl {Expanded} -\tl_new:N \l_tempa_tl -\tl_new:N \l_tempb_tl -\keys_define:nn { module } { - key-one .set:N = \l_tempa_tl, - key-two .set_x:N = \l_tempb_tl, -} - -\SetModuleKeys{ - key-one = \l_temp_tl, - key-two = \l_temp_tl, -} -\tl_set:Nn \l_temp_tl {Unxpanded} -\l_tempa_tl\\ -\l_tempb_tl\\ - -\ExplSyntaxOff - -% Test eight: Choices can be created either from a list of options or -% one by one. Both are tested here by creating a list then adding to it -% with an extra key. Unknown choices lead to an error message. -% ---------------------------------------------------------------------- -% Choice `a' is number 1 -% Choice `b' is number 2 -% Choice `c' is number 3 -% An extra choice -% ---------------------------------------------------------------------- -% Choice `e' unknown for key `module/key': -% the key is being ignored. -% ---------------------------------------------------------------------- -\ExplSyntaxOn -\keys_define:nn { module } { - key .generate_choices:nn = {a,b,c} { - Choice~`\l_keys_choice_tl'~is~number~\int_use:N \l_keys_choice_int\\ - }, - key/d .code:n = An~extra~choice \\ -} -\ExplSyntaxOff - -\SetModuleKeys{ - key = a, - key = b, - key = c, - key = d, - key = e -} - -% Test nine: A completely unknown key should cause an error. -% ---------------------------------------------------------------------- -% The key `module/unknown key' is unknown and is being ignored. -% ---------------------------------------------------------------------- -\SetModuleKeys{ - unknown key = some value -} - -% Test ten: If the special `unknown' key has been set up, however, -% unknown input can be re-directed. -% ---------------------------------------------------------------------- -% You tried to set key `unknown key' to `some value' -% ---------------------------------------------------------------------- -\ExplSyntaxOn -\keys_define:nn { module } { - unknown .code:n = You~tried~to~set~key~`\l_keys_key_tl'~to~`#1' -} -\ExplSyntaxOff - -\SetModuleKeys{ - unknown key = some~value -} - - -\end{document} - diff --git a/Master/texmf-dist/doc/latex/keys3/keys3.pdf b/Master/texmf-dist/doc/latex/keys3/keys3.pdf deleted file mode 100644 index 3c1831ca5e8..00000000000 Binary files a/Master/texmf-dist/doc/latex/keys3/keys3.pdf and /dev/null differ diff --git a/Master/texmf-dist/doc/latex/keys3/keys3opts2.pdf b/Master/texmf-dist/doc/latex/keys3/keys3opts2.pdf deleted file mode 100644 index a0cc876d6b6..00000000000 Binary files a/Master/texmf-dist/doc/latex/keys3/keys3opts2.pdf and /dev/null differ diff --git a/Master/texmf-dist/source/latex/keys3/keys3.dtx b/Master/texmf-dist/source/latex/keys3/keys3.dtx deleted file mode 100644 index 919fee6ffa2..00000000000 --- a/Master/texmf-dist/source/latex/keys3/keys3.dtx +++ /dev/null @@ -1,1371 +0,0 @@ -% \iffalse meta-comment -% !TEX program = pdflatex -% !TEX encoding = ISO-8859-1 -%<*internal> -\iffalse -% -%<*readme> ---------------------------------------------------------------- -The keys3 package --- Key management for LaTeX3 -Maintained by Joseph Wright -E-mail: joseph.wright@morningstar2.co.uk -Released under the LaTeX Project Public License v1.3c or later -See http://www.latex-project.org/lppl.txt ---------------------------------------------------------------- - -The keys3 package is an experimental implementation of key -management for LaTeX3. The entire package is written in -expl3 code rather than in traditional TeX/LaTeX. The key -model used by keys3 is based on the idea that keys are created -by setting key properties: - - \keys_define:nn { module } { - key .code:n = Hello #1, - key .value_required: - } - -The keys3 package is intended as a method for testing how key -management might be implemented in LaTeX3. Both the methods -used inside the package and the interface provided are intended -to be discussed. Feedback is welcomed either by e-mail -(joseph.wright@morningstar2.co.uk) or to the LaTeX-L mailing -list. - -The experimental nature of keys3 means that it should not be -used in production documents. However, programmers testing -expl3, or keen to work on improved key management systems, -are encouraged to try the package and provide feedback. - -keys3 is *not* an official LaTeX3 team package. Whether any of -the ideas explored here will be taken up by the team is -therefore unknown. However, the keys3 package should provide -ideas on what needs to be available for key management and how -it can be implemented. -% -%<*internal> -\fi -\def\nameofplainTeX{plain} -\ifx\fmtname\nameofplainTeX\else - \expandafter\begingroup -\fi -% -%<*install> -\input docstrip.tex -\keepsilent -\askforoverwritefalse -\preamble ---------------------------------------------------------------- -The keys3 package --- Key management for LaTeX3 -Maintained by Joseph Wright -E-mail: joseph.wright@morningstar2.co.uk -Released under the LaTeX Project Public License v1.3c or later -See http://www.latex-project.org/lppl.txt ---------------------------------------------------------------- - -EXPERIMENTAL CODE - -Do not distribute this file without also distributing the -source files specified above. - -Do not distribute a modified version of this file. - -\endpreamble -\postamble - -Copyright (C) 2008-2009 by - Joseph Wright - -It 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 - Joseph Wright. - -This work consists of the file keys3.dtx - and the derived files keys3.pdf, - keys3.sty and - keys3.ins. - -\endpostamble -\usedir{tex/latex/keys3} -\generate{ - \file{\jobname.sty}{\from{\jobname.dtx}{package}} -} -% -%\endbatchfile -%<*internal> -\usedir{source/latex/keys3} -\generate{ - \file{\jobname.ins}{\from{\jobname.dtx}{install}} -} -\nopreamble\nopostamble -\usedir{doc/latex/keys3} -\generate{ - \file{README.txt}{\from{\jobname.dtx}{readme}} -} -\ifx\fmtname\nameofplainTeX - \expandafter\endbatchfile -\else - \expandafter\endgroup -\fi -% -%<*driver|package> -\RequirePackage{expl3} -\GetIdInfo$Id: keys3.dtx 110 2009-06-12 21:27:24Z josephwright $ - {Key management for LaTeX3} -% -%\fi -%\iffalse -%<*driver> -%\fi -\ProvidesFile{\filename.\filenameext} - [\filedate\space v\fileversion\space\filedescription] -%\iffalse -\documentclass[full]{l3doc} -\begin{document} - \DocInput{\filename.\filenameext} -\end{document} -% -% \fi -% -%\title{The \pkg{keys3} package^^A -% \thanks{This file has version number \fileversion, last -% revised \filedate.}\\ -% Key management for \LaTeX3 -%} -%\author{Joseph Wright^^A -% \thanks{E-mail: joseph.wright@morningstar2.co.uk}} -%\date{\filedate} -% -%\maketitle -% -%\begin{documentation} -% -%\section{Key management} -% -% The key--value method is a popular system for creating large numbers -% of settings for controlling function or package behaviour. For the -% user, the system normally results in input of the form -%\begin{verbatim} -% \PackageControlMacro{ -% key-one = value one, -% key-two = value two -% } -%\end{verbatim} -% or -%\begin{verbatim} -% \PackageMacro[ -% key-one = value one, -% key-two = value two -% ]{argument}. -%\end{verbatim} -% For the programmer, the original \pkg{keyval} package gives only -% the most basic interface for this work. All key macros have to be -% created one at a time, and as a result the \pkg{kvoptions} and -% \pkg{xkeyval} packages have been written to extend the ease of -% creating keys. A very different approach has been provided by -% the \pkg{pgfkeys} package, which uses a key--value list to -% generate keys. -% -% The \pkg{keys3} package is aimed at creating a programming -% interface for key--value controls in \LaTeX3. Keys are -% created using a key--value interface, in a similar manner to -% \pkg{pgfkeys}. Each key is created by setting one or more -% \emph{properties} of the key: -%\begin{verbatim} -% \keys_define:nn { module } -% key-one .code:n = code including parameter #1, -% key-two .set = \l_module_store_tl -% } -%\end{verbatim} -% These values can then be set as with other key--value approaches: -%\begin{verbatim} -% \keys_set:nn { module } -% key-one = value one, -% key-two = value two -% } -%\end{verbatim} -% -% At a document level, the \cs{keys_set:nn} macro used within a -% document function. For \LaTeXe, a generic set up function could be -% created with -%\begin{verbatim} -% \newcommand*\SomePackageSetup[1]{% -% \@nameuse{keys_set:nn}{module}{#1}% -% } -%\end{verbatim} -% or to use key--value input as the optional argument for a macro: -%\begin{verbatim} -% \newcommand*\SomePackageMacro[2][]{% -% \begingroup -% \@nameuse{keys_set:nn}{module}{#1}% -% % Main code for \SomePackageMacro -% \endgroup -% } -%\end{verbatim} -% The same concepts using \pkg{xparse} for \LaTeX3 use: -%\begin{verbatim} -% \DeclareDocumentCommand \SomePackageSetup { m } { -% \keys_set:nn { module } { #1 } -% } -% \DeclareDocumentCommand \SomePackageMacro { o m } { -% \group_begin: -% \keys_set:nn { module } { #1 } -% % Main code for \SomePackageMacro -% \group_end: -% } -%\end{verbatim} -% -% Key names may contain any tokens, as they are handled internally -% using \cs{tl_to_str:n}. As will be discussed in -% section~\ref{sec:subdivision}, it is suggested that the character -% ``\texttt{/}'' is reserved for sub-division of keys into logical -% groups. Macros are \emph{not} expanded when creating key names, -% and so: -%\begin{verbatim} -% \tl_set:Nn \l_module_tmp_tl { key } -% \keys_define:nn { module } { -% \l_module_tmp_tl .code:n = code -% } -%\end{verbatim} -% will create a key called \cs{l_module_tmp_tl}, and not one called -% \texttt{key}. -% -%\subsection{Creating keys} -% -%\begin{function}{\keys_define:nn} -% \begin{syntax} -% "\keys_define:nn" -% \end{syntax} -% Parses the and defines the keys listed there for -% . This function is designed for use in code, and therefore -% does not check the category codes of characters or ignore spaces. -%\end{function} -% -% Setting up and altering keys is carried out using one or more -% properties. The properties determine how a key acts, and may require -% zero, one or two argument: this is indicated by an argument specifier, -% in the same way as a standard \LaTeX3 function. If only a single -% argument is required, braces around \texttt{n} arguments can be -% omitted.\footnote{This is a general feature of key--value input -% methods.} -% -%\begin{function}{.choice:} -% \begin{syntax} -% .choice: -% \end{syntax} -% Sets to act as a multiple choice key. Creating choices -% is discussed in section~\ref{sec:choice}. -%\end{function} -% -%\begin{function}{ -% .code:n| -% .code:x -% } -% \begin{syntax} -% .code:n = -% \end{syntax} -% Stores the for execution when is called. The can -% include one parameter (|#1|). -%\end{function} -% -%\begin{function}{ -% .code:Nn| -% .code:Nx -% } -% \begin{syntax} -% .code:Nn = -% \end{syntax} -% Stores the for execution when is called. The can -% include parameters, which can be in the standard \TeX\ -% range 0--9. -%\end{function} -% -%\begin{function}{ -% .default:n| -% .default:V| -% } -% \begin{syntax} -% .default:n = -% \end{syntax} -% Creates a default value for , which is used if no value is -% given. -% \begin{texnote} -% The is stored as a token list variable, and this -% means that there are some restrictions on the nature of . -% \end{texnote} -%\end{function} -% -%\begin{function}{ -% .generate_choices:nn| -% .generate_choices:nx| -% } -% \begin{syntax} -% .generate_choices:nn = -% \end{syntax} -% Makes a multiple choice key, accepting the choices specified -% in . Each choice will execute if it given. Within -% , the name of the current choice is available as -% \cs{l_keys_choice_tl}, and its position in the as -% \cs{l_keys_choice_int}. Multiple choices are discussed further in -% section~\ref{sec:choice}. -%\end{function} -% -%\begin{function}{ -% .set:N| -% .set_x:N -%} -% \begin{syntax} -% .set:N = -% \end{syntax} -% Defines to store the value given in . The type and -% scope (local or global) of are determined from the -% name. The \texttt{x} version performs an expanded assignment. -% \begin{texnote} -% A \cs{_set:Nn} function must exist to allow setting -% of the . -% \end{texnote} -%\end{function} -% -%\begin{function}{ -% .set_bool:N| -% .set_bool_inverse:N| -% } -% \begin{syntax} -% .set_bool:N = -% .set_bool_inverse:N = -% \end{syntax} -% Defines to set to (which must be either -% \texttt{true} or \texttt{false}). The \texttt{inverse} version sets -% the switch to the opposite logical sense to the argument given. -%\end{function} -% -%\begin{function}{ -% .value_forbidden:| -% .value_required:| -% } -% \begin{syntax} -% .value_forbidden: -% \end{syntax} -% Flags for forbidding and requiring a for . -%\end{function} -% -%\subsection{Sub-dividing keys} -%\label{sec:subdivision} -% -% When creating large numbers of keys, it may be desirable to divide -% them into several sub-groups for a given module. This can be achieved -% either by adding a sub-division to the module name: -%\begin{verbatim} -% \keys_define:nn { module / subgroup } { -% key .code:n = code -% } -%\end{verbatim} -% or to the key name: -%\begin{verbatim} -% \keys_define:nn { module } { -% subgroup / key .code:n = code -% } -%\end{verbatim} -% As illustrated, the best choice of token for sub-dividing keys in -% this way is ``\texttt{/}''. This is because of the method that is -% used to represent keys internally. Both of the above code fragments -% set the same key, which has full name \texttt{module/subgroup/key}. -% -% As will be illustrated in the next section, this subdivision is -% particularly relevant to making multiple choices. -% -%\subsection{Multiple choices} -%\label{sec:choice} -% -% In \pkg{keys3}, multiple choices are created by setting the -% \texttt{.choice:} property: -%\begin{verbatim} -% \keys_define:nn { module } { -% key .choice: -% } -%\end{verbatim} -% For keys which are set up as choices, the valid choices are generated -% by creating sub-keys of the choice key. This can be carried out in -% two ways. -% -% In many cases, choices execute similar code which is dependant only -% on the name of the choice or the position of the choice in the -% list of choices. Here, the keys can share the same code, and can -% be rapidly created using the \texttt{.generate_choices:nn} -% property: -%\begin{verbatim} -% \keys_define:nn { module } { -% key .generate_choices:nn = { -% choice-a, choice-b, choice-c -% } { -% You~gave~choice~``\l_keys_choice_tl'',~ -% which~is~in~position~\l_keys_choice_int -% \~in~the~list. -% } -% } -%\end{verbatim} -% -%\begin{variable}{ -% \l_keys_choice_tl| -% \l_keys_choice_int| -%} -% Inside the code block, the variables \cs{l_keys_choice_tl} and -% \cs{l_keys_choice_int} are available to indicate the name of the -% current choice, and its position in the comma list. The position -% is indexed from \(1\). -%\end{variable} -% -% On the other hand, it is sometimes useful to create choices which -% use entirely different code from one another. This can be achieved -% by setting the \texttt{.choice:} property of a key, then manually -% defining sub-keys. -%\begin{verbatim} -% \keys_define:nn { module } { -% key choices:n, -% key / choice-a .code:n = code-a, -% key / choice-b .code:n = code-b, -% key / choice-c .code:n = code-c, -% } -%\end{verbatim} -% -% It is possible to mix the two methods, but manually-created choices -% should \emph{not} use \cs{l_keys_choice_tl} or \cs{l_keys_choice_int}. -% -%\subsection{Setting keys} -% -%\begin{function}{\keys_set:nn} -% \begin{syntax} -% "\keys_set:nn" -% \end{syntax} -% Parses the , and sets those keys which are defined -% for . The behaviour on finding an unknown key can be -% set by defining a special \texttt{unknown} key: this will be -% illustrated later. In contrast to \cs{keys_define:nn}, this function -% does check category codes and ignore spaces, and is therefore -% suitable for user input. -%\end{function} -% -% If a key is not known, \cs{keys_set:nn} will look for a special -% \texttt{unknown} key for the same module. This mechanism can be -% used to create new keys from user input. -%\begin{verbatim} -% \keys_define:nn { module } { -% unknown .code:n = -% You~tried~to~set~key~`\l_keys_path_tl'~to~`#1' -% } -%\end{verbatim} -% -%\begin{variable}{\l_keys_key_tl} -% When processing an unknown key, the name of the key is available -% as \cs{l_keys_key_tl}. Note that this will have been processed -% using \cs{tl_to_str:N}. The value passed to the key (if any) is -% available as the macro parameter |#1|. -%\end{variable} -% -%\subsection{Examining keys: internal representation} -% -%\begin{function}{\keys_show:nn} -% \begin{syntax} -% "\keys_show:nn" -% \end{syntax} -% Shows the internal representation of a . The function which -% executes a is called \cs{keys > /.cmd:w}. -%\end{function} -% -%\subsection{Internal functions} -% -%\begin{function}{ -% \keys_bool_set:N | -% \keys_bool_set_inverse:N -%} -% \begin{syntax} -% "\keys_bool_set:N" -% \end{syntax} -% Creates code to set when is given. -%\end{function} -% -%\begin{function}{\keys_choice_make:} -% \begin{syntax} -% "\keys_choice_make:" -% \end{syntax} -% Makes a choice key. -%\end{function} -% -%\begin{function}{\keys_choices_generate:nx} -% \begin{syntax} -% "\keys_choices_generate:nx" -% \end{syntax} -% Makes choices for , each using . -%\end{function} -% -%\begin{function}{\keys_choice_find:n} -% \begin{syntax} -% "\keys_choice_find:n" -% \end{syntax} -% Searches for as a sub-key of . -%\end{function} -% -%\begin{function}{ -% \keys_cmd_set:nNn | -% \keys_cmd_set:nNx -%} -% \begin{syntax} -% "\keys_cmd_set:nNn" -% \end{syntax} -% Creates a function for , taking and using . -%\end{function} -% -%\begin{function}{ -% \keys_default_set:n | -% \keys_default_set:V -%} -% \begin{syntax} -% "\keys_default_set:n" -% \end{syntax} -% Sets for . -%\end{function} -% -%\begin{function}{ -% \keys_define_elt:n | -% \keys_define_elt:nn -%} -% \begin{syntax} -% "\keys_define_elt:n" -% \end{syntax} -% Processing functions for key--value pairs when defining keys. -%\end{function} -% -%\begin{function}{\keys_define_key:n} -% \begin{syntax} -% "\keys_define_key:n" -% \end{syntax} -% Defines . -%\end{function} -% -%\begin{function}{\keys_execute:} -% \begin{syntax} -% "\keys_execute:" -% \end{syntax} -% Executes . -%\end{function} -% -%\begin{function}{\keys_execute_unknown:} -% \begin{syntax} -% "\keys_execute_unknown:" -% \end{syntax} -% Handles unknown names. -%\end{function} -% -%\begin{function}{\keys_if_value_requirement:nTF} -% \begin{syntax} -% "\keys_if_value_requirement:nTF" -% ~~~~ -% \end{syntax} -% Check if applies to . -%\end{function} -% -%\begin{function}{\keys_property_find:n} -% \begin{syntax} -% "\keys_property_find:n" -% \end{syntax} -% Separates from . -%\end{function} -% -%\begin{function}{\keys_property_new:nn} -% \begin{syntax} -% "\keys_property_new:nn" -% \end{syntax} -% Makes a new expanding to -%\end{function} -% -%\begin{function}{\keys_property_undefine:n} -% \begin{syntax} -% "\keys_property_undefine:n" -% \end{syntax} -% Deletes of . -%\end{function} -% -%\begin{function}{ -% \keys_set_elt:n | -% \keys_set_elt:nn -%} -% \begin{syntax} -% "\keys_set_elt:n" -% \end{syntax} -% Processing functions for key--value pairs when setting keys. -%\end{function} -% -%\begin{function}{\keys_tmp:w} -% \begin{syntax} -% "\keys_tmp:w" -% \end{syntax} -% Used to store to execute a . -%\end{function} -% -%\begin{function}{\keys_value_or_default:n} -% \begin{syntax} -% "\keys_value_or_default:n" -% \end{syntax} -% Sets \cs{l_keys_value_toks} to , or if -% was not given and if is available. -%\end{function} -% -%\begin{function}{\keys_value_requirement:n} -% \begin{syntax} -% "\keys_value_requirement:nn" -% \end{syntax} -% Sets to have concerning . -%\end{function} -% -%\begin{function}{\keys_variable_set:NN} -% \begin{syntax} -% "\keys_variable_set:NN" -% \end{syntax} -% Sets to assign to -%\end{function} -% -%\begin{function}{ -% \keys_variable_get_scope:N / (EXP) | -% \keys_variable_get_type:N / (EXP) -%} -% \begin{syntax} -% "\keys_variable_get_scope:N" -% \end{syntax} -% Returns the scope (\texttt{g} or blank) or the type of . -%\end{function} -% -%\subsection{Variables and constants} -% -%\begin{variable}{ -% \c_keys_properties_root_tl| -% \c_keys_root_tl -%} -% The root paths for keys and properties. -%\end{variable} -% -%\begin{variable}{ -% \c_keys_value_forbidden_tl| -% \c_keys_value_required_tl -%} -% Marker text containers. -%\end{variable} -% -%\begin{variable}{ -% \l_keys_module_tl| -% \l_keys_path_tl -%} -% Various key paths need to be stored. -%\end{variable} -% -%\begin{variable}{\l_keys_no_value_bool} -% A marker for ``no value'' as key input. -%\end{variable} -% -%\begin{variable}{\l_keys_value_toks} -% Holds the currently supplied value. -%\end{variable} -% -%\end{documentation} -% -%\begin{implementation} -% -% The usual preliminaries. -% \begin{macrocode} -%<*package> -\ProvidesExplPackage - {\filename}{\filedate}{\fileversion}{\filedescription} -% \end{macrocode} -% -%\subsubsection{Variables and constants} -% -%\begin{macro}{\c_keys_root_tl} -%\begin{macro}{\c_keys_properties_root_tl} -% Where the keys are really stored. -% \begin{macrocode} -\tl_new:Nn \c_keys_root_tl { keys~>~ } -\tl_new:Nn \c_keys_properties_root_tl { keys_properties } -% \end{macrocode} -%\end{macro} -%\end{macro} -% -%\begin{macro}{\c_keys_value_forbidden_tl} -%\begin{macro}{\c_keys_value_required_tl} -% Two marker token lists. -% \begin{macrocode} -\tl_new:Nn \c_keys_value_forbidden_tl { forbidden } -\tl_new:Nn \c_keys_value_required_tl { required } -% \end{macrocode} -%\end{macro} -%\end{macro} -% -%\begin{macro}{\l_keys_choice_int} -%\begin{macro}{\l_keys_choice_tl} -% Used for the multiple choice system. -% \begin{macrocode} -\int_new:N \l_keys_choice_int -\tl_new:N \l_keys_choice_tl -% \end{macrocode} -%\end{macro} -%\end{macro} -% -%\begin{macro}{\l_keys_key_tl} -%\begin{macro}{\l_keys_path_tl} -% Storage for the current key name and the path of the key (key name -% plus module name). -% \begin{macrocode} -\tl_new:N \l_keys_key_tl -\tl_new:N \l_keys_path_tl -% \end{macrocode} -%\end{macro} -%\end{macro} -% -%\begin{macro}{\l_keys_module_tl} -% The module for an entire set of keys. -% \begin{macrocode} -\tl_new:N \l_keys_module_tl -% \end{macrocode} -%\end{macro} -% -%\begin{macro}{\l_keys_no_value_bool} -% To indicate that no value has been given. -% \begin{macrocode} -\bool_new:N \l_keys_no_value_bool -% \end{macrocode} -%\end{macro} -% -%\begin{macro}{\l_keys_value_toks} -% A token register for the given value. -% \begin{macrocode} -\toks_new:N \l_keys_value_toks -% \end{macrocode} -%\end{macro} -% -%\subsubsection{Internal functions} -% -%\begin{macro}{\keys_bool_set:N} -%\begin{macro}{\keys_bool_set_inverse:N} -%\begin{macro}[aux]{\keys_bool_set_aux:N} -% Boolean keys are really just choices, but all done by hand. -% \begin{macrocode} -\cs_new_nopar:Nn \keys_bool_set:N { - \keys_cmd_set:nNx { \l_keys_path_tl / true } 1 { - \exp_not:c { bool_ \keys_variable_get_scope:N #1 set_true:N } - \exp_not:N #1 - } - \keys_cmd_set:nNx { \l_keys_path_tl / false } 1 { - \exp_not:N \use:c - { bool_ \keys_variable_get_scope:N #1 set_false:N } - \exp_not:N #1 - } - \keys_bool_set_aux:N #1 -} -\cs_new_nopar:Nn \keys_bool_set_inverse:N { - \keys_cmd_set:nNx { \l_keys_path_tl / true } 1 { - \exp_not:c { bool_ \keys_variable_get_scope:N #1 set_false:N } - \exp_not:N #1 - } - \keys_cmd_set:nNx { \l_keys_path_tl / false } 1 { - \exp_not:c { bool_ \keys_variable_get_scope:N #1 set_true:N } - \exp_not:N #1 - } - \keys_bool_set_aux:N #1 -} -\cs_new_nopar:Nn \keys_bool_set_aux:N { - \keys_choice_make: - \cs_if_exist:NF #1 { - \bool_new:N #1 - } - \keys_default_set:n { true } -} -% \end{macrocode} -%\end{macro} -%\end{macro} -%\end{macro} -% -%\begin{macro}{\keys_choice_find:n} -% Executing a choice has two parts. First, try the choice given, then -% if that fails call the unknown key. That will exist, as it is created -% when a choice is first made. So there is no need for any escape code. -% \begin{macrocode} -\cs_new_nopar:Nn \keys_choice_find:n { - \keys_execute_aux:nn { \l_keys_path_tl / #1 } { - \keys_execute_aux:nn { \l_keys_path_tl / unknown } { } - } -} -% \end{macrocode} -%\end{macro} -% -%\begin{macro}{\keys_choice_make:} -% To make a choice from a key, two steps: set the code, and set the -% unknown key. -% \begin{macrocode} -\cs_new_nopar:Nn \keys_choice_make: { - \keys_cmd_set:nNn { \l_keys_path_tl } 1 { - \keys_choice_find:n {##1} - } - \keys_cmd_set:nNn { \l_keys_path_tl / unknown } 1 { - \msg_error:nnxx { keys } { choice~unknown } - { \l_keys_path_tl } {##1} - } -} -% \end{macrocode} -%\end{macro} -% -%\begin{macro}{\keys_choices_generate:nx} -%\begin{macro}[aux]{\keys_choices_generate_aux:n} -% Creating multiple-choices means setting up the ``indicator'' code, -% then applying whatever the user wanted. -% \begin{macrocode} -\cs_new:Nn \keys_choices_generate:nx { - \keys_choice_make: - \int_zero:N \l_keys_choice_int - \cs_set_nopar:Nn \keys_choices_generate_aux:n { - \int_incr:N \l_keys_choice_int - \keys_cmd_set:nNx { \l_keys_path_tl / ##1 } 1 { - \exp_not:n { \tl_set:Nn \l_keys_choice_tl } {##1} - \exp_not:n { \int_set:Nn \l_keys_choice_int } - { \int_use:N \l_keys_choice_int } - #2 - } - } - \clist_map_function:nN {#1} \keys_choices_generate_aux:n -} -\cs_new_nopar:Nn \keys_choices_generate_aux:n { } -% \end{macrocode} -%\end{macro} -%\end{macro} -% -%\begin{macro}{\keys_cmd_set:nNn} -%\begin{macro}{\keys_cmd_set:nNx} -%\begin{macro}[aux]{\keys_cmd_set_aux:nN} -% Creating a new command means setting properties and then creating -% a function with the correct number of arguments. -% \begin{macrocode} -\cs_new:Nn \keys_cmd_set:nNn { - \keys_cmd_set_aux:nN {#1} #2 - \cs_generate_from_arg_count:cNnn { \c_keys_root_tl #1 .cmd:w } - \cs_set:Npn #2 {#3} -} -\cs_new:Nn \keys_cmd_set:nNx { - \keys_cmd_set_aux:nN {#1} #2 - \cs_generate_from_arg_count:cNnn { \c_keys_root_tl #1 .cmd:w } - \cs_set:Npx #2 {#3} -} -\cs_new_nopar:Nn \keys_cmd_set_aux:nN { - \keys_property_undefine:n { #1 .default_tl } - \num_set:cn { \c_keys_root_tl #1 .args_num } {#2} - \tl_set:cn { \c_keys_root_tl #1 .req_tl } { } -} -% \end{macrocode} -%\end{macro} -%\end{macro} -%\end{macro} -% -%\begin{macro}{\keys_default_set:n} -%\begin{macro}{\keys_default_set:V} -% Setting a default value is easy. -% \begin{macrocode} -\cs_new:Nn \keys_default_set:n { - \tl_set:cn { \c_keys_root_tl \l_keys_path_tl .default_tl } {#1} -} -\cs_generate_variant:Nn \keys_default_set:n { V } -% \end{macrocode} -%\end{macro} -%\end{macro} -% -%\begin{macro}{\keys_define:nn} -% The main key-defining function mainly sets up things for \pkg{l3keyval} -% to use. -% \begin{macrocode} -\cs_new:Nn \keys_define:nn { - \tl_set:Nn \l_keys_module_tl {#1} - \cs_set_eq:NN \KV_key_no_value_elt:n \keys_define_elt:n - \cs_set_eq:NN \KV_key_value_elt:nn \keys_define_elt:nn - \KV_parse_no_space_removal_no_sanitize:n {#2} -} -% \end{macrocode} -%\end{macro} -% -%\begin{macro}{\keys_define_elt:n} -%\begin{macro}{\keys_define_elt:nn} -% The element processors for defining keys. -% \begin{macrocode} -\cs_new:Nn \keys_define_elt:n { - \bool_set_true:N \l_keys_no_value_bool - \keys_define_elt_aux:nn {#1} { } -} -\cs_new:Nn \keys_define_elt:nn { - \bool_set_false:N \l_keys_no_value_bool - \keys_define_elt_aux:nn {#1} {#2} -} -% \end{macrocode} -%\end{macro} -%\end{macro} -%\begin{macro}[aux]{\keys_define_elt_aux:nn} -% The auxiliary function does most of the work. -% \begin{macrocode} -\cs_new:Nn \keys_define_elt_aux:nn { - \keys_property_find:n {#1} - \cs_set_eq:Nc \keys_tmp:w - { \c_keys_properties_root_tl \l_keys_key_tl } - \cs_if_exist:NTF \keys_tmp:w { - \keys_define_key:n {#2} - }{ - \msg_error:nnx { keys } { property~unknown } - { \l_keys_key_tl } - } -} -% \end{macrocode} -%\end{macro} -% -%\begin{macro}{\keys_define_key:n} -% Defining a new key means finding the code for the appropriate -% property then running it. As properties have signatures, a check -% can be made for required values without needing anything set -% explicitly. -% \begin{macrocode} -\cs_new:Nn \keys_define_key:n { - \bool_if:NTF \l_keys_no_value_bool { - \intexpr_compare:nTF { - \exp_args:Nc \cs_get_arg_count_from_signature:N - { \l_keys_key_tl } = \c_zero - } { - \keys_tmp:w - }{ - \msg_error:nnx { keys } { property~value~required } - { \l_keys_key_tl } - } - }{ - \intexpr_compare:nTF { - \exp_args:Nc \cs_get_arg_count_from_signature:N - { \l_keys_key_tl } = \c_one - } { - \keys_tmp:w {#1} - }{ - \keys_tmp:w #1 - } - } -} -% \end{macrocode} -%\end{macro} -% -%\begin{macro}{\keys_execute:} -%\begin{macro}{\keys_execute_unknown:} -%\begin{macro}[aux]{\keys_execute_aux:nn} -% Actually executing a key is done in two parts. First, look for the -% key itself, then look for the \texttt{unknown} key with the same -% path. If both of these fail, complain! -% \begin{macrocode} -\cs_new_nopar:Nn \keys_execute: { - \keys_execute_aux:nn { \l_keys_path_tl } { - \keys_execute_unknown: - } -} -\cs_new_nopar:Nn \keys_execute_unknown: { - \keys_execute_aux:nn { \l_keys_module_tl / unknown } { - \msg_error:nnx { keys } { key~unknown } { \l_keys_path_tl } - } -} -% \end{macrocode} -% If there is only one argument required, it is wrapped in braces so -% that everything is passed through properly. On the other hand, if more -% than one is needed it is down to the user to have put things in -% correctly! -% \begin{macrocode} -\cs_new_nopar:Nn \keys_execute_aux:nn { - \cs_set_eq:Nc \keys_tmp:w { \c_keys_root_tl #1 .cmd:w } - \cs_if_exist:NTF \keys_tmp:w { - \intexpr_compare:nTF { - \num_use:c { \c_keys_root_tl #1 .args_num } = \c_one - } { - \exp_args:NV \keys_tmp:w \l_keys_value_toks - }{ - \exp_after:wN \keys_tmp:w \toks_use:N \l_keys_value_toks - } - }{ - #2 - } -} -% \end{macrocode} -%\end{macro} -%\end{macro} -%\end{macro} -% -%\begin{macro}{\keys_if_value_requirement:nTF} -% To test if a value is required or forbidden. Only one version is -% needed, so done by hand. -% \begin{macrocode} -\cs_new_nopar:Npn \keys_if_value_requirement:nTF #1 { - \tl_if_eq:ccTF { c_keys_value_ #1 _tl } { - \c_keys_root_tl \l_keys_path_tl .req_tl - } -} -% \end{macrocode} -%\end{macro} -% -%\begin{macro}{\keys_property_find:n} -%\begin{macro}[aux]{\keys_property_find_aux:w} -% Searching for a property means finding the last ``\texttt{.}'' in -% the input, and storing the text before and after it. -% \begin{macrocode} -\cs_new_nopar:Nn \keys_property_find:n { - \tl_set:Nx \l_keys_path_tl { \l_keys_module_tl / } - \tl_if_in:nnTF {#1} {.} { - \keys_property_find_aux:n {#1} - }{ - \msg_error:nnx { keys } { no~property } { #1 } - } -} -\cs_new_nopar:Nn \keys_property_find_aux:n { - \keys_property_find_aux:w #1 \q_stop -} -\cs_new_nopar:Npn \keys_property_find_aux:w #1 . #2 \q_stop { - \tl_if_in:nnTF {#2} {.} { - \tl_set:Nx \l_keys_path_tl { \l_keys_path_tl . #1 } - \keys_property_find_aux:w #2 \q_stop - }{ - \tl_set:Nx \l_keys_path_tl { \l_keys_path_tl \tl_to_str:n {#1} } - \tl_set:Nn \l_keys_key_tl { . #2 } - } -} -% \end{macrocode} -%\end{macro} -%\end{macro} -% -%\begin{macro}{\keys_property_new:nn} -% Creating a new propery is simply a case of making the correctly-named -% function. -% \begin{macrocode} -\cs_new_nopar:Nn \keys_property_new:nn { - \cs_new:cn { \c_keys_properties_root_tl #1 } {#2} -} -% \end{macrocode} -%\end{macro} -% -%\begin{macro}{\keys_property_undefine:n} -% Removing a property means undefining it. -% \begin{macrocode} -\cs_new_nopar:Nn \keys_property_undefine:n { - \cs_set_eq:cN { \c_keys_root_tl #1 } \c_undefined -} -% \end{macrocode} -%\end{macro} -% -%\begin{macro}{\keys_set:nn} -% The main setting function just does the set up to get \pkg{l3keyval} -% to do the hard work. -% \begin{macrocode} -\cs_new:Nn \keys_set:nn { - \tl_set:Nn \l_keys_module_tl {#1} - \cs_set_eq:NN \KV_key_no_value_elt:n \keys_set_elt:n - \cs_set_eq:NN \KV_key_value_elt:nn \keys_set_elt:nn - \KV_parse_space_removal_sanitize:n {#2} -} -% \end{macrocode} -%\end{macro} -% -%\begin{macro}{\keys_set_elt:n} -%\begin{macro}{\keys_set_elt:nn} -% The two element processors are almost identical, and pass the data -% through to the underlying auxiliary, which does the work. -% \begin{macrocode} -\cs_new:Nn \keys_set_elt:n { - \bool_set_true:N \l_keys_no_value_bool - \keys_set_elt_aux:nn {#1} { } -} -\cs_new:Nn \keys_set_elt:nn { - \bool_set_false:N \l_keys_no_value_bool - \keys_set_elt_aux:nn {#1} {#2} -} -% \end{macrocode} -%\end{macro} -%\end{macro} -%\begin{macro}[aux]{\keys_set_elt_aux:nn} -%\begin{macro}[aux]{\keys_set_elt_aux:} -% First, set the current path and add a default if needed. There are -% then checks to see if the a value is required or forbidden. If -% everything passes, move on to execute the code. -% \begin{macrocode} -\cs_new:Nn \keys_set_elt_aux:nn { - \tl_set:Nx \l_keys_key_tl { \tl_to_str:n {#1} } - \tl_set:Nx \l_keys_path_tl { \l_keys_module_tl / \l_keys_key_tl } - \keys_value_or_default:n {#2} - \keys_if_value_requirement:nTF { required } { - \bool_if:NTF \l_keys_no_value_bool { - \msg_error:nnx { keys } { key~value~required } - { \l_keys_path_tl } - }{ - \keys_set_elt_aux: - } - }{ - \keys_set_elt_aux: - } -} -\cs_new_nopar:Nn \keys_set_elt_aux: { - \keys_if_value_requirement:nTF { forbidden } { - \bool_if:NTF \l_keys_no_value_bool { - \keys_execute: - }{ - \msg_error:nnxx { keys} { key~value~forbidden } - { \l_keys_path_tl } - { \toks_use:N \l_keys_value_toks } - } - }{ - \keys_execute: - } -} -% \end{macrocode} -%\end{macro} -%\end{macro} -% -%\begin{macro}{\keys_show:nn} -% Showing a key is just a question of using the correct name. -% \begin{macrocode} -\cs_new_nopar:Nn \keys_show:nn { - \cs_show:c { \c_keys_root_tl #1 / \tl_to_str:n {#2} .cmd:w } -} -% \end{macrocode} -%\end{macro} -% -%\begin{macro}{\keys_tmp:w} -% This scratch function is used to actually execute keys. -% \begin{macrocode} -\cs_new:Npn \keys_tmp:w {} -% \end{macrocode} -%\end{macro} -% -%\begin{macro}{\keys_value_or_default:n} -% If a value is given, return it as |#1|, otherwise send a default if -% available. -% \begin{macrocode} -\cs_new:Nn \keys_value_or_default:n { - \toks_set:Nn \l_keys_value_toks {#1} - \bool_if:NT \l_keys_no_value_bool { - \cs_if_exist:cT { \c_keys_root_tl \l_keys_path_tl .default_tl } { - \toks_set:Nv \l_keys_value_toks { - \c_keys_root_tl \l_keys_path_tl .default_tl - } - } - } -} -% \end{macrocode} -%\end{macro} -% -%\begin{macro}{\keys_value_requirement:n} -% Values can be required or forbidden by having the appropriate marker -% set. -% \begin{macrocode} -\cs_new_nopar:Nn \keys_value_requirement:n { - \tl_set_eq:cc { \c_keys_root_tl \l_keys_path_tl .req_tl } - { c_keys_value_ #1 _tl } -} -% \end{macrocode} -%\end{macro} -% -%\begin{macro}{\keys_variable_get_scope:N} -%\begin{macro}[aux]{\keys_variable_get_scope_aux:N} -%\begin{macro}{\keys_variable_get_type:N} -%\begin{macro}[aux]{\keys_variable_get_type:w} -% Expandable functions to find the type of a variable, and to -% return \texttt{g} if the variable is global. -% \begin{macrocode} -\cs_new_nopar:Nn \keys_variable_get_scope:N { - \tl_if_eq:xxT { \token_to_str:N g } - { \keys_variable_get_scope_aux:N #1 } - { g } -} -\cs_new_nopar:Nn \keys_variable_get_scope_aux:N { - \exp_last_unbraced:NNo \use_i:nn \use_i_delimit_by_q_stop:nw - \token_to_str:N #1 \q_stop -} -\group_begin: - \char_set_lccode:nn {`\&} {`\_} - \char_make_other:N \& -\tl_to_lowercase:n { - \group_end: - \cs_new_nopar:Nn \keys_variable_get_type:N { - \exp_after:wN \keys_variable_get_type_aux:w - \token_to_str:N #1 & \q_nil \q_stop - } - \cs_new_nopar:Npn \keys_variable_get_type_aux:w #1 & #2 \q_stop { - \quark_if_nil:nTF {#2} { - #1 - }{ - \keys_variable_get_type_aux:w #2 \q_stop - } - } -} -% \end{macrocode} -%\end{macro} -%\end{macro} -%\end{macro} -%\end{macro} -% -%\begin{macro}{\keys_variable_set:NN} -% To set a variable, there is first a check so that it must exist. -% The setting function is then created by recovering the type and -% scope from the variable name. -% \begin{macrocode} -\cs_new_nopar:Nn \keys_variable_set:NN { - \cs_if_exist:NF #2 { - \use:c { \keys_variable_get_type:N #2 _new:N } #2 - } - \keys_cmd_set:nNx { \l_keys_path_tl } 1 { - \exp_not:c { - \keys_variable_get_type:N #2 _ - \keys_variable_get_scope:N #2 set:N #1 - } \exp_not:N #2 {##1} - } -} -% \end{macrocode} -%\end{macro} -% -%\begin{macro}{.choice:} -% Making a choice is handled internally, as it is also needed by -% \texttt{.generate_choices:nn}. -% \begin{macrocode} -\keys_property_new:nn { .choice: } { - \keys_choice_make: -} -% \end{macrocode} -%\end{macro} -% -%\begin{macro}{.code:n} -%\begin{macro}{.code:x} -%\begin{macro}{.code:Nn} -%\begin{macro}{.code:Nx} -% Creating code is simply a case of passing through to the underlying -% \texttt{set} function. -% \begin{macrocode} -\keys_property_new:nn { .code:n } { - \keys_cmd_set:nNn { \l_keys_path_tl } 1 {#1} -} -\keys_property_new:nn { .code:Nn } { - \keys_cmd_set:nNn { \l_keys_path_tl } #1 {#2} -} -\keys_property_new:nn { .code:x } { - \keys_cmd_set:nNx { \l_keys_path_tl } 1 {#1} -} -\keys_property_new:nn { .code:Nx } { - \keys_cmd_set:nNx { \l_keys_path_tl } #1 {#2} -} -% \end{macrocode} -%\end{macro} -%\end{macro} -%\end{macro} -%\end{macro} -% -%\begin{macro}{.default:n} -%\begin{macro}{.default:V} -% Expansion is left to the internal functions. -% \begin{macrocode} -\keys_property_new:nn { .default:n } { - \keys_default_set:n {#1} -} -\keys_property_new:nn { .default:V } { - \keys_default_set:V #1 -} -% \end{macrocode} -%\end{macro} -%\end{macro} -% -%\begin{macro}{.generate_choices:nn} -%\begin{macro}{.generate_choices:nx} -% Making choices is expansion-dependent. -% \begin{macrocode} -\keys_property_new:nn { .generate_choices:nn } { - \keys_choices_generate:nx {#1} { \exp_not:n {#2} } -} -\keys_property_new:nn { .generate_choices:nx } { - \keys_choices_generate:nx {#1} {#2} -} -% \end{macrocode} -%\end{macro} -%\end{macro} -% -%\subsubsection{Properties} -% -%\begin{macro}{.set:N} -%\begin{macro}{.set_x:N} -% Setting a variable is very easy: just pass the data along. -% \begin{macrocode} -\keys_property_new:nn { .set:N } { - \keys_variable_set:NN n #1 -} -\keys_property_new:nn { .set_x:N } { - \keys_variable_set:NN x #1 -} -% \end{macrocode} -%\end{macro} -%\end{macro} -% -%\begin{macro}{.set_bool:N} -%\begin{macro}{.set_bool_inverse:N} -% One function for each of these, but this keeps the key functions -% themselves short. -% \begin{macrocode} -\keys_property_new:nn { .set_bool:N } { - \keys_bool_set:N #1 -} -\keys_property_new:nn { .set_bool_inverse:N } { - \keys_bool_set_inverse:N #1 -} -% \end{macrocode} -%\end{macro} -%\end{macro} -% -%\begin{macro}{.value_forbidden:} -%\begin{macro}{.value_required:} -% These are very similar, so both call the same function. -% \begin{macrocode} -\keys_property_new:nn { .value_forbidden: } { - \keys_value_requirement:n { forbidden } -} -\keys_property_new:nn { .value_required: } { - \keys_value_requirement:n { required } -} -% \end{macrocode} -%\end{macro} -%\end{macro} -% -%\subsubsection{Messages} -% -% For when the package needs to complain. -% \begin{macrocode} -\msg_new:nnn { keys } { choice~unknown } {% - Choice `#2' unknown for key `#1':\\% - the key is being ignored.% -} -\msg_new:nnn { keys } { key~unknown } {% - The key `#1' is unknown and is being ignored.% -} -\msg_new:nnn { keys } { key~value~forbidden }{% - The key `#1' cannot taken a value:\\% - the given input `#2' is being ignored.% -} -\msg_new:nnn { keys } { key~value~required } {% - The key `#1' requires a value\\% - and is being ignored.% -} -\msg_new:nnn { keys } { no~property } {% - No property given in definition of key `#1'.% -} -\msg_new:nnn { keys } { property~unknown } {% - The key property `#1' is unknown.% -} -\msg_new:nnn { keys } { property~value~required } {% - The property `#1' requires a value\\% - and is being ignored.% -} -% \end{macrocode} -% -% \begin{macrocode} -% -% \end{macrocode} -% -%\end{implementation} \ No newline at end of file diff --git a/Master/texmf-dist/source/latex/keys3/keys3.ins b/Master/texmf-dist/source/latex/keys3/keys3.ins deleted file mode 100644 index 30b04080e3a..00000000000 --- a/Master/texmf-dist/source/latex/keys3/keys3.ins +++ /dev/null @@ -1,89 +0,0 @@ -%% -%% This is file `keys3.ins', -%% generated with the docstrip utility. -%% -%% The original source files were: -%% -%% keys3.dtx (with options: `install') -%% --------------------------------------------------------------- -%% The keys3 package --- Key management for LaTeX3 -%% Maintained by Joseph Wright -%% E-mail: joseph.wright@morningstar2.co.uk -%% Released under the LaTeX Project Public License v1.3c or later -%% See http://www.latex-project.org/lppl.txt -%% --------------------------------------------------------------- -%% -%% EXPERIMENTAL CODE -%% -%% Do not distribute this file without also distributing the -%% source files specified above. -%% -%% Do not distribute a modified version of this file. -%% -\input docstrip.tex -\keepsilent -\askforoverwritefalse -\preamble ---------------------------------------------------------------- -The keys3 package --- Key management for LaTeX3 -Maintained by Joseph Wright -E-mail: joseph.wright@morningstar2.co.uk -Released under the LaTeX Project Public License v1.3c or later -See http://www.latex-project.org/lppl.txt ---------------------------------------------------------------- - -EXPERIMENTAL CODE - -Do not distribute this file without also distributing the -source files specified above. - -Do not distribute a modified version of this file. - -\endpreamble -\postamble - -Copyright (C) 2008-2009 by - Joseph Wright - -It 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 - Joseph Wright. - -This work consists of the file keys3.dtx - and the derived files keys3.pdf, - keys3.sty and - keys3.ins. - -\endpostamble -\usedir{tex/latex/keys3} -\generate{ - \file{\jobname.sty}{\from{\jobname.dtx}{package}} -} -\endbatchfile -%% -%% Copyright (C) 2008-2009 by -%% Joseph Wright -%% -%% It 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 -%% Joseph Wright. -%% -%% This work consists of the file keys3.dtx -%% and the derived files keys3.pdf, -%% keys3.sty and -%% keys3.ins. -%% -%% -%% End of file `keys3.ins'. diff --git a/Master/texmf-dist/source/latex/keys3/keys3opts2.dtx b/Master/texmf-dist/source/latex/keys3/keys3opts2.dtx deleted file mode 100644 index 5aa9e8cce08..00000000000 --- a/Master/texmf-dist/source/latex/keys3/keys3opts2.dtx +++ /dev/null @@ -1,256 +0,0 @@ -%\iffalse -% !TEX program = pdflatex -% !TEX encoding = ISO-8859-1 -%<*internal> -\iffalse -% -%<*readme> ---------------------------------------------------------------- -The keys3opts2 package --- Using keys3 for LaTeX2e options -Maintained by Joseph Wright -E-mail: joseph.wright@morningstar2.co.uk -Released under the LaTeX Project Public License v1.3c or later -See http://www.latex-project.org/lppl.txt ---------------------------------------------------------------- - -The keys3 package is an experimental implementation of key -management for LaTeX3. The entire package is written in -expl3 code rather than in traditional TeX/LaTeX. The -keys3opts2 package provides a mechanism to allow load-time -option processed using keys3 in LaTeX2e. - -% -%<*internal> -\fi -\def\nameofplainTeX{plain} -\ifx\fmtname\nameofplainTeX\else - \expandafter\begingroup -\fi -% -%<*install> -\input docstrip.tex -\keepsilent -\askforoverwritefalse -\preamble ---------------------------------------------------------------- -The keys3opts2 package --- Using keys3 for LaTeX2e options -Maintained by Joseph Wright -E-mail: joseph.wright@morningstar2.co.uk -Released under the LaTeX Project Public License v1.3c or later -See http://www.latex-project.org/lppl.txt ---------------------------------------------------------------- - -EXPERIMENTAL CODE - -Do not distribute this file without also distributing the -source files specified above. - -Do not distribute a modified version of this file. - -\endpreamble -\postamble - -Copyright (C) 2008-2009 by - Joseph Wright - -It 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 - Joseph Wright. - -This work consists of the file keys3opts2.dtx - and the derived files keys3opts2.pdf, - keys3opts2.sty and - keys3opts2.ins. - -\endpostamble -\usedir{tex/latex/keys3} -\generate{ - \file{\jobname.sty}{\from{\jobname.dtx}{package}} -} -% -%\endbatchfile -%<*internal> -\usedir{source/latex/keys3} -\generate{ - \file{\jobname.ins}{\from{\jobname.dtx}{install}} -} -\ifx\fmtname\nameofplainTeX - \expandafter\endbatchfile -\else - \expandafter\endgroup -\fi -% -%<*driver|package> -\RequirePackage{l3names} -\GetIdInfo$Id: keys3opts2.dtx 93 2009-05-03 20:34:46Z josephwright $ - {Using keys3 for LaTeX2e options} -% -%\fi -%\iffalse -%<*driver> -%\fi -\ProvidesFile{\filename.\filenameext} - [\filedate\space v\fileversion\space\filedescription] -%\iffalse -\documentclass[full]{l3doc} -\begin{document} - \DocInput{\filename.\filenameext} -\end{document} -% -% \fi -% -% \title{The \textsf{keys3opts2} package^^A -% \thanks{This file has version number \fileversion, last -% revised \filedate.}\\ -% Using \textsf{keys3} for \LaTeXe\ options} -% \author{Joseph Wright^^A -% \thanks{E-mail: joseph.wright@morningstar2.co.uk}} -% \date{\filedate} -% \maketitle -% -%\section{Package options} -% -% The methods that \LaTeX3 will use to process package options are not -% clear at the present time. However, in order to fully test the -% \pkg{expl3} bundle fully, it is useful to be able to work with -% the \LaTeXe\ system but using \LaTeX3 methods as far as possible. -% -% The \pkg{keys3} package provides an experimental method for -% managing key--value input using \pkg{expl3} syntax. It is -% self-contained and does not use any \LaTeXe methods. On the other -% hand, \pkg{keys3opts2} is intended as a ``bridge'' between the -% \LaTeXe\ kernel and \textsf{keys3}. It allows keys to be created -% using \pkg{keys3} and processed by \LaTeXe\ as package or class -% options. -% -%\subsection{functions} -% -% \begin{function}{\keys_options_ltx:n} -% \begin{syntax} -% "\keys_options_ltx:n" -% \end{syntax} -% The only macro for outside use. Processes the current option list -% using the currently defined keys, checking if they exist for -% . -% \end{function} -% -% \begin{function}{ -% \keys_options_ltx_cls:n| -% \keys_options_ltx_pkg:n -% } -% \begin{syntax} -% "\keys_options_ltx_cls:n"