summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2010-10-12 00:07:04 +0000
committerKarl Berry <karl@freefriends.org>2010-10-12 00:07:04 +0000
commita8c915878e3e9b15a28df3a92b0c1ac925d6e28e (patch)
treedd35661fdc51376d4d11645e7920a32a0fa1a041 /Master/texmf-dist/source
parentf260c3c6b4661850cc6f51f22729f2092d7ebf61 (diff)
xpackages 2072 (10oct10)
git-svn-id: svn://tug.org/texlive/trunk@20058 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source')
-rw-r--r--Master/texmf-dist/source/latex/xpackages/xbase/template-test.tex77
-rw-r--r--Master/texmf-dist/source/latex/xpackages/xbase/template-test2.tex110
-rw-r--r--Master/texmf-dist/source/latex/xpackages/xbase/template.dtx6
-rw-r--r--Master/texmf-dist/source/latex/xpackages/xbase/xparse.dtx22
-rw-r--r--Master/texmf-dist/source/latex/xpackages/xbase/xtemplate.dtx8
-rw-r--r--Master/texmf-dist/source/latex/xpackages/xhead/xhead.dtx986
-rw-r--r--Master/texmf-dist/source/latex/xpackages/xhead/xhead.ins (renamed from Master/texmf-dist/source/latex/xpackages/xbase/tprestrict-test.tex)63
-rw-r--r--Master/texmf-dist/source/latex/xpackages/xtras/l3keys2e-demo.tex46
-rw-r--r--Master/texmf-dist/source/latex/xpackages/xtras/l3keys2e.dtx205
9 files changed, 1114 insertions, 409 deletions
diff --git a/Master/texmf-dist/source/latex/xpackages/xbase/template-test.tex b/Master/texmf-dist/source/latex/xpackages/xbase/template-test.tex
deleted file mode 100644
index 5684ce7a90f..00000000000
--- a/Master/texmf-dist/source/latex/xpackages/xbase/template-test.tex
+++ /dev/null
@@ -1,77 +0,0 @@
-% \iffalse
-%% (C) Copyright 2000-2004 LaTeX3 Project
-%%
-%% It may be distributed and/or modified under the conditions of the
-%% LaTeX Project Public License (LPPL), either version 1.3a 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 file is part of the ``xbase bundle'' (The Work in LPPL)
-%% and all files in that bundle must be distributed together.
-%%
-%% The released version of this bundle is available from CTAN.
-%%
-%% -----------------------------------------------------------------------
-%%
-%% The development version of the bundle can be found at
-%%
-%% http://www.latex-project.org/svnroot/experimental/trunk/
-%%
-%% for those people who are interested.
-%%
-%%%%%%%%%%%
-%% NOTE: %%
-%%%%%%%%%%%
-%%
-%% Snapshots taken from the repository represent work in progress and may
-%% not work or may contain conflicting material! We therefore ask
-%% people _not_ to put them into distributions, archives, etc. without
-%% prior consultation with the LaTeX Project Team.
-%%
-%% -----------------------------------------------------------------------
-%%
-%% $Id: template-test.tex 1628 2009-10-25 09:54:34Z mittelba $
-%%
-% \fi
-%
-\RequirePackage{template}
-
-\DeclareTemplateType{xxx}{0}
-
-\DeclareTemplate{xxx}{test}{0}
- {
- xkey=n \xkey,
- key =i {yyy} \value
- }
- {
- \DoParameterAssignments
- \show\xkey
- \show\value
- \value
- }
-
-\DeclareTemplateType{yyy}{0}
-
-\DeclareTemplate{yyy}{foo}{0}
- {
- keya =L \foo
- }
- {
- \DoParameterAssignments
- \show\foo
- }
-
-
-\DeclareInstance{xxx}{bar}{test}
- {
- xkey = \UseTemplate{yyy}{foo}{ keya = 20pt },
- key = \UseTemplate{yyy}{foo}{ keya = 10pt }
- }
-
-\ShowInstance{xxx}{bar}
-
-\UseInstance{xxx}{bar}
-
-\stop
diff --git a/Master/texmf-dist/source/latex/xpackages/xbase/template-test2.tex b/Master/texmf-dist/source/latex/xpackages/xbase/template-test2.tex
deleted file mode 100644
index 489e9f2304a..00000000000
--- a/Master/texmf-dist/source/latex/xpackages/xbase/template-test2.tex
+++ /dev/null
@@ -1,110 +0,0 @@
-% \iffalse
-%% (C) Copyright 2000-2004 LaTeX3 Project
-%%
-%% It may be distributed and/or modified under the conditions of the
-%% LaTeX Project Public License (LPPL), either version 1.3a 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 file is part of the ``xbase bundle'' (The Work in LPPL)
-%% and all files in that bundle must be distributed together.
-%%
-%% The released version of this bundle is available from CTAN.
-%%
-%% -----------------------------------------------------------------------
-%%
-%% The development version of the bundle can be found at
-%%
-%% http://www.latex-project.org/cgi-bin/cvsweb.cgi/
-%%
-%% for those people who are interested.
-%%
-%%%%%%%%%%%
-%% NOTE: %%
-%%%%%%%%%%%
-%%
-%% Snapshots taken from the repository represent work in progress and may
-%% not work or may contain conflicting material! We therefore ask
-%% people _not_ to put them into distributions, archives, etc. without
-%% prior consultation with the LaTeX Project Team.
-%%
-%% -----------------------------------------------------------------------
-%%
-%% $Id: template-test2.tex 585 2006-12-12 17:31:48Z morten $
-%%
-% \fi
-%
-
-
-\RequirePackage{template}
-\RequirePackage{trace}
-
-\DeclareTemplateType{xxx}{0}
-
-\def\MultiSelection{\MultiSelectionError}
-%\def\foo{bar}
-
-%\traceon
-
-\DeclareTemplate{xxx}{test}{0}
- {
- xkey=n [\foo] \xkey,
- ykey=n [\DelayEvaluation\foo] \ykey,
- zkey=n \zkey,
- last=n [last] \lastkey,
- set =i {xxx} \xxx
- }
- {
- \DoParameterAssignments
- \typeout{abc}
- }
-\ShowTemplate{xxx}{test}
-
-
-\DeclareInstance{xxx}{bar}{test}
- {
- zkey = foo,
- xkey = baz,
- }
-
-\DeclareInstance{xxx}{baz}{test}
- {
- last = first,
- set = \UseTemplate{xxx}{test}{zkey=rrr},
- zkey = foo
- }
-
-
-\ShowInstance{xxx}{bar}
-\ShowInstance{xxx}{baz}
-
-\DeclareTemplateType{yyy}{0}
-
-\DeclareTemplate{yyy}{foo}{0}
- {
- keya =L \foo
- }
- {
- \DoParameterAssignments
- \show\foo
- }
-
-
-\DeclareInstance{xxx}{bar}{test}
- {
- xkey = \UseTemplate{yyy}{foo}{ keya = 20pt },
- key = \UseTemplate{yyy}{foo}{ keya = 10pt }
- }
-
-\ShowInstance{xxx}{bar}
-
-\UseInstance{xxx}{bar}
-
-\stop
-
-%%% Local Variables:
-%%% mode: plain-tex
-%%% TeX-master: t
-%%% End:
diff --git a/Master/texmf-dist/source/latex/xpackages/xbase/template.dtx b/Master/texmf-dist/source/latex/xpackages/xbase/template.dtx
index 376b4929933..c5006a5e3fb 100644
--- a/Master/texmf-dist/source/latex/xpackages/xbase/template.dtx
+++ b/Master/texmf-dist/source/latex/xpackages/xbase/template.dtx
@@ -37,7 +37,7 @@
\RequirePackage{expl3}
%</driver|package>
%\fi
-\GetIdInfo$Id: template.dtx 1670 2009-11-01 22:34:54Z will $
+\GetIdInfo$Id: template.dtx 2063 2010-10-03 08:26:49Z mittelba $
{template}
%\iffalse
%<*driver>
@@ -1290,7 +1290,7 @@
\cs_if_free:cTF{TP@<#1>}
{\undefinedtype\DeclareTemplateType{#1}#3}
{
- \intexpr_compare:nNnF{#3}={\TP_get_arg_count:n{#1}}
+ \int_compare:nNnF{#3}={\TP_get_arg_count:n{#1}}
{ \BadArgCount }
}
% \end{macrocode}
@@ -1308,7 +1308,7 @@
% At this point there should be a test for which catcode regime we are
% in. We just test if spaces are ignored.
% \begin{macrocode}
- %\intexpr_compare:nNnTF{\char_value_catcode:n{`\ }}=\c_nine
+ %\int_compare:nNnTF{\char_value_catcode:n{`\ }}=\c_nine
%\KV_parse_picky_no_space_removal_no_sanitize:n
%\KV_parse_picky_space_removal_no_sanitize:n
\KV@parse{#4}
diff --git a/Master/texmf-dist/source/latex/xpackages/xbase/xparse.dtx b/Master/texmf-dist/source/latex/xpackages/xbase/xparse.dtx
index 564907d4acb..d9cb5bbeb32 100644
--- a/Master/texmf-dist/source/latex/xpackages/xbase/xparse.dtx
+++ b/Master/texmf-dist/source/latex/xpackages/xbase/xparse.dtx
@@ -41,7 +41,7 @@
\RequirePackage{l3names}
%</driver|package>
%\fi
-\GetIdInfo$Id: xparse.dtx 2037 2010-09-20 21:22:45Z joseph $
+\GetIdInfo$Id: xparse.dtx 2063 2010-10-03 08:26:49Z mittelba $
{Generic document command parser}
%\iffalse
%<*driver>
@@ -1099,7 +1099,7 @@
\exp_not:c {
xparse_grab_ #1
\bool_if:NT \l_xparse_long_bool { _long }
- \intexpr_compare:nF {
+ \int_compare:nF {
\l_xparse_mandatory_args_int > \c_zero
} { _trailing }
:w
@@ -1656,7 +1656,7 @@
% input argument.
% \begin{macrocode}
\cs_new:Npn \xparse_add_arg:n #1 {
- \intexpr_compare:nTF { \l_xparse_processor_int = \c_zero } {
+ \int_compare:nTF { \l_xparse_processor_int = \c_zero } {
\tl_put_right:Nn \l_xparse_args_tl { {#1} }
}{
\xparse_if_no_value:nTF {#1} {
@@ -1673,7 +1673,7 @@
\use:c { xparse_processor_ \int_use:N \l_xparse_processor_int :n }
{#1}
\int_decr:N \l_xparse_processor_int
- \intexpr_compare:nTF { \l_xparse_processor_int = \c_zero } {
+ \int_compare:nTF { \l_xparse_processor_int = \c_zero } {
\tl_put_right:Nx \l_xparse_args_tl {
{ \exp_not:V \ProcessedArgument }
}
@@ -2251,7 +2251,7 @@
\xparse_exp_set:cpx { \l_xparse_tmp_tl aux} ##1 \q_xparse ##2 #2 {
\exp_not:c {
\exp_after:wN \token_to_str:N \l_xparse_function_tl
- \intexpr_eval:n { \l_xparse_total_args_int + 1 }
+ \int_eval:n { \l_xparse_total_args_int + 1 }
} ##1 {##2} \exp_not:N \q_xparse
}
\xparse_exp_prepare_function:N
@@ -2273,7 +2273,7 @@
} ##1 \q_xparse ##2## {
\exp_not:c {
\exp_after:wN \token_to_str:N \l_xparse_function_tl
- \intexpr_eval:n { \l_xparse_total_args_int + 1 }
+ \int_eval:n { \l_xparse_total_args_int + 1 }
}
##1 {##2} \exp_not:N \q_xparse
}
@@ -2287,7 +2287,7 @@
} ##1 \q_xparse ##2 {
\exp_not:c {
\exp_after:wN \token_to_str:N \l_xparse_function_tl
- \intexpr_eval:n { \l_xparse_total_args_int + 1 }
+ \int_eval:n { \l_xparse_total_args_int + 1 }
}
##1 {##2} \exp_not:N \q_xparse
}
@@ -2307,7 +2307,7 @@
\cs_new:Npn \xparse_exp_add_type_t:w #1 {
\tl_set:Nx \l_xparse_tmp_tl {
\exp_after:wN \token_to_str:N \l_xparse_function_tl
- \intexpr_eval:n { \l_xparse_total_args_int + 1 }
+ \int_eval:n { \l_xparse_total_args_int + 1 }
}
\xparse_exp_set:cpx {
\exp_after:wN \token_to_str:N \l_xparse_function_tl
@@ -2339,7 +2339,7 @@
} ##1 \q_xparse ##2 #1 {
\exp_not:c {
\exp_after:wN \token_to_str:N \l_xparse_function_tl
- \intexpr_eval:n { \l_xparse_total_args_int + 1 }
+ \int_eval:n { \l_xparse_total_args_int + 1 }
}
##1 {##2} \exp_not:N \q_xparse
}
@@ -2391,7 +2391,7 @@
}
\tl_set:Nn \l_xparse_function_tl {#1}
\xparse_exp_prepare_function:n {#2}
- \intexpr_compare:nTF {
+ \int_compare:nTF {
\l_xparse_total_args_int = \l_xparse_m_args_int
} {
\xparse_exp_declare_cmd_all_m:Nn #1 {#3}
@@ -2420,7 +2420,7 @@
\exp_not:c { \token_to_str:N #1 1 } x \exp_not:N \q_xparse
}
\cs_set_nopar:cpx {
- \token_to_str:N #1 \intexpr_eval:n { \l_xparse_total_args_int + 1 }
+ \token_to_str:N #1 \int_eval:n { \l_xparse_total_args_int + 1 }
} x ##1 \q_xparse {
\exp_not:c { \token_to_str:N #1 } ##1
}
diff --git a/Master/texmf-dist/source/latex/xpackages/xbase/xtemplate.dtx b/Master/texmf-dist/source/latex/xpackages/xbase/xtemplate.dtx
index 297291a3d7f..592e779916e 100644
--- a/Master/texmf-dist/source/latex/xpackages/xbase/xtemplate.dtx
+++ b/Master/texmf-dist/source/latex/xpackages/xbase/xtemplate.dtx
@@ -38,7 +38,7 @@
\RequirePackage{l3names}
%</driver|package>
%\fi
-\GetIdInfo$Id: xtemplate.dtx 2037 2010-09-20 21:22:45Z joseph $
+\GetIdInfo$Id: xtemplate.dtx 2063 2010-10-03 08:26:49Z mittelba $
{Prototype document functions}
%\iffalse
%<*driver>
@@ -1504,7 +1504,7 @@
% \begin{macrocode}
\cs_new:Npn \xtemplate_execute_if_arg_agree:nnT #1#2#3 {
\prop_get:NnN \g_xtemplate_object_type_prop {#1} \l_xtemplate_tmp_tl
- \intexpr_compare:nTF { #2 = \l_xtemplate_tmp_tl }
+ \int_compare:nTF { #2 = \l_xtemplate_tmp_tl }
{#3}
{
\msg_kernel_error:nnxxx { xtemplate }
@@ -1746,8 +1746,8 @@
\cs_new:Npn \xtemplate_declare_object_type:nn #1#2 {
\int_set:Nn \l_xtemplate_tmp_int {#2}
\bool_if:nTF {
- \intexpr_compare_p:n { #2 > \c_nine } ||
- \intexpr_compare_p:n { #2 < \c_zero }
+ \int_compare_p:n { #2 > \c_nine } ||
+ \int_compare_p:n { #2 < \c_zero }
} {
\msg_kernel_error:nnxx { xtemplate } { bad-number-of-arguments }
{#1} { \exp_not:V \l_xtemplate_tmp_int }
diff --git a/Master/texmf-dist/source/latex/xpackages/xhead/xhead.dtx b/Master/texmf-dist/source/latex/xpackages/xhead/xhead.dtx
new file mode 100644
index 00000000000..11f23376a6e
--- /dev/null
+++ b/Master/texmf-dist/source/latex/xpackages/xhead/xhead.dtx
@@ -0,0 +1,986 @@
+% \iffalse
+%% File xhead.dtx (C) Copyright 2010 Frank Mittelbach, LaTeX3 Project
+%%
+%% 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 file is part of the ``xhead bundle'' (The Work in LPPL)
+%% and all files in that bundle must be distributed together.
+%%
+%% The released version of this bundle is available from CTAN.
+%%
+%% -----------------------------------------------------------------------
+%%
+%% The development version of the bundle can be found at
+%%
+%% http://www.latex-project.org/svnroot/experimental/trunk/
+%%
+%% for those people who are interested.
+%%
+%%%%%%%%%%%
+%% NOTE: %%
+%%%%%%%%%%%
+%%
+%% Snapshots taken from the repository represent work in progress and may
+%% not work or may contain conflicting material! We therefore ask
+%% people _not_ to put them into distributions, archives, etc. without
+%% prior consultation with the LaTeX Project Team.
+%%
+%% -----------------------------------------------------------------------
+%%
+%<*driver|package>
+\RequirePackage{expl3}
+\GetIdInfo$Id: xhead.dtx 1914 2010-05-21 16:18:46Z schoepf $
+ {Templates heading commands}
+%</driver|package>
+%<*driver>
+%\fi
+\ProvidesFile{\filename.\filenameext}
+ [\filedate\space v\fileversion\space\filedescription]
+%\iffalse
+\documentclass{l3doc}
+
+
+% next three definitions are big hacks to run the file
+% without the above packages
+%
+\makeatother
+
+\newcommand\key[1]{\textbf{#1}}
+
+ \begin{document}
+ \DocInput{xhead.dtx}
+ \end{document}
+%</driver>
+% \fi
+%
+% ^^A\CheckSum{343}
+%
+%
+% \title{The \textsf{xhead} package\thanks{This file
+% has version number \fileversion, last
+% revised \filedate.}}
+% \author{FMi}
+% \date{\filedate}
+% \maketitle
+%
+% \tableofcontents
+%
+% \bigskip
+%
+% \begin{abstract}
+% This module contains basic templates generating typical headings for
+% various levels. This is very much work in progress and none of its content
+% should be considered stable. Concepts and implementation are still under
+% development.
+% \end{abstract}
+%
+%
+% \newcommand\NOVALUE{\texttt{\string\NoValue}}
+% \newcommand\EMPTY{\textit{<empty>}}
+% \newcommand\STRING{\textit{<string>}}
+% \newcommand\TRUE{\texttt{true}}
+% \newcommand\FALSE{\texttt{false}}
+% \newcommand\KEYVALS{\textit{<key/value list>}}
+% \newcommand\HASH[1]{\texttt{\##1}}
+%
+% \makeatletter
+% \renewenvironment{TemplateInterfaceDescription}[1]
+% {\subsection{The~object~type~`#1'}%
+% \begingroup
+% \@beginparpenalty\@M
+% \description
+% \def\TemplateArgument##1##2{\item[Arg:~##1 (##2)]}^^A
+% \def\TemplateSemantics{\enddescription\endgroup
+% \subsubsection*{Semantics:}}^^A
+% }
+% {\par\bigskip}
+% \makeatother
+%
+% \section{Introduction}
+%
+%
+% \section{Interfaces}
+%
+% \begin{TemplateInterfaceDescription}{heading}
+%
+%
+% \TemplateArgument{1}{boolean}
+% If \TRUE{} generate an unnumbered heading, otherwise a number is
+% generated up to a certain heading level. If \TRUE{} TOC entries and
+% running headers are suppressed unless explicitly forced by other
+% arguments below.
+%
+% \TemplateArgument{2}
+% {\STRING/\NOVALUE/\EMPTY}
+% Specifies an alternate heading text for the TOC if one is produced. If
+% \NOVALUE{} or \EMPTY{} the TOC receives the the main title text.
+%
+% \TemplateArgument{3}
+% {boolean}
+% If \TRUE{} a TOC entry is forced (i.e., generated even if normally supressed).
+%
+% \TemplateArgument{4}
+% {\STRING/\NOVALUE/\EMPTY}
+% Specifies an alternate heading text for the running header if one is
+% produced. If \NOVALUE{} or \EMPTY{} the running header receives the the
+% main title text.
+%
+% \TemplateArgument{5}
+% {boolean}
+% If \TRUE{} a running header is forced (i.e., generated even if normally
+% supressed).
+%
+% \TemplateArgument{6}
+% {\STRING}
+% The title of the heading in the document. Also used for the TOC entry and
+% running header (if produced) unless overwritten by other arguments.
+%
+% \TemplateArgument{7}
+% {\KEYVALS}
+% Extension argument to receive less use key value pairs to manipulate the
+% heading. Exact syntax and semantics still need to be defined.
+%
+% \TemplateSemantics
+% This template type defines the basic interface for headings both display
+% headings as well as run-in headings.
+%
+% A TOC entry is generated if \HASH{1} is \FALSE{} or \HASH{3} being
+% \TRUE{}. The heading title for the TOC entry is \HASH{6} unless
+% overwritten by a non-empty HASH{2}. Whether or not this TOC entry
+% actually appears in the TOC depends on settings for the TOC
+% generation. (However, if not generated if will obviously not appear.)
+%
+% A running header is generated if \HASH{1} is \FALSE{} or \HASH{5} or
+% \TRUE{}. The heading title for the determined as follows: if \HASH{4} is
+% non-empty it will be used, otherwise if \HASH{2} is non-empty it will be
+% used, otherwise HASH{6} will be used.
+%
+% \HASH{7} will hold additional key/value pairs that define more specific
+% semantics. This isn't implemented yet.
+%
+% The above describes my current thinking about how those arguments should
+% interact. In simpler templates (based on 2e semantics) the arguments
+% \HASH{3} to \HASH{5} and \HASH{7} will get ignored.
+%
+%
+% \end{TemplateInterfaceDescription}
+%
+%
+% \begin{TemplateDescription}{heading}{2e-vertical}
+%
+%
+% \TemplateKey{name}{tokenlist}
+% {Name of the heading. Used to refer to parts of its data structure,
+% e.g., the counter associated with the heading will have this name. Must
+% be set to a suitable string like ``section''}
+% {none}
+%
+% \TemplateKey{level}{integer}
+% {The level of the heading in the hierarchy. Required.}
+% {none}
+%
+% \TemplateKey{break-penalty}{penalty}
+% {Penlty to break in front of the heading unless it is immediately
+% preceeded a higher-level heading in which case breaking is prohibited.}
+% {-300}
+%
+% \TemplateKey{indent}{length}
+% {Indentation of the heading from the left margin.}
+% {0pt}
+%
+% \TemplateKey{above-skip}{skip}
+% {Vertical space above the heading.}
+% {0pt}
+%
+% \TemplateKey{below-skip}{skip}
+% {Vertical space below the heading.}
+% {0pt}
+%
+% \TemplateKey{title-decl}{function 0}
+% {Declarations to format the heading, e.g., font changes.}
+% {\EMPTY}
+%
+% \TemplateKey{number-format}{function 1}
+% {Formatting instruction for the heading number (if present), receiving
+% the heading counter representation as an argument.}
+% {\cs{xhead_default_number_format:n}}
+%
+% \TemplateKey{indent-after}{boolean}
+% {Should the first paragraph after the heading be indented?}
+% {\FALSE}
+%
+% \TemplateSemantics
+%
+% This is, or should be, a reimplementation of the 2e |\@startsection|
+% command for generating vertical headings. |\@startsection| is also able
+% to produce run-in headings, but this is not covered by the current
+% template.
+%
+% \end{TemplateDescription}
+%
+%
+%
+%
+%
+% \StopEventually{}
+%
+% \section{Implementation}
+%
+% \begin{macrocode}
+%<*package>
+\RequirePackage{expl3,xtemplate}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\GetIdInfo$Id: xhead.dtx 1914 2010-05-21 16:18:46Z schoepf $
+ {heading module}
+\ProvidesExplPackage
+ {\filename}{\filedate}{\fileversion}{\filedescription}
+% \end{macrocode}
+%
+%
+% \subsection{The heading object type}
+%
+% Arguments:
+%\begin{verbatim}
+% #1 (boolean) : produce no number
+% #2 (string/\NoValue/empty) : toc-title if different from title
+% #3 (boolean) : force toc entry
+% #4 (string/\NoValue/empty) : mark-title if different from toc-title
+% #5 (Boolean) : force mark entry
+% #6 (string) : title
+% #7 (extra key vals)
+%\end{verbatim}
+%
+% \begin{macrocode}
+\DeclareObjectType {heading} {7}
+% \end{macrocode}
+%
+%
+% \subsection{Interfaces to other components}
+%
+% This section holds code that is (or should be) common between different
+% heading templates, for example, code for passing a title to the TOC system
+% will always use the same TOC interface so it is encapsulated
+% here. Effectively this means that this section should be the only part that
+% needs modification if we update these other components and intorduce new
+% interfaces for them.
+%
+% At the moment everything is set up to use the old 2e interfaces, but this
+% will change over time.
+%
+%
+%
+% \subsubsection{Generating TOC and mark entries}
+%
+%
+% \begin{macro}{\xhead_generate_toc:NNNNN}
+% \begin{macro}{\xhead_generate_toc:NNNNo}
+% This command provides the interface to the TOC system (currently the 2e
+% one). It uses its first two arguments to decide if a TOC entry should be produced
+% and if so generates the entry from the remaining arguments.
+%
+% Arguments:
+%\begin{verbatim}
+% #1 (boolean) : produce no number
+% #2 (boolean) : force toc entry
+% #3 (string) : heading name (\l_xhead_name_tl)
+% #4 (string) : heading number if any (\l_xhead_number_tl)
+% #5 (string) : toc-title (\l_xhead_toc_title_tl)
+%\end{verbatim}
+%
+% \begin{macrocode}
+\cs_new:Npn \xhead_generate_toc:NNNNN #1#2#3#4#5 {
+%<*trace>
+ \typeout{xhead_generate_toc:NNNNN=#1:#2:#3:#4:#5}
+%</trace>
+% \end{macrocode}
+% A TOC entry is produced if the heading number was not suppressed (|!#1|)
+% or it is forced (|#2|).
+% \begin{macrocode}
+ \bool_if:nT
+ { #2 || ! #1 }
+ {
+ \group_begin:
+% \end{macrocode}
+% Guard against use of mark commands in the heading title (from old sources).
+% \begin{macrocode}
+ \cs_set_eq:NN \@mkboth \use_none:nn
+ \cs_set_eq:NN \markboth \use_none:nn
+ \cs_set_eq:NN \markright \use_none:n
+% \end{macrocode}
+% Use the old 2e |\addcontentsline| interface:
+% \begin{macrocode}
+ \addcontentsline{toc}{#3}
+ {
+ \tl_if_empty:NF #4
+ { \protect\numberline{ #4 } }
+ #5
+ }
+ \group_end:
+ }
+}
+% \end{macrocode}
+% In the templates we really want to make sure that the title in the last
+% argument is passed and not a tokenlist in which it is saved. After all,
+% this text will get passed around over long distances. We therefore
+% provide the following variant for use in templates:
+% \begin{macrocode}
+\cs_generate_variant:Nn \xhead_generate_toc:NNNNN {NNNNo}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+%
+%
+% \begin{macro}{\xhead_generate_mark:NNNNN}
+% \begin{macro}{\xhead_generate_mark:NNNNo}
+% This command provides the interface to the mark system for running
+% headers(currently the 2e one). It uses its first two arguments to decide
+% if a mark entry should be produced and if so generates the entry from the
+% remaining arguments.
+%
+% Arguments:
+%\begin{verbatim}
+% #1 (boolean) : produce no number
+% #2 (boolean) : force running header entry
+% #3 (string) : heading name (\l_xhead_name_tl)
+% #4 (string) : heading number if any (\l_xhead_number_tl)
+% #5 (string) : mark-title (\l_xhead_mark_title_tl)
+%\end{verbatim}
+%
+% \begin{macrocode}
+\cs_new:Npn \xhead_generate_mark:NNNNN #1#2#3#4#5 {
+%<*trace>
+ \typeout{xhead_generate_mark:NNNNN=#1:#2:#3:#4:#5}
+%</trace>
+% \end{macrocode}
+% A running header entry is produced if the heading number was not
+% suppressed (|!#1|) or it is forced (|#2|).
+% \begin{macrocode}
+ \bool_if:nT
+ { #2 || ! #1 }
+ {
+ \group_begin:
+% \end{macrocode}
+% Guard against use of mark command in heading titles (from old
+% sources)\footnote{This is wrong here, needs thought.}
+% \begin{macrocode}
+ \cs_set_eq:NN \@mkboth \use_none:nn
+% \end{macrocode}
+% Again we use the original 2e interface. |\markright|, etc.\ currently adds
+% the section number so we do not add it here---for now.
+% \begin{macrocode}
+ \use:c {#3 mark} {#5}
+ \group_end:
+ }
+}
+% \end{macrocode}
+% In the templates we really want to make sure that the title in the last
+% argument is passed and not a tokenlist in which it is saved. After all,
+% this text will get passed around over long distances. We therefore
+% provide the following variant for use in templates:
+% \begin{macrocode}
+\cs_generate_variant:Nn \xhead_generate_mark:NNNNN {NNNNo}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+%
+%
+% \begin{macro}{\xhead_generate_toc_and_mark:NNNNNNN}
+%
+% This is just putting it all together, may not be worth having.
+%
+% Arguments:
+%\begin{verbatim}
+% #1 (boolean) : produce no number
+% #2 (boolean) : force toc entry
+% #3 (boolean) : force running header entry
+% #4 (string) : heading name (\l_xhead_name_tl)
+% #5 (string) : heading number or empty (\l_xhead_number_tl)
+% #6 (string) : toc-title (\l_xhead_toc_title_tl)
+% #7 (string) : mark-title (\l_xhead_mark_title_tl)
+%\end{verbatim}
+%
+% \begin{macrocode}
+\cs_new:Npn \xhead_generate_toc_and_mark:NNNNNNN #1#2#3#4#5#6#7 {
+ \xhead_generate_toc:NNNNo
+ #1 #2 #4 #5 #6
+ \xhead_generate_mark:NNNNo
+ #1 #3 #4 #5 #7
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+%
+% \subsubsection{Prepare heading number}
+%
+%
+%
+% \begin{macro}{\xhead_update_prepare_number:N}
+%
+% This command checks if a number should be produced and if so increments
+% the corresponding counter and stores the number in
+% |\l_xhead_number_tl|. Otherwise |\l_xhead_number_tl| will be set to empty
+% to indicate that no number should be displayed.
+%
+% Arguments:
+%\begin{verbatim}
+% #1 (boolean) : produce no number
+%\end{verbatim}
+
+% Assumptions:
+%\begin{verbatim}
+% \l_xhead_name_tl : holds heading name
+% \l_xhead_level_int : holds heading level
+%\end{verbatim}
+%
+% Outputs:
+%\begin{verbatim}
+% \l_xhead_number_tl : holds heading number or returns empty
+%\end{verbatim}
+%
+% \begin{macrocode}
+\cs_new:Npn \xhead_update_prepare_number:N #1 {
+ \bool_if:nTF
+ { #1 || \intexpr_compare_p:n { \l_xhead_level_int > \c@secnumdepth } }
+ { \tl_clear:N \l_xhead_number_tl }
+ {
+ \refstepcounter \l_xhead_name_tl
+ \tl_set:Nx \l_xhead_number_tl { \use:c {the \l_xhead_name_tl} }
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+%
+% \subsubsection{Prepare indentation after heading}
+%
+% To set the paragraph indentation after a heading we need to interact with
+% the galley mechanism, which at one point will be \texttt{xgalley}. Right
+% now we use the 2e interface.
+%
+% \begin{macro}{\xhead_set_after_indention:N}
+% Here we set the 2e flag depending
+% \begin{macrocode}
+\cs_new:Npn \xhead_set_after_indention:N #1 {
+ \bool_if:NTF #1 \@afterindenttrue \@afterindentfalse
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+%
+%
+% \subsubsection{Evaluating the title arguments}
+%
+% According to the heading object type spec the title text for the toc and
+% running header may differ from the main title in dependence of the
+% arguments passed to the template.
+% The code below implements the documented logic.
+%
+% \begin{macro}{\xhead_set_titles:nnn}
+%
+% Arguments:
+%\begin{verbatim}
+% #1 (string/\NoValue/empty) : toc-title if different from title
+% #2 (string/\NoValue/empty) : mark-title if different from toc-title
+% #3 (string) : title
+%\end{verbatim}
+%
+% \begin{macrocode}
+\cs_new:Npn \xhead_set_titles:nnn #1#2#3 {
+% \end{macrocode}
+% Determine title for toc:
+% If \HASH{1} is \NOVALUE{} or \EMPTY{} use \HASH{3} for the toc-title.
+% Otherwise use \HASH{1}.
+% \begin{macrocode}
+ \IfNoValueTF{#1}
+ { \tl_set:Nn \l_xhead_toc_title_tl {#3} }
+ { \tl_if_empty:nTF {#1}
+ { \tl_set:Nn \l_xhead_toc_title_tl {#3} }
+ { \tl_set:Nn \l_xhead_toc_title_tl {#1} }
+ }
+% \end{macrocode}
+% Determine title for mark: If \HASH{2} is \NOVALUE{} then use whatever was
+% determined for the toc-title as value (i.e., if a special toc-title was
+% used this will be also used for the running header, if not the main title
+% is used). Otherwise, if \HASH{2} is \EMPTY{} use \HASH{3}. Otherwise use
+% \HASH{2} (i.e., a special title was passed for the running header).
+% \begin{macrocode}
+ \IfNoValueTF{#2}
+ { \tl_set_eq:NN \l_xhead_mark_title_tl \l_xhead_toc_title_tl }
+ { \tl_if_empty:nTF {#2}
+ { \tl_set:Nn \l_xhead_mark_title_tl {#3} }
+ { \tl_set:Nn \l_xhead_mark_title_tl {#2} }
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+%
+% \subsection{Support variables for template code}
+%
+%
+% \begin{macrocode}
+\dim_new:N \l_xhead_indent_dim
+% \end{macrocode}
+%
+%
+%
+% \begin{macrocode}
+\skip_new:N \l_xhead_above_skip
+\skip_new:N \l_xhead_below_skip
+% \end{macrocode}
+%
+%
+%
+% \begin{macrocode}
+\int_new:N \l_xhead_level_int
+\int_new:N \l_xhead_break_penalty_int
+% \end{macrocode}
+%
+% \begin{macrocode}
+\tl_new:N \l_xhead_name_tl
+\tl_new:N \l_xhead_number_tl
+\tl_new:N \l_xhead_toc_title_tl
+\tl_new:N \l_xhead_mark_title_tl
+% \end{macrocode}
+%
+% \begin{macrocode}
+\bool_new:N \l_xhead_indent_after_bool
+
+\cs_new:Npn \xhead_title_decl: {}
+
+\cs_new:Npn \xhead_number_format:n #1 {}
+
+\cs_new:Npn \xhead_default_number_format:n #1 { #1 \quad}
+% \end{macrocode}
+%
+%
+%
+%
+% \subsection{The template \texttt{2e-vertical}}
+%
+% \begin{macrocode}
+\DeclareTemplateInterface {heading} {2e-vertical} {7}
+ {
+ name : tokenlist = ??? ,
+ level : integer = 0 ,
+ break-penalty: integer = -300 ,
+ indent : length = 0pt ,
+ above-skip : skip = 0pt ,
+ below-skip : skip = 0pt ,
+ title-decl : function {0} = ,
+ number-format: function {1} = \xhead_default_number_format:n {#1} ,
+ indent-after : boolean = false ,
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\DeclareTemplateCode {heading} {2e-vertical} {7}
+ {
+ name = \l_xhead_name_tl ,
+ level = \l_xhead_level_int ,
+ break-penalty = \l_xhead_break_penalty_int ,
+ indent = \l_xhead_indent_dim ,
+ above-skip = \l_xhead_above_skip ,
+ below-skip = \l_xhead_below_skip ,
+ title-decl = \xhead_title_decl: ,
+ number-format = \xhead_number_format:n ,
+ indent-after = \l_xhead_indent_after_bool ,
+ }
+ {
+ \AssignTemplateKeys
+% \end{macrocode}
+% Determine title for toc and mark using the 2e logic: Do not generate
+% them if the star-form of the heading is used and always use the same text
+% for TOC and mark:
+% \begin{macrocode}
+ \bool_if:NF #1
+ {
+ \IfNoValueTF{#2}
+ { \tl_set:Nn \l_xhead_toc_title_tl {#6} }
+ { \tl_set:Nn \l_xhead_toc_title_tl {#2} }
+ \tl_set_eq:NN \l_xhead_mark_title_tl \l_xhead_toc_title_tl
+ }
+% \end{macrocode}
+% If heading number increment counter and set |\l_xhead_number_tl|
+% \begin{macrocode}
+ \xhead_update_prepare_number:N #1
+% \end{macrocode}
+% Indent after heading if requested (use old mechanism):
+% \begin{macrocode}
+ \xhead_set_after_indention:N \l_xhead_indent_after_bool
+% \end{macrocode}
+% Produce the space above the heading (using old 2e methods):
+% \begin{macrocode}
+ \if@noskipsec \leavevmode \fi
+ \par
+ \if@nobreak
+ \everypar{}
+ \else:
+ \addpenalty \l_xhead_break_penalty_int
+ \addvspace \l_xhead_above_skip
+ \fi:
+% \end{macrocode}
+% Produce the title of the heading (using old 2e methods)
+% \begin{macrocode}
+ \group_begin:
+ \xhead_title_decl:
+ {
+ \@hangfrom{\hskip \l_xhead_indent_dim \scan_stop:
+ \tl_if_empty:NF \l_xhead_number_tl
+ { \xhead_number_format:n \l_xhead_number_tl }
+ }
+ \interlinepenalty \@M #6\@@par
+ }
+ \group_end:
+% \end{macrocode}
+% Generate toc entry and mark if required:
+% \begin{macrocode}
+ \xhead_generate_toc_and_mark:NNNNNNN
+ #1 \BooleanFalse \BooleanFalse % no forcing in 2e
+ \l_xhead_name_tl
+ \l_xhead_number_tl
+ \l_xhead_toc_title_tl
+ \l_xhead_mark_title_tl
+% \end{macrocode}
+% Produce the space below the heading and the handling of following
+% paragraph (using old 2e methods):
+% \begin{macrocode}
+ \par \nobreak
+ \vspace \l_xhead_below_skip
+ \@afterheading
+ \ignorespaces
+ }
+% \end{macrocode}
+%
+%
+%
+%
+% \subsection{The template \texttt{3a-vertical}}
+%
+% Right now this template is more or less equal to \texttt{2e-vertical}
+% except that it supports the extended heading arguments with the exception
+% of \HASH{7}.
+%
+% \begin{macrocode}
+\DeclareTemplateInterface {heading} {3a-vertical} {7}
+ {
+ name : tokenlist = ??? ,
+ level : integer = 0 ,
+ break-penalty : integer = -300 ,
+ indent : length = 0pt ,
+ above-skip : skip = 0pt ,
+ below-skip : skip = 0pt ,
+ format : tokenlist = indent-by-number ,
+ parshape : instance {parshape} = plain ,
+ justification : instance {justification} = flush-left ,
+ font : tokenlist = ,
+ number-format : function {1} = \xhead_default_number_format:n {#1} ,
+ indent-after : boolean = false ,
+ }
+% \end{macrocode}
+%
+
+% \begin{macro}{\l_xhead_title_format_tl}
+%
+% \begin{macrocode}
+\tl_new:N \l_xhead_title_format_tl
+\tl_new:N \l_xhead_title_font_tl
+
+\cs_new:Npn \xhead_title_parshape: {}
+\cs_new:Npn \xhead_title_justification: {}
+
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macrocode}
+\DeclareTemplateCode {heading} {3a-vertical} {7}
+ {
+ name = \l_xhead_name_tl ,
+ level = \l_xhead_level_int ,
+ break-penalty = \l_xhead_break_penalty_int ,
+ indent = \l_xhead_indent_dim ,
+ above-skip = \l_xhead_above_skip ,
+ below-skip = \l_xhead_below_skip ,
+ format = \l_xhead_title_format_tl ,
+ parshape = \xhead_title_parshape: ,
+ justification = \xhead_title_justification: ,
+ font = \l_xhead_title_font_tl ,
+ number-format = \xhead_number_format:n ,
+ indent-after = \l_xhead_indent_after_bool ,
+ }
+ {
+ \AssignTemplateKeys
+% \end{macrocode}
+% Set title text for TOC and mark entry:
+% \begin{macrocode}
+ \xhead_set_titles:nnn {#2} {#4} {#6}
+% \end{macrocode}
+% If heading gets a number, increment counter and set
+% |\l_xhead_number_tl|.
+% \begin{macrocode}
+ \xhead_update_prepare_number:N #1
+% \end{macrocode}
+% Indent after heading if requested (use old mechanism)
+% \begin{macrocode}
+ \xhead_set_after_indention:N \l_xhead_indent_after_bool
+% \end{macrocode}
+%
+% Produce the space above the heading (using old 2e methods)
+%
+% \begin{macrocode}
+ \if@noskipsec \leavevmode \fi
+ \par
+ \if@nobreak
+ \everypar{}
+ \else:
+ \addpenalty \l_xhead_break_penalty_int
+ \addvspace \l_xhead_above_skip
+ \fi:
+% \end{macrocode}
+%
+% Produce the title of the heading
+%
+% \begin{macrocode}
+ \xhead_use_title_format:nn \l_xhead_title_format_tl {#6}
+
+% \end{macrocode}
+% Generate toc entry and mark:
+% \begin{macrocode}
+ \xhead_generate_toc_and_mark:NNNNNNN
+ #1 #3 #5
+ \l_xhead_name_tl
+ \l_xhead_number_tl
+ \l_xhead_toc_title_tl
+ \l_xhead_mark_title_tl
+% \end{macrocode}
+% Produce the space below the heading and the handling of following
+% paragraph (using old 2e methods)
+% \begin{macrocode}
+ \par \nobreak
+ \vspace \l_xhead_below_skip
+ \@afterheading
+ \ignorespaces
+ }
+% \end{macrocode}
+%
+%
+%
+% \begin{macro}{\xhead_use_title_format:nn}
+% Select a formatting command (based on first arg string) and use it to
+% format the title (second arg).
+%
+% The formatting command makes a bunch of
+% assumptions with respect to the variable names used by the templates (it
+% might ignore some of them):
+%\begin{verbatim}
+% \l_xhead_title_font_tl : font declarations for title text
+% \l_xhead_indent_dim : indentation from the left of title
+% \xhead_title_parshape: : parshape instance to use for title
+% \xhead_title_justification: : justification instance to use for title
+% \l_xhead_number_tl : raw title number or empty
+% \xhead_number_format:n : formatting command for title number
+%\end{verbatim}
+% In addition it takes a single mandatory argument holding the title text.
+%
+% \begin{macrocode}
+\cs_new:Npn \xhead_use_title_format:nn #1 {
+ \cs_if_exist:cTF {xhead_format_ #1:n}
+ { \use:c{xhead_format_ #1:n} }
+ { \ERROR xhead format not defined }
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\xhead_format_indent-by-number:n}
+% Implementing vertical version of |\@startsection| \ldots
+% \begin{macrocode}
+\cs_new:cpn {xhead_format_indent-by-number:n} #1 {
+ \group_begin:
+ \l_xhead_title_font_tl
+ \hbox_set:Nn \l_tmpa_box
+ {
+ \tl_if_empty:NF \l_xhead_number_tl
+ { \xhead_number_format:n \l_xhead_number_tl }
+ }
+
+ \UseInstance{measure}{fullwidth}
+ {\l_xhead_indent_dim + \box_wd:N \l_tmpa_box }
+
+ \xhead_title_parshape:
+ \xhead_title_justification:
+ \interlinepenalty \@M
+
+ \noindent \hbox_overlap_left:n { \box_use:N \l_tmpa_box }
+ #1\@@par
+ \group_end:
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+%
+% \begin{macro}{\xhead_format_number-above-text:n}
+%
+% \begin{macrocode}
+\cs_new:cpn {xhead_format_number-above-text:n} #1 {
+ \group_begin:
+ \l_xhead_title_font_tl
+ \xhead_title_parshape:
+ \xhead_title_justification:
+ \interlinepenalty \@M
+
+ \tl_if_empty:NF \l_xhead_number_tl
+ {
+ \xhead_number_format:n \l_xhead_number_tl
+ }
+
+ #1\@@par
+ \group_end:
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macrocode}
+
+\input{xtextblock.sty}
+
+
+\DeclareTemplateInterface {heading} {3b-vertical} {7}
+ {
+ name : tokenlist = ??? ,
+ level : integer = 0 ,
+ break-penalty : integer = -300 ,
+ indent : length = 0pt ,
+ above-skip : skip = 0pt ,
+ below-skip : skip = 0pt ,
+ title-format : instance {textblock-2} = heading ,
+ number-format : function {1} = \xhead_default_number_format:n {#1} ,
+ indent-after : boolean = false ,
+ }
+
+\cs_new:Npn \xhead_title_format:nn #1#2 {}
+
+\DeclareTemplateCode {heading} {3b-vertical} {7}
+ {
+ name = \l_xhead_name_tl ,
+ level = \l_xhead_level_int ,
+ break-penalty = \l_xhead_break_penalty_int ,
+ indent = \l_xhead_indent_dim ,
+ above-skip = \l_xhead_above_skip ,
+ below-skip = \l_xhead_below_skip ,
+ title-format = \xhead_title_format:nn ,
+ number-format = \xhead_number_format:n ,
+ indent-after = \l_xhead_indent_after_bool ,
+ }
+ {
+ \AssignTemplateKeys
+
+ \xhead_set_titles:nnn {#2} {#4} {#6}
+
+ \xhead_update_prepare_number:N #1
+
+ \xhead_set_after_indention:N \l_xhead_indent_after_bool
+
+ \if@noskipsec \leavevmode \fi
+ \par
+ \if@nobreak
+ \everypar{}
+ \else:
+ \addpenalty \l_xhead_break_penalty_int
+ \addvspace \l_xhead_above_skip
+ \fi:
+
+ \xhead_title_format:nn \l_xhead_number_tl {#6}
+
+ \xhead_generate_toc_and_mark:NNNNNNN
+ #1 #3 #5
+ \l_xhead_name_tl
+ \l_xhead_number_tl
+ \l_xhead_toc_title_tl
+ \l_xhead_mark_title_tl
+
+ \par \nobreak
+ \vspace \l_xhead_below_skip
+ \@afterheading
+ \ignorespaces
+ }
+
+
+% \end{macrocode}
+%
+% \Finale
+%
+%
+% \begin{macrocode}
+\endinput
+%</package>
+% \end{macrocode}
+%
+% \endinput
+%
+%
+%
+%
+% \begin{TemplateInterfaceDescription}{}
+%
+% \TemplateArgument{1}
+% {}
+%
+% \TemplateSemantics
+%
+% \end{TemplateInterfaceDescription}
+%
+%
+
+
+ - motto/quote text to display alongside the heading title
+ - flag to number heading
+ -label name for cross-reference
+
+%
+% \begin{InstanceDescription}[\textbf{no-page-break-boolean}xx]
+% {pshape}{staggered}{cutout}
+%
+% \InstanceKey{no-page-break-boolean}{true}
+%
+% \InstanceKey{left-side-boolean}{true}
+%
+% \InstanceKey{normal-lines-int}{1}
+%
+% \InstanceKey{parshape-list}{20pt,40pt,60pt}
+%
+% \InstanceSemantics
+% This instance will indent each line by an additional 20pt (up to
+% the fourth line). A possible application would be a heading text
+% (with a maximum number of four lines).
+% This should then perhaps be combined with a special justification
+% instance which does ragged right except for the last line which is
+% set to full measure.
+%
+% \end{InstanceDescription}
+%
+%
+
diff --git a/Master/texmf-dist/source/latex/xpackages/xbase/tprestrict-test.tex b/Master/texmf-dist/source/latex/xpackages/xhead/xhead.ins
index d981888d450..7d4286021a7 100644
--- a/Master/texmf-dist/source/latex/xpackages/xbase/tprestrict-test.tex
+++ b/Master/texmf-dist/source/latex/xpackages/xhead/xhead.ins
@@ -1,16 +1,21 @@
% \iffalse
-%% (C) Copyright 2000-2004 LaTeX3 Project
+%%
+%% This file will generate fast loadable files and documentation
+%% driver files from the dtx files in this package when run through
+%% LaTeX or TeX.
+%%
+%% (C) Copyright 2009-2010 LaTeX3 Project
%%
%% It may be distributed and/or modified under the conditions of the
-%% LaTeX Project Public License (LPPL), either version 1.3a of this
+%% 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 file is part of the ``xbase bundle'' (The Work in LPPL)
+%% This file is part of the ``xhead bundle'' (The Work in LPPL)
%% and all files in that bundle must be distributed together.
-%%
+%%
%% The released version of this bundle is available from CTAN.
%%
%% -----------------------------------------------------------------------
@@ -32,49 +37,37 @@
%%
%% -----------------------------------------------------------------------
%%
-%% $Id: tprestrict-test.tex 1628 2009-10-25 09:54:34Z mittelba $
+%% $Id: xhead.ins 1628 2009-10-25 09:54:34Z mittelba $
%%
% \fi
%
-\makeatletter
-\RequirePackage{template}
-\IgnoreWhiteSpace
-
-\newcount\ca
-\newdimen\da
-
-
-\DeclareTemplateType{type}{0}
-
-\DeclareTemplate{type}{Ta}{0}{
- one =l [2in] \da,
- two =c [5] \ca}
- {\DoParameterAssignments\typeout{\da=\the\da,\@spaces \ca=\the\ca}}
-
-\ShowTemplate{type}{Ta}
-
-\typeout{1^^J==}
-\UseTemplate{type}{Ta}{}
+\input docstrip
+\keepsilent
+\askforoverwritefalse
-\typeout{2^^J==}
-\UseTemplate{type}{Ta}{one=44pt, two=7}
+\preamble
+(C) Copyright The LaTeX3 Project and any individual authors
+listed elsewhere in this file.
-\DeclareRestrictedTemplate{type}{Tb}{Ta}{one=33pt}
+This is a generated file.
-\ShowTemplate{type}{Tb}
+This file was generated from file(s) of the xhead bundle.
+-----------------------------------------------------------
-\typeout{RESTRICT^^J3^^J==}
+This file may only be distributed together with a copy of this bundle.
+You may however distribute the bundle without such generated files.
-\DeclareInstance{type}{foo}{Tb}{two=9}
+======================================================================
-\ShowInstance{type}{foo}
+\endpreamble
-\UseInstance{type}{foo}
-\typeout{4^^J==}
-\UseTemplate{type}{Tb}{two=7}
+\generate{%
+ \file{xhead.sty}{\from{xhead.dtx}{package,trace}}
+% \file{xhead-sample.tex}{\from{xhead.dtx}{sample}}
+}
-\stop
+\endbatchfile
diff --git a/Master/texmf-dist/source/latex/xpackages/xtras/l3keys2e-demo.tex b/Master/texmf-dist/source/latex/xpackages/xtras/l3keys2e-demo.tex
deleted file mode 100644
index a00531e0741..00000000000
--- a/Master/texmf-dist/source/latex/xpackages/xtras/l3keys2e-demo.tex
+++ /dev/null
@@ -1,46 +0,0 @@
-% !TEX encoding = ISO-8859-1
-% !TEX program = pdflatex
-%
-% This file demonstrates the use of the l3keys2e module to allow
-% LaTeX3 keyvals (created using l3keys) to be used as LaTeX2e
-% package or class options.
-%
-
-% First, create a class
-\begin{filecontents}{l3keys2e-class.cls}
- \LoadClass{article}
- \RequirePackage{l3keys2e}
- \ProvidesExplClass{l3keys2e-class}{0000/00/00}{0.0}{test}
- \keys_define:nn { test1 } {
- option1 .code:n = {\wlog{You~gave~`#1'~for~option1}}
- }
- \ProcessKeysOptions { test1 }
-\end{filecontents}
-
-% Load the class with some options.
-% The class itself recognises `option1', leaving `option2' and
-% `option3' as global optons which are not yet used.
-\documentclass[option1=check,option2=more stuff,option3=unused]
- {l3keys2e-class}
-
-%Now create a package
-\begin{filecontents}{l3keys2e-package.sty}
- \RequirePackage{l3keys2e}
- \ProvidesExplPackage{l3keys2e-package}{0000/00/00}{0.0}{test}
- \keys_define:nn { test2 } {
- option1 .code:n = {\wlog{You~gave~`#1'~for~option1~(again)}},
- option2 .code:n = {\wlog{You~gave~`#1'~for~option2}},
- option4 .code:n = {\wlog{You~gave~`#1'~for~option4}},
- }
- \ProcessKeysOptions { test2 }
-\end{filecontents}
-
-% Load the package.
-\usepackage[option4={extra stuff},option5=undefined!]
- {l3keys2e-package}
-
-\begin{document}
-% The log should show that option3 is an unused global option, and that
-% option5 is not known by the l3keys2e-demo package. Everything else
-% should simply be listed in the log.
-\end{document}
diff --git a/Master/texmf-dist/source/latex/xpackages/xtras/l3keys2e.dtx b/Master/texmf-dist/source/latex/xpackages/xtras/l3keys2e.dtx
index 43eec9ceff8..576a0161c94 100644
--- a/Master/texmf-dist/source/latex/xpackages/xtras/l3keys2e.dtx
+++ b/Master/texmf-dist/source/latex/xpackages/xtras/l3keys2e.dtx
@@ -77,9 +77,8 @@
%
% As with any key--value input, using key--value pairs as package or
% class options has two parts. The first stage is to define one or
-% more keys. This should be done using the \LaTeX3 module \pkg{l3keys}.
-% For example, an option which simply stores a value would be created
-% using:
+% more keys, using the \cs{keys_define:nn} function. For example, an
+% option which simply stores a value would be created using:
%\begin{verbatim}
% \keys_define:nn { module } {
% option .set:N = \l_module_variable_tl
@@ -89,92 +88,31 @@
% class containing the definition. The second stage is therefore to
% process the current options, searching for applicable keys.
%
-%\begin{function}{\ProcessKeysOptions}
+%\begin{function}{ \ProcessKeysOptions }
% \begin{syntax}
-% "\ProcessKeysOptions" \Arg{module}
+% \cs{ProcessKeysOptions} \Arg{module}
% \end{syntax}
% The \cs{ProcessKeysOptions} function is used to check the current
-% option list against the keys defined for <module>. Global (class)
+% option list against the keys defined for \Arg{module}. Global (class)
% options and local (package) options are checked when this function
% is called in a package. Each option which does match a key name is
% then used to attempt to set the appropriate key using
% \cs{keys_set:nn}. For example, the option defined earlier would be
-% processed by the line
-% \begin{verbatim}
-% \ProcessKeysOptions { module }
-% \end{verbatim}
+% processed by the line
+% \begin{verbatim}
+% \ProcessKeysOptions { module }
+% \end{verbatim}
%\end{function}
%
-%\begin{function}{\ProcessKeysPackageOptions}
+%\begin{function}{ \ProcessKeysPackageOptions }
% \begin{syntax}
-% "\ProcessKeysPackageOptions" \Arg{module}
+% \cs{ProcessKeysPackageOptions} \Arg{module}
% \end{syntax}
% This function works in a similar manner to \cs{ProcessKeysOptions}.
-% When used in a LaTeX2e package, \cs{ProcessKeysPackageOptions}
+% When used in a \LaTeXe\ package, \cs{ProcessKeysPackageOptions}
% will not examine any class options available. In contrast,
% \cs{ProcessKeysOptions} does parse class options (in common with the
-% LaTeX2e kernel function \cs{ProcessOptions}).
-%\end{function}
-%
-%\subsection{Internal functions and variables}
-%
-%\begin{variable}{\keys_latexe_options_clist}
-% Local options and applicable global (class) options are collected up
-% here prior to processing using \cs{keys_set:nn}.
-%\end{variable}
-%
-%\begin{function}{\keys_latexe_options:n}
-% \begin{syntax}
-% "\keys_latexe_options:n" \Arg{module}
-% \end{syntax}
-% Examines current global and local options, comparing them to the
-% keys defined for <module>. Option names which match defined keys are
-% then executed by passing the appropriate data to \cs{keys_set:nn}.
-%\end{function}
-%
-%\begin{function}{\keys_latexe_options_global:n}
-% \begin{syntax}
-% "\keys_latexe_options_global:n" \Arg{module}
-% \end{syntax}
-% Makes appropriate checks on global (class) options, then searches for
-% key matches for <module>.
-%\end{function}
-%
-%\begin{function}{\keys_latexe_options_class:n}
-% \begin{syntax}
-% "\keys_latexe_options_class:n" \Arg{module}
-% \end{syntax}
-% Processes global options when the current file is itself a class,
-% checking the options against keys defined for <module>.
-%\end{function}
-%
-%\begin{function}{\keys_latexe_options_package:n}
-% \begin{syntax}
-% "\keys_latexe_options_package:n" \Arg{module}
-% \end{syntax}
-% Processes global options when the current file is a \LaTeXe\ package,
-% checking the options against keys defined for <module>.
-%\end{function}
-%
-%\begin{function}{\keys_latexe_options_local:}
-% \begin{syntax}
-% "\keys_latexe_options_local:"
-% \end{syntax}
-% Finds local (package) options and adds them to the list to be
-% parsed by \cs{keys_set:nn}.
-%\end{function}
-%
-%\begin{function}{
-% \keys_latexe_remove_equals:n / (EXP) |
-% \keys_latexe_remove_equals:w / (EXP)
-%}
-% \begin{syntax}
-% "\keys_latexe_remove_equals:n" \Arg{option}
-% "\keys_latexe_remove_equals:w" <key> = <value> "\q_stop"
-% \end{syntax}
-% Returns only the key part of a key--value option by removing
-% everything after the first equals sign. It is assumed that, as this
-% will apply in the preamble, equals signs have category code 12.
+% \LaTeXe\ kernel function \cs{ProcessOptions}).
%\end{function}
%
%\end{documentation}
@@ -183,17 +121,17 @@
%
%\subsection{Implementation}
%
-% The usual lead-off, using \pkg{xparse} at the interface level.
+% The usual lead-off.
% \begin{macrocode}
%<*package>
\ProvidesExplPackage
{\filename}{\filedate}{\fileversion}{\filedescription}
-\RequirePackage{xparse}
+\RequirePackage { xparse }
% \end{macrocode}
%
%\begin{macro}{\keys_latexe_options_clist}
-% The module collects all applicable global and local options into a
-% single list before processing them.
+% A single list is used for all options, into which they are collected
+% before processing.
% \begin{macrocode}
\clist_new:N \keys_latexe_options_clist
% \end{macrocode}
@@ -206,34 +144,33 @@
\bool_new:N \_l_keys_process_class_bool
% \end{macrocode}
%\end{macro}
-%
+%
%\begin{macro}{\keys_latexe_options:n}
% The main function calls functions to collect up the global and local
-% options into \cs{keys_latexe_options_clist} before calling the main
-% \pkg{l3keys} module to actually do the processing. So that a suitable
+% options into \cs{keys_latexe_options_clist} before calling the
+% underlying functions to actually do the processing. So that a suitable
% message is produced if the option is unknown, the special
% \texttt{unknown} key is set if it does not already exist for the
% current module.
% \begin{macrocode}
-\cs_new:Npn \keys_latexe_options:n #1 {
+\cs_new_protected:Npn \keys_latexe_options:n #1 {
\clist_clear:N \keys_latexe_options_clist
\keys_latexe_options_global:n {#1}
\keys_latexe_options_local:
- \keys_if_exist:nnF {#1} { unknown } {
- \keys_define:nn {#1} {
- unknown .code:n = {
- \msg_error:nnxx { Option~Processing } { unknown-option }
- { \l_keys_key_tl } { \@currname }
- }
+ \cs_if_exist:cTF { \c_keys_root_tl {#1} / unknown .cmd:n }
+ {
+ \keys_define:nn {#1}
+ {
+ unknown .code:n =
+ {
+ \msg_kernel_error:nnxx { keyvalue } { option-unknown }
+ { \l_keys_key_tl } { \@currname }
+ }
+ }
}
- }
\keys_set:nV {#1} \keys_latexe_options_clist
\AtEndOfPackage { \cs_set_eq:NN \@unprocessedoptions \scan_stop: }
}
-\msg_new:nnn { Option~Processing } { unknown-option } {%
- Unknown~option~`#1'\\%
- for~module~#2.%
-}
% \end{macrocode}
%\end{macro}
%
@@ -243,15 +180,16 @@
% file type. The initial test is needed as \LaTeXe\ allows variables to
% be equal to \cs{scan_stop:}, which is forbidden in \LaTeX3 code.
% \begin{macrocode}
-\cs_new:Npn \keys_latexe_options_global:n #1 {
- \cs_if_eq:NNF \@classoptionslist \scan_stop: {
- \cs_if_eq:NNTF \@currext \@clsextension {
- \keys_latexe_options_class:n {#1}
- }{
- \bool_if:NT \_l_keys_process_class_bool
- { \keys_latexe_options_package:n {#1} }
+\cs_new_protected:Npn \keys_latexe_options_global:n #1 {
+ \cs_if_eq:NNF \@classoptionslist \scan_stop:
+ {
+ \cs_if_eq:NNTF \@currext \@clsextension
+ { \keys_latexe_options_class:n {#1} }
+ {
+ \bool_if:NT \_l_keys_process_class_bool
+ { \keys_latexe_options_package:n {#1} }
+ }
}
- }
}
% \end{macrocode}
%\end{macro}
@@ -262,14 +200,17 @@
% the combined list for processing. On the other hand, unused options
% are stored up in \cs{@unusedoptionlist}.
% \begin{macrocode}
-\cs_new:Npn \keys_latexe_options_class:n #1 {
- \clist_map_inline:Nn \@classoptionslist {
- \keys_if_exist:nnTF {#1} { \keys_latexe_remove_equals:n {##1} } {
- \clist_put_right:Nn \keys_latexe_options_clist {##1}
- }{
- \clist_put_right:Nn \@unusedoptionlist {##1}
+\cs_new_protected:Npn \keys_latexe_options_class:n #1 {
+ \clist_map_inline:Nn \@classoptionslist
+ {
+ \cs_if_exist:cTF
+ {
+ \c_keys_root_tl #1 /
+ \keys_latexe_remove_equals:n {##1} .cmd:n
+ }
+ { \clist_put_right:Nn \keys_latexe_options_clist {##1} }
+ { \clist_put_right:Nn \@unusedoptionlist {##1} }
}
- }
}
% \end{macrocode}
%\end{macro}
@@ -280,13 +221,19 @@
% there is nothing to do if the option is not applicable. Each valid
% option also needs to be removed from \cs{@unusedoptionlist}.
% \begin{macrocode}
-\cs_new:Npn \keys_latexe_options_package:n #1 {
- \clist_map_inline:Nn \@classoptionslist {
- \keys_if_exist:nnT {#1} { \keys_latexe_remove_equals:n {##1} } {
- \clist_put_right:Nn \keys_latexe_options_clist {##1}
- \clist_remove_element:Nn \@unusedoptionlist {##1}
+\cs_new_protected:Npn \keys_latexe_options_package:n #1 {
+ \clist_map_inline:Nn \@classoptionslist
+ {
+ \cs_if_exist:cTF
+ {
+ \c_keys_root_tl #1 /
+ \keys_latexe_remove_equals:n {##1} .cmd:n
+ }
+ {
+ \clist_put_right:Nn \keys_latexe_options_clist {##1}
+ \clist_remove_element:Nn \@unusedoptionlist {##1}
+ }
}
- }
}
% \end{macrocode}
%\end{macro}
@@ -296,13 +243,15 @@
% \LaTeXe\ stores options for each file in a macro which may or may not
% exist, hence the need to use \cs{cs_if_exist:c}.
% \begin{macrocode}
-\cs_new_nopar:Npn \keys_latexe_options_local: {
- \cs_if_eq:NNF \@currext \@clsextension {
- \cs_if_exist:cT { opt@ \@currname . \@currext } {
- \exp_args:NNc \clist_put_right:NV \keys_latexe_options_clist
- { opt@ \@currname . \@currext }
+\cs_new_protected_nopar:Npn \keys_latexe_options_local: {
+ \cs_if_eq:NNF \@currext \@clsextension
+ {
+ \cs_if_exist:cT { opt@ \@currname . \@currext }
+ {
+ \exp_args:NNc \clist_put_right:NV \keys_latexe_options_clist
+ { opt@ \@currname . \@currext }
+ }
}
- }
}
% \end{macrocode}
%\end{macro}
@@ -327,11 +276,11 @@
% contrast to other similar packages, the module name is always required
% here.
% \begin{macrocode}
-\NewDocumentCommand \ProcessKeysOptions { m } {
+\cs_new_protected:Npn \ProcessKeysOptions #1 {
\bool_set_true:N \_l_keys_process_class_bool
\keys_latexe_options:n {#1}
}
-\NewDocumentCommand \ProcessKeysPackageOptions { m } {
+\cs_new_protected:Npn \ProcessKeysPackageOptions #1 {
\bool_set_false:N \_l_keys_process_class_bool
\keys_latexe_options:n {#1}
}
@@ -341,6 +290,16 @@
%\end{macro}
%\end{macro}
%
+% One message to give.
+% \begin{macrocode}
+\msg_kernel_new:nnnn { keyvalue } { option-unknown }
+ { Unknown~option~'#1'~for~package~#2. }
+ {
+ LaTeX~has~been~asked~to~set~an~option~called~'#1'\\
+ but~the~#2~package~has~not~created~an~option~with~this~name.
+ }
+% \end{macrocode}
+%
% \begin{macrocode}
%</package>
% \end{macrocode}