summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2015-07-29 20:47:01 +0000
committerKarl Berry <karl@freefriends.org>2015-07-29 20:47:01 +0000
commitdb0facd61cf60ed3452c300b54f11c0524a50a53 (patch)
tree74963ac7b29b8e5c006ddeee61b1fe8b5c28a068 /Master/texmf-dist/source/latex
parentc65840a39db649af13ec3ceefaa2481d37d1e086 (diff)
l3 (29jul15)
git-svn-id: svn://tug.org/texlive/trunk@37997 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/latex')
-rw-r--r--Master/texmf-dist/source/latex/l3experimental/l3sort/l3sort.dtx6
-rw-r--r--Master/texmf-dist/source/latex/l3experimental/l3str/l3flag.dtx6
-rw-r--r--Master/texmf-dist/source/latex/l3experimental/l3str/l3regex.dtx6
-rw-r--r--Master/texmf-dist/source/latex/l3experimental/l3str/l3str-expl.dtx6
-rw-r--r--Master/texmf-dist/source/latex/l3experimental/l3str/l3tl-build.dtx6
-rw-r--r--Master/texmf-dist/source/latex/l3experimental/xgalley/l3galley.dtx68
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/expl3.dtx6
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx17
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3file.dtx43
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx6
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3keys.dtx53
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3names.dtx10
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3seq.dtx98
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3unicode-data.dtx62
-rw-r--r--Master/texmf-dist/source/latex/l3packages/l3keys2e/l3keys2e.dtx6
-rw-r--r--Master/texmf-dist/source/latex/l3packages/xparse/xparse.dtx6
-rw-r--r--Master/texmf-dist/source/latex/l3packages/xtemplate/xtemplate.dtx6
17 files changed, 290 insertions, 121 deletions
diff --git a/Master/texmf-dist/source/latex/l3experimental/l3sort/l3sort.dtx b/Master/texmf-dist/source/latex/l3experimental/l3sort/l3sort.dtx
index 87c63f0f95f..6d0cae589b0 100644
--- a/Master/texmf-dist/source/latex/l3experimental/l3sort/l3sort.dtx
+++ b/Master/texmf-dist/source/latex/l3experimental/l3sort/l3sort.dtx
@@ -37,8 +37,8 @@
%<*driver|package>
% The version of expl3 required is tested as early as possible, as
% some really old versions do not define \ProvidesExplPackage.
-\RequirePackage{expl3}[2015/07/14]
-%<package>\@ifpackagelater{expl3}{2015/07/14}
+\RequirePackage{expl3}[2015/07/28]
+%<package>\@ifpackagelater{expl3}{2015/07/28}
%<package> {}
%<package> {%
%<package> \PackageError{l3sort}{Support package l3kernel too old}
@@ -50,7 +50,7 @@
%<package> }%
%<package> \endinput
%<package> }
-\GetIdInfo$Id: l3sort.dtx 5662 2015-07-14 21:32:38Z joseph $
+\GetIdInfo$Id: l3sort.dtx 5700 2015-07-28 19:26:39Z joseph $
{L3 Experimental sorting functions}
%</driver|package>
%<*driver>
diff --git a/Master/texmf-dist/source/latex/l3experimental/l3str/l3flag.dtx b/Master/texmf-dist/source/latex/l3experimental/l3str/l3flag.dtx
index 8ccddada68e..d48b641bb3b 100644
--- a/Master/texmf-dist/source/latex/l3experimental/l3str/l3flag.dtx
+++ b/Master/texmf-dist/source/latex/l3experimental/l3str/l3flag.dtx
@@ -36,8 +36,8 @@
%<*driver|package>
% The version of expl3 required is tested as early as possible, as
% some really old versions do not define \ProvidesExplPackage.
-\RequirePackage{expl3}[2015/07/14]
-%<package>\@ifpackagelater{expl3}{2015/07/14}
+\RequirePackage{expl3}[2015/07/28]
+%<package>\@ifpackagelater{expl3}{2015/07/28}
%<package> {}
%<package> {%
%<package> \PackageError{l3flag}{Support package l3kernel too old}
@@ -49,7 +49,7 @@
%<package> }%
%<package> \endinput
%<package> }
-\GetIdInfo$Id: l3flag.dtx 5662 2015-07-14 21:32:38Z joseph $
+\GetIdInfo$Id: l3flag.dtx 5700 2015-07-28 19:26:39Z joseph $
{L3 Experimental flags}
%</driver|package>
%<*driver>
diff --git a/Master/texmf-dist/source/latex/l3experimental/l3str/l3regex.dtx b/Master/texmf-dist/source/latex/l3experimental/l3str/l3regex.dtx
index 5ba6268acbe..10bb159803f 100644
--- a/Master/texmf-dist/source/latex/l3experimental/l3str/l3regex.dtx
+++ b/Master/texmf-dist/source/latex/l3experimental/l3str/l3regex.dtx
@@ -36,8 +36,8 @@
%<*driver|package>
% The version of expl3 required is tested as early as possible, as
% some really old versions do not define \ProvidesExplPackage.
-\RequirePackage{expl3}[2015/07/14]
-%<package>\@ifpackagelater{expl3}{2015/07/14}
+\RequirePackage{expl3}[2015/07/28]
+%<package>\@ifpackagelater{expl3}{2015/07/28}
%<package> {}
%<package> {%
%<package> \PackageError{l3regex}{Support package l3kernel too old}
@@ -49,7 +49,7 @@
%<package> }%
%<package> \endinput
%<package> }
-\GetIdInfo$Id: l3regex.dtx 5662 2015-07-14 21:32:38Z joseph $
+\GetIdInfo$Id: l3regex.dtx 5700 2015-07-28 19:26:39Z joseph $
{L3 Experimental regular expressions}
%</driver|package>
%<*driver>
diff --git a/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-expl.dtx b/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-expl.dtx
index f6e5f958c6f..58e6b1b7706 100644
--- a/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-expl.dtx
+++ b/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-expl.dtx
@@ -36,8 +36,8 @@
%<*driver|package>
% The version of expl3 required is tested as early as possible, as
% some really old versions do not define \ProvidesExplPackage.
-\RequirePackage{expl3}[2015/07/14]
-%<package>\@ifpackagelater{expl3}{2015/07/14}
+\RequirePackage{expl3}[2015/07/28]
+%<package>\@ifpackagelater{expl3}{2015/07/28}
%<package> {}
%<package> {%
%<package> \PackageError{l3str}{Support package l3kernel too old}
@@ -49,7 +49,7 @@
%<package> }%
%<package> \endinput
%<package> }
-\GetIdInfo$Id: l3str-expl.dtx 5662 2015-07-14 21:32:38Z joseph $
+\GetIdInfo$Id: l3str-expl.dtx 5700 2015-07-28 19:26:39Z joseph $
{L3 Experimental strings}
\def\ExplFileName{l3str}
%</driver|package>
diff --git a/Master/texmf-dist/source/latex/l3experimental/l3str/l3tl-build.dtx b/Master/texmf-dist/source/latex/l3experimental/l3str/l3tl-build.dtx
index 7f98dd7eec4..0ef1f967d53 100644
--- a/Master/texmf-dist/source/latex/l3experimental/l3str/l3tl-build.dtx
+++ b/Master/texmf-dist/source/latex/l3experimental/l3str/l3tl-build.dtx
@@ -36,8 +36,8 @@
%<*driver|package>
% The version of expl3 required is tested as early as possible, as
% some really old versions do not define \ProvidesExplPackage.
-\RequirePackage{expl3}[2015/07/14]
-%<package>\@ifpackagelater{expl3}{2015/07/14}
+\RequirePackage{expl3}[2015/07/28]
+%<package>\@ifpackagelater{expl3}{2015/07/28}
%<package> {}
%<package> {%
%<package> \PackageError{l3tl-build}{Support package l3kernel too old}
@@ -49,7 +49,7 @@
%<package> }%
%<package> \endinput
%<package> }
-\GetIdInfo$Id: l3tl-build.dtx 5662 2015-07-14 21:32:38Z joseph $
+\GetIdInfo$Id: l3tl-build.dtx 5700 2015-07-28 19:26:39Z joseph $
{L3 Experimental token list construction}
%</driver|package>
%<*driver>
diff --git a/Master/texmf-dist/source/latex/l3experimental/xgalley/l3galley.dtx b/Master/texmf-dist/source/latex/l3experimental/xgalley/l3galley.dtx
index 16b7694578c..90441e87e97 100644
--- a/Master/texmf-dist/source/latex/l3experimental/xgalley/l3galley.dtx
+++ b/Master/texmf-dist/source/latex/l3experimental/xgalley/l3galley.dtx
@@ -38,8 +38,8 @@
%<*driver|package>
% The version of expl3 required is tested as early as possible, as
% some really old versions do not define \ProvidesExplPackage.
-\RequirePackage{expl3}[2015/07/14]
-%<package>\@ifpackagelater{expl3}{2015/07/14}
+\RequirePackage{expl3}[2015/07/28]
+%<package>\@ifpackagelater{expl3}{2015/07/28}
%<package> {}
%<package> {%
%<package> \PackageError{l3galley}{Support package l3kernel too old}
@@ -51,7 +51,7 @@
%<package> }%
%<package> \endinput
%<package> }
-\GetIdInfo$Id: l3galley.dtx 5662 2015-07-14 21:32:38Z joseph $
+\GetIdInfo$Id: l3galley.dtx 5700 2015-07-28 19:26:39Z joseph $
{L3 Experimental galley code}
%</driver|package>
%<*driver>
@@ -1472,26 +1472,37 @@
% \end{verbatim}
% and so anything applied here must be done globally.
%
-% \begin{macro}[int]{\@@_start_paragraph_std:}
+% \begin{macro}[int]{\@@_start_paragraph_common:N}
+% Share some code between all types of paragraph start.
% The routine at the start of a paragraph starts by removing any
% (empty) indent box from the vertical list. As there may be vertical
-% mode items still to insert, a \cs{tex_par:D} primitive is used to
+% mode items still to insert (|#1|), a \cs{tex_par:D} primitive is used to
% get back into vertical mode before they are tidied up. To get back
% again to horizontal mode, \cs{tex_noindent:D} can be used. To avoid
% an infinite loop, \cs{tex_everypar:D} is locally cleared before doing
-% that. Back in horizontal mode, the horizontal mode items can be
-% tidied up before sorting out any items which have been set on a
-% single-paragraph basis.
+% that.
% \begin{macrocode}
-\cs_new_protected_nopar:Npn \@@_start_paragraph_std:
+\cs_new_protected:Npn \@@_start_paragraph_common:N #1
{
\group_begin:
\box_gset_to_last:N \g_@@_last_box
\tex_par:D
- \@@_insert_vertical_items:
+ #1
\tex_everypar:D { }
\tex_noindent:D
\group_end:
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[int]{\@@_start_paragraph_std:}
+% After dealign with the common items, the horizontal mode items can be
+% tidied up before sorting out any items which have been set on a
+% single-paragraph basis.
+% \begin{macrocode}
+\cs_new_protected_nopar:Npn \@@_start_paragraph_std:
+ {
+ \@@_start_paragraph_common:N \@@_insert_vertical_items:
\@@_insert_horizontal_items:
\@@_restore_running_parameters:
}
@@ -1499,31 +1510,32 @@
% \end{macro}
%
% \begin{macro}[int]{\@@_start_paragraph_first:}
+% \begin{macro}[aux]{\@@_insert_vspace_first:}
% For the very first paragraph in a galley, the code needs to avoid
% adding any unnecessary vertical items at the top as it will interfere with
-% vertical positioning in \cs{tex_vtop:D}.
+% vertical positioning in \cs{tex_vtop:D}. That requirement also means we
+% must not add any vertical space as the start of the box unless there
+% is a user space to insert.
% \begin{macrocode}
\cs_new_protected_nopar:Npn \@@_start_paragraph_first:
{
\bool_gset_false:N \g_@@_begin_level_bool
\mode_if_horizontal:TF
- {
- \group_begin:
- \box_gset_to_last:N \g_@@_last_box
- \tex_par:D
- \@@_insert_vspace:
- \tex_everypar:D { }
- \tex_noindent:D
- \group_end:
- }
- { \@@_insert_vspace: }
+ { \@@_start_paragraph_common:N \@@_insert_vspace_first: }
+ { \@@_insert_vspace_first: }
\@@_insert_horizontal_items:
\@@_restore_running_parameters:
}
+\cs_new_protected_nopar:Npn \@@_insert_vspace_first:
+ {
+ \tl_if_empty:NF \g_@@_interpar_vspace_user_tl
+ { \skip_vertical:n { \g_@@_interpar_vspace_user_tl } }
+ }
% \end{macrocode}
% \end{macro}
+% \end{macro}
%
-% \begin{macro}[int]{\@@_insert_vertical_items, \@@_insert_vspace:}
+% \begin{macro}[int]{\@@_insert_vertical_items}
% The aim here is to insert the vertical items such that they attach to
% the correct place. This function is used as part of the \cs{tex_everypar:D}
% mechanism, meaning that the immediately-preceding item on the vertical
@@ -1532,7 +1544,8 @@
% should stay glued on. After the whatsits, a penalty for
% breaking will be inserted. This will be the user penalty if supplied,
% or the running penalty unless the no-break flag is set. Finally,
-% the inter-paragraph space is applied.
+% the inter-paragraph space is applied: only one space is ever added
+% there.
% \begin{macrocode}
\cs_new_protected_nopar:Npn \@@_insert_vertical_items:
{
@@ -1550,15 +1563,6 @@
\tl_gclear:N \g_@@_interpar_penalty_user_tl
}
\bool_gset_false:N \g_galley_no_break_next_bool
- \@@_insert_vspace:
- }
-% \end{macrocode}
-% Inserting vertical space is set up as a separate function as it comes
-% up in a few places. The idea here is that any user-set space will
-% override the design value, and only one space is ever inserted.
-% \begin{macrocode}
-\cs_new_protected_nopar:Npn \@@_insert_vspace:
- {
\tl_if_empty:NTF \g_@@_interpar_vspace_user_tl
{ \skip_vertical:N \l_galley_interpar_vspace_skip }
{
diff --git a/Master/texmf-dist/source/latex/l3kernel/expl3.dtx b/Master/texmf-dist/source/latex/l3kernel/expl3.dtx
index 096973bc23c..dc7a203660f 100644
--- a/Master/texmf-dist/source/latex/l3kernel/expl3.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/expl3.dtx
@@ -36,8 +36,8 @@
%<*driver|generic|package>
\def\ExplFileName{expl3}
\def\ExplFileDescription{L3 programming layer}
-\def\ExplFileDate{2015/07/15}
-\def\ExplFileVersion{5666}
+\def\ExplFileDate{2015/07/28}
+\def\ExplFileVersion{5700}
%</driver|generic|package>
%<*driver>
\documentclass[full]{l3doc}
@@ -987,6 +987,7 @@
% \item Johannes Braams
% \item David Carlisle
% \item Robin Fairbairns
+% \item Morten H{\o}gholm
% \item Bruno Le Floch
% \item Thomas Lotze
% \item Frank Mittelbach
@@ -999,7 +1000,6 @@
% \begin{itemize}
% \item Michael Downes
% \item Denys Duchier
-% \item Morten H{\o}gholm
% \item Alan Jeffrey
% \item Martin Schr{\"o}der
% \end{itemize}
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx b/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx
index abc040a20d0..7f24c5b9e74 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx
@@ -38,7 +38,7 @@
\documentclass[full]{l3doc}
%</driver>
%<*driver|package>
-\GetIdInfo$Id: l3candidates.dtx 5613 2015-05-21 11:59:04Z joseph $
+\GetIdInfo$Id: l3candidates.dtx 5677 2015-07-22 14:47:23Z joseph $
{L3 Experimental additions to l3kernel}
%</driver|package>
%<*driver>
@@ -967,6 +967,9 @@
% The case pairs I/i-dotless and I-dot/i are activated for these
% languages. The combining dot mark is removed when lower
% casing I-dot and introduced when upper casing i-dotless.
+% \item German (\texttt{de-alt}).
+% An alternative mapping for German in which the lower case
+% \emph{Eszett} maps to a \emph{gro\ss{}es Eszett}.
% \item Lithuanian (\texttt{lt}).
% The lower case letters i and j should retain a dot above when the
% accents grave, acute or tilde are present. This is implemented for
@@ -3822,6 +3825,18 @@
% \end{macro}
% \end{macro}
%
+% \begin{macro}{\__tl_change_case_upper_de-alt:Nnw}
+% A simple alternative version for German.
+% \begin{macrocode}
+\cs_new:cpn { @@_change_case_upper_de-alt:Nnw } #1#2
+ {
+ \int_compare:nNnTF { `#1 } = { 223 }
+ { \__tl_change_case_output:Vwn \c__unicode_upper_Eszett_tl }
+ {#2}
+ }
+% \end{macrocode}
+% \end{macro}
+%
% \begin{macro}[aux, EXP]{\@@_mixed_case:nn}
% \begin{macro}[aux, EXP]{\@@_mixed_case_aux:nn}
% \begin{macro}[aux, EXP]{\@@_mixed_case_loop:wn}
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3file.dtx b/Master/texmf-dist/source/latex/l3kernel/l3file.dtx
index b057b04dc80..0b6a3b58842 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3file.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3file.dtx
@@ -37,7 +37,7 @@
\documentclass[full]{l3doc}
%</driver>
%<*driver|package>
-\GetIdInfo$Id: l3file.dtx 5627 2015-06-07 09:26:26Z bruno $
+\GetIdInfo$Id: l3file.dtx 5688 2015-07-27 16:57:49Z bruno $
{L3 File and I/O operations}
%</driver|package>
%<*driver>
@@ -593,7 +593,8 @@
% \begin{variable}{\g_file_current_name_tl}
% The name of the current file should be available at all times.
% For the format the file name needs to be picked up at the start of the
-% file. In package mode the current file name is collected from \LaTeXe{}.
+% file. In \LaTeXe{} package mode the current file name is collected from
+% \tn{@currname}.
% \begin{macrocode}
\tl_new:N \g_file_current_name_tl
%<*initex>
@@ -604,7 +605,8 @@
}
%</initex>
%<*package>
-\tl_gset_eq:NN \g_file_current_name_tl \@currname
+\cs_if_exist:NT \@currname
+ { \tl_gset_eq:NN \g_file_current_name_tl \@currname }
%</package>
% \end{macrocode}
% \end{variable}
@@ -1044,6 +1046,22 @@
% \end{macro}
% \end{macro}
%
+% \begin{macro}[int]{\@@_new:N}
+% In package mode, streams are reserved using \tn{newread} before they
+% can be managed by \pkg{ior}. To prevent \pkg{ior} from being
+% affected by redefinitions of \tn{newread} (such as done by the
+% third-party package \pkg{morewrites}), this macro is saved here
+% under a private name. The complicated code ensures that
+% \cs{@@_new:N} is not \tn{outer} despite plain \TeX{}'s \tn{newread}
+% being \tn{outer}.
+% \begin{macrocode}
+%<*package>
+\exp_args:NNNo \exp_args:NNo \cs_new_protected_nopar:Npn \@@_new:N
+ { \cs:w newread \cs_end: }
+%</package>
+% \end{macrocode}
+% \end{macro}
+%
% \begin{macro}[int]{\@@_open:Nn, \@@_open:No}
% \begin{macro}[aux]{\@@_open_stream:Nn}
% The stream allocation itself uses the fact that there is a list of all of
@@ -1051,8 +1069,8 @@
% the top of the list. In package mode, life gets more complex as it's
% important to keep things in sync. That is done using a two-part approach:
% any streams that have already been taken up by \pkg{ior} but are now free
-% are tracked, so we first try those. If that fails, ask \LaTeXe{} for a new
-% stream and use that number (after a bit of conversion).
+% are tracked, so we first try those. If that fails, ask plain \TeX{} or \LaTeXe{}
+% for a new stream and use that number (after a bit of conversion).
% \begin{macrocode}
\cs_new_protected:Npn \@@_open:Nn #1#2
{
@@ -1064,7 +1082,7 @@
%</initex>
%<*package>
{
- \cs:w newread \cs_end: #1
+ \@@_new:N #1
\tl_set:Nx \l_@@_stream_tl { \int_eval:n {#1} }
\@@_open_stream:Nn #1 {#2}
}
@@ -1265,6 +1283,17 @@
% \end{macrocode}
% \end{macro}
%
+% \begin{macro}[int]{\@@_new:N}
+% As for read streams, copy \tn{newwrite} in package mode, making sure
+% that it is not \tn{outer}.
+% \begin{macrocode}
+%<*package>
+\exp_args:NNNo \exp_args:NNo \cs_new_protected_nopar:Npn \@@_new:N
+ { \cs:w newwrite \cs_end: }
+%</package>
+% \end{macrocode}
+% \end{macro}
+%
% \begin{macro}{\iow_open:Nn, \iow_open:cn}
% \begin{macro}[int]{\@@_open:Nn}
% \begin{macro}[aux]{\@@_open_stream:Nn}
@@ -1284,7 +1313,7 @@
%</initex>
%<*package>
{
- \cs:w newwrite \cs_end: #1
+ \@@_new:N #1
\tl_set:Nx \l_@@_stream_tl { \int_eval:n {#1} }
\@@_open_stream:Nn #1 {#2}
}
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx
index d870cb6e4e1..53986abf2c8 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx
@@ -36,7 +36,7 @@
%
%<*driver>
\documentclass[full]{l3doc}
-\GetIdInfo$Id: l3fp-logic.dtx 5354 2014-08-23 01:35:39Z bruno $
+\GetIdInfo$Id: l3fp-logic.dtx 5680 2015-07-24 02:54:00Z bruno $
{L3 Floating-point conditionals}
\begin{document}
\DocInput{\jobname.dtx}
@@ -83,8 +83,8 @@
% \Arg{expo_2} \meta{body_2} |;|
% \item \cs{@@_minmax_o:Nw} \meta{sign} \meta{floating point array}
% \item \cs{@@_not_o:w} |?| \meta{floating point array} (with one floating point number only)
-% \item \cs{@@_\string&_o:ww} \meta{floating point} \meta{floating point}
-% \item \cs{@@_\string|_o:ww} \meta{floating point} \meta{floating point}
+% \item \cs{@@_&_o:ww} \meta{floating point} \meta{floating point}
+% \item \cs{@@_|_o:ww} \meta{floating point} \meta{floating point}
% \item \cs{@@_ternary:NwwN}, \cs{@@_ternary_auxi:NwwN},
% \cs{@@_ternary_auxii:NwwN} have to be understood.
% \end{itemize}
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx b/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx
index e5770e48c2b..d8745a856f5 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx
@@ -37,7 +37,7 @@
\documentclass[full]{l3doc}
%</driver>
%<*driver|package>
-\GetIdInfo$Id: l3keys.dtx 5665 2015-07-15 06:13:22Z joseph $
+\GetIdInfo$Id: l3keys.dtx 5684 2015-07-26 07:23:48Z joseph $
{L3 Key-value interfaces}
%</driver|package>
%<*driver>
@@ -158,7 +158,7 @@
% \keys_define:nn { mymodule }
% {
% keyname .code:n = Some~code~using~#1,
-% keyname .value_required:
+% keyname .value_required:n = true
% }
% \end{verbatim}
% where the properties of the key begin from the |.| after the key
@@ -1314,7 +1314,9 @@
% |\cs_set_protected:cpn| not |\cs_new_protected:cpn| here. For the
% same reason, to avoid issues if the key has been undefined in the
% current scope but exists at a higher level, we do not use \cs{prop_new:c}
-% but rather \cs{prop_set_eq:cN}.
+% but rather \cs{prop_set_eq:cN}. The use of \cs{__chk_if_free_cs:c}
+% ensures that when logging of all new functions is active, keys
+% still show up (as we are not using \cs{..._new}).
% \begin{macrocode}
\cs_new_protected:Npn \@@_ensure_exist:n #1
{
@@ -1324,6 +1326,7 @@
}
\cs_if_exist:cF { \c_@@_code_root_tl #1 }
{
+ \__chk_if_free_cs:c { \c_@@_code_root_tl #1 }
\cs_set_protected:cpn { \c_@@_code_root_tl #1 } ##1 { }
}
}
@@ -1485,7 +1488,7 @@
\cs_new_protected:Npn \@@_default_set:n #1
{
\@@_ensure_exist:V \l_keys_path_tl
- \tl_if_blank:nTF {#1}
+ \tl_if_empty:nTF {#1}
{
\prop_remove:cn { \c_@@_info_root_tl \l_keys_path_tl }
{ default }
@@ -1875,7 +1878,7 @@
% \end{macro}
%
% \begin{macro}{.undefine:}
-% TAnother simple wrapper.
+% Another simple wrapper.
% \begin{macrocode}
\cs_new_protected_nopar:cpn { \c_@@_props_root_tl .undefine: }
{ \@@_undefine: }
@@ -2010,8 +2013,8 @@
% \end{macro}
%
% \begin{macro}[int]{\@@_set_elt:n, \@@_set_elt:nn}
-% \begin{macro}[aux]{\@@_set_elt_aux:nn}
-% \begin{macro}[aux, EXP]{\@@_key_find:w}
+% \begin{macro}[aux]{\@@_set_elt_aux:nnn, \@@_set_elt_aux:onn}
+% \begin{macro}[aux]{\@@_find_key_module:w}
% \begin{macro}[aux]{\@@_set_elt_aux:, \@@_set_elt_selective:}
% A shared system once again. First, set the current path and add a
% default if needed. There are then checks to see if the a value is
@@ -2021,28 +2024,44 @@
\cs_new_protected:Npn \@@_set_elt:n #1
{
\bool_set_true:N \l_@@_no_value_bool
- \@@_set_elt_aux:nn {#1} { }
+ \@@_set_elt_aux:onn \l_@@_module_tl {#1} { }
}
\cs_new_protected:Npn \@@_set_elt:nn #1#2
{
\bool_set_false:N \l_@@_no_value_bool
- \@@_set_elt_aux:nn {#1} {#2}
+ \@@_set_elt_aux:onn \l_@@_module_tl {#1} {#2}
}
-\cs_new_protected:Npn \@@_set_elt_aux:nn #1#2
+% \end{macrocode}
+% The key path here can be fully defined, after which there is a search
+% for the key and module names: the user may have passed them with part
+% of what is actually the module (for our purposes) in the key name. As
+% that happens on a per-key basis, we use the stack approach to restore
+% the module name without a group.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_set_elt_aux:nnn #1#2#3
{
- \tl_set:Nx \l_keys_path_tl { \l_@@_module_tl / \tl_to_str:n {#1} }
- \tl_set:Nx \l_keys_key_tl
- { \exp_after:wN \@@_key_find:w \l_keys_path_tl / \q_stop }
- \@@_value_or_default:n {#2}
+ \tl_set:Nx \l_keys_path_tl { \l_@@_module_tl / \tl_to_str:n {#2} }
+ \tl_clear:N \l_@@_module_tl
+ \exp_after:wN \@@_find_key_module:w \l_keys_path_tl / \q_stop
+ \@@_value_or_default:n {#3}
\bool_if:NTF \l_@@_selective_bool
{ \@@_set_elt_selective: }
{ \@@_set_elt_aux: }
+ \tl_set:Nn \l_@@_module_tl {#1}
}
-\cs_new:Npn \@@_key_find:w #1 / #2 \q_stop
+\cs_generate_variant:Nn \@@_set_elt_aux:nnn { o }
+\cs_new_protected:Npn \@@_find_key_module:w #1 / #2 \q_stop
{
\tl_if_blank:nTF {#2}
- { #1 }
- { \@@_key_find:w #2 \q_stop }
+ { \tl_set:Nn \l_keys_key_tl {#1} }
+ {
+ \tl_put_right:Nx \l_@@_module_tl
+ {
+ \tl_if_empty:NF \l_@@_module_tl { / }
+ #1
+ }
+ \@@_find_key_module:w #2 \q_stop
+ }
}
\cs_new_protected_nopar:Npn \@@_set_elt_aux:
{
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3names.dtx b/Master/texmf-dist/source/latex/l3kernel/l3names.dtx
index d7a3c19c3ae..f8ae4de880f 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3names.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3names.dtx
@@ -37,7 +37,7 @@
\documentclass[full]{l3doc}
%</driver>
%<*driver|package>
-\GetIdInfo$Id: l3names.dtx 5644 2015-06-30 07:59:24Z joseph $
+\GetIdInfo$Id: l3names.dtx 5691 2015-07-27 19:53:13Z joseph $
{L3 Namespace for primitives}
%</driver|package>
%<*driver>
@@ -1062,7 +1062,13 @@
\tex_let:D \pdftex_primitive:D \primitive
\tex_let:D \pdftex_shellescape:D \shellescape
\tex_fi:D
-\etex_unless:D \pdftex_ifprimitive:D \pdftex_mapfile:D
+% \end{macrocode}
+% Only \pdfTeX{} and \LuaTeX{} define \tn{pdfmapfile} and \tn{pdfmapline}.
+% \begin{macrocode}
+\tex_ifnum:D 0
+ \etex_ifdefined:D \pdftex_pdftexversion:D 1 \tex_fi:D
+ \etex_ifdefined:D \luatex_luatexversion:D 1 \tex_fi:D
+ = 0 %
\tex_let:D \pdftex_mapfile:D \tex_undefined:D
\tex_let:D \pdftex_mapline:D \tex_undefined:D
\tex_fi:D
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx b/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx
index 8fc257e4d54..7b81df583c8 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-%% File: l3seq.dtx Copyright (C) 1990-2014 The LaTeX3 Project
+%% File: l3seq.dtx Copyright (C) 1990-2015 The 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
@@ -37,7 +37,7 @@
\documentclass[full]{l3doc}
%</driver>
%<*driver|package>
-\GetIdInfo$Id: l3seq.dtx 5354 2014-08-23 01:35:39Z bruno $
+\GetIdInfo$Id: l3seq.dtx 5681 2015-07-24 03:01:31Z bruno $
{L3 Sequences and stacks}
%</driver|package>
%<*driver>
@@ -737,6 +737,100 @@
% Adds the \Arg{item} to the top of the \meta{sequence}.
% \end{function}
%
+% \section{Sequences as sets}
+%
+% Sequences can also be used as sets, such that all of their items are
+% distinct. Usage of sequences as sets is not currently widespread,
+% hence no specific set function is provided. Instead, it is explained
+% here how common set operations can be performed by combining several
+% functions described in earlier sections. When using sequences to
+% implement sets, one should be careful not to rely on the order of
+% items in the sequence representing the set.
+%
+% Sets should not contain several occurences of a given item. To make
+% sure that a \meta{sequence variable} only has distinct items, use
+% \cs{seq_remove_duplicates:N} \meta{sequence variable}. This function
+% is relatively slow, and to avoid performance issues one should only
+% use it when necessary.
+%
+% Some operations on a set \meta{seq~var} are straightforward. For
+% instance, \cs{seq_count:N} \meta{seq~var} expands to the number of
+% items, while \cs{seq_if_in:Nn(TF)} \meta{seq~var} \Arg{item} tests if
+% the \meta{item} is in the set.
+%
+% Adding an \meta{item} to a set \meta{seq~var} can be done by appending
+% it to the \meta{seq~var} if it is not already in the \meta{seq~var}:
+% \begin{quote}\ttfamily
+% \cs{seq_if_in:NnF} \meta{seq~var} \Arg{item} \\
+% \ \ \{ \cs{seq_put_right:Nn} \meta{seq~var} \Arg{item} \}
+% \end{quote}
+% Removing an \meta{item} from a set \meta{seq~var} can be done using
+% \cs{seq_remove_all:Nn},
+% \begin{quote}\ttfamily
+% \cs{seq_remove_all:Nn} \meta{seq~var} \Arg{item}
+% \end{quote}
+%
+% The intersection of two sets \meta{seq~var_1} and \meta{seq~var_2} can
+% be stored into \meta{seq~var_3} by collecting items of
+% \meta{seq~var_1} which are in \meta{seq~var_2}.
+% \begin{quote}\ttfamily
+% \cs{seq_clear:N} \meta{seq~var_3} \\
+% \cs{seq_map_inline:Nn} \meta{seq~var_1} \\
+% \ \ \{ \\
+% \ \ \ \ \cs{seq_if_in:NnT} \meta{seq~var_2} \{\#1\} \\
+% \ \ \ \ \ \ \{ \cs{seq_put_right:Nn} \meta{seq~var_3} \{\#1\} \} \\
+% \ \ \}
+% \end{quote}
+% The code as written here only works if \meta{seq~var_3} is different
+% from the other two sequence variables. To cover all cases, items
+% should first be collected in a sequence
+% |\l__|\meta{pkg}|_internal_seq|, then \meta{seq~var_3} should be set
+% equal to this internal sequence. The same remark applies to other set
+% functions.
+%
+% The union of two sets \meta{seq~var_1} and \meta{seq~var_2} can be
+% stored into \meta{seq~var_3} through
+% \begin{quote}\ttfamily
+% \cs{seq_concat:NNN} \meta{seq~var_3} \meta{seq~var_1} \meta{seq~var_2} \\
+% \cs{seq_remove_duplicates:N} \meta{seq~var_3}
+% \end{quote}
+% or by adding items to (a copy of) \meta{seq~var_1} one by one
+% \begin{quote}\ttfamily
+% \cs{seq_set_eq:NN} \meta{seq~var_3} \meta{seq~var_1} \\
+% \cs{seq_map_inline:Nn} \meta{seq~var_2} \\
+% \ \ \{ \\
+% \ \ \ \ \cs{seq_if_in:NnF} \meta{seq~var_3} \{\#1\} \\
+% \ \ \ \ \ \ \{ \cs{seq_put_right:Nn} \meta{seq~var_3} \{\#1\} \} \\
+% \ \ \}
+% \end{quote}
+% The second approach is faster than the first when the \meta{seq~var_2}
+% is short compared to \meta{seq~var_1}.
+%
+% The difference of two sets \meta{seq~var_1} and \meta{seq~var_2} can
+% be stored into \meta{seq~var_3} by removing items of the
+% \meta{seq~var_2} from (a copy of) the \meta{seq~var_1} one by one.
+% \begin{quote}\ttfamily
+% \cs{seq_set_eq:NN} \meta{seq~var_3} \meta{seq~var_1} \\
+% \cs{seq_map_inline:Nn} \meta{seq~var_2} \\
+% \ \ \{ \cs{seq_remove_all:Nn} \meta{seq~var_3} \{\#1\} \}
+% \end{quote}
+%
+% The symmetric difference of two sets \meta{seq~var_1} and
+% \meta{seq~var_2} can be stored into \meta{seq~var_3} by computing the
+% difference between \meta{seq~var_1} and \meta{seq~var_2} and storing
+% the result as |\l__|\meta{pkg}|_internal_seq|, then the difference
+% between \meta{seq~var_2} and \meta{seq~var_1}, and finally
+% concatenating the two differences to get the symmetric differences.
+% \begin{quote}\ttfamily
+% \cs{seq_set_eq:NN} |\l__|\meta{pkg}|_internal_seq| \meta{seq~var_1} \\
+% \cs{seq_map_inline:Nn} \meta{seq~var_2} \\
+% \ \ \{ \cs{seq_remove_all:Nn} |\l__|\meta{pkg}|_internal_seq| \{\#1\} \} \\
+% \cs{seq_set_eq:NN} \meta{seq~var_3} \meta{seq~var_2} \\
+% \cs{seq_map_inline:Nn} \meta{seq~var_1} \\
+% \ \ \{ \cs{seq_remove_all:Nn} \meta{seq~var_3} \{\#1\} \} \\
+% \cs{seq_concat:NNN} \meta{seq~var_3} \meta{seq~var_3} |\l__|\meta{pkg}|_internal_seq|
+% \end{quote}
+%
% \section{Constant and scratch sequences}
%
% \begin{variable}[added = 2012-07-02]{\c_empty_seq}
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3unicode-data.dtx b/Master/texmf-dist/source/latex/l3kernel/l3unicode-data.dtx
index 9f3e03cf38f..66c786a88e6 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3unicode-data.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3unicode-data.dtx
@@ -38,7 +38,7 @@
% plain \TeX{}, set up in generic mode.
%<*driver|script>
\input expl3-generic\relax
-\GetIdInfo$Id: l3unicode-data.dtx 5647 2015-07-01 12:44:26Z joseph $
+\GetIdInfo$Id: l3unicode-data.dtx 5676 2015-07-20 06:48:31Z joseph $
{L3 Case data script}
%</driver|script>
%
@@ -446,14 +446,15 @@
\tl_const:Nn \c__unicode_lower_exceptions_tl { }
\tl_const:Nn \c__unicode_mixed_exceptions_tl { }
\tl_const:Nn \c__unicode_upper_exceptions_tl { }
- \tl_const:Nn \c__unicode_std_sigma_tl { }
- \tl_const:Nn \c__unicode_final_sigma_tl { }
- \tl_const:Nn \c__unicode_accents_lt_tl { }
- \tl_const:Nn \c__unicode_dot_above_tl { }
- \tl_const:Nn \c__unicode_dotless_i_tl { I }
- \tl_const:Nn \c__unicode_dotted_I_tl { i }
- \tl_const:Nn \c__unicode_i_ogonek_tl { }
- \tl_const:Nn \c__unicode_I_ogonek_tl { }
+ \tl_const:Nn \c__unicode_std_sigma_tl { }
+ \tl_const:Nn \c__unicode_final_sigma_tl { }
+ \tl_const:Nn \c__unicode_accents_lt_tl { }
+ \tl_const:Nn \c__unicode_dot_above_tl { }
+ \tl_const:Nn \c__unicode_dotless_i_tl { I }
+ \tl_const:Nn \c__unicode_dotted_I_tl { i }
+ \tl_const:Nn \c__unicode_i_ogonek_tl { }
+ \tl_const:Nn \c__unicode_I_ogonek_tl { }
+ \tl_const:Nn \c__unicode_upper_Eszett_tl { }
\tex_endinput:D
}
\__unicode_verb_end:
@@ -521,8 +522,8 @@
{ \cs_set_eq:NN \__unicode_brace:n \use:n }
\tl_put_right:Nx \l__unicode_title_exceptions_tl
{
- \__unicode_brace:n { \luatex_Uchar:D "#1 \c_space_tl }
- \__unicode_brace:n { \luatex_Uchar:D "#8 \c_space_tl }
+ \__unicode_brace:n { \utex_char:D "#1 \c_space_tl }
+ \__unicode_brace:n { \utex_char:D "#8 \c_space_tl }
}
}
}
@@ -579,9 +580,9 @@
\tl_put_right:cx { l__unicode_ #5 _ #3 _X_ #4 _tl }
{
\__unicode_brace:n
- { \luatex_Uchar:D "#1 \c_space_tl }
+ { \utex_char:D "#1 \c_space_tl }
\__unicode_brace:n
- { \luatex_Uchar:D "#2 \c_space_tl }
+ { \utex_char:D "#2 \c_space_tl }
}
}
}
@@ -657,12 +658,12 @@
{
\tl_put_right:cx { l__unicode_ #5 _exceptions_tl }
{
- \__unicode_brace:n { \luatex_Uchar:D "#1 \c_space_tl }
+ \__unicode_brace:n { \utex_char:D "#1 \c_space_tl }
{
- \luatex_Uchar:D "#2 \c_space_tl
- \luatex_Uchar:D "#3 \c_space_tl
+ \utex_char:D "#2 \c_space_tl
+ \utex_char:D "#3 \c_space_tl
\tl_if_empty:nF {#4}
- { \luatex_Uchar:D "#4 \c_space_tl }
+ { \utex_char:D "#4 \c_space_tl }
}
}
}
@@ -743,7 +744,7 @@
\iow_now:Nx \g__unicode_result_iow
{
\tl_const:Nn \exp_not:c { c__unicode_ #1 _tl }
- { ~ \luatex_Uchar:D "#2 \c_space_tl \c_space_tl }
+ { ~ \utex_char:D "#2 \c_space_tl \c_space_tl }
}
\__unicode_special_case:nn
}
@@ -755,18 +756,19 @@
{ dotted_I } { 0130 }
{ i_ogonek } { 012F }
{ I_ogonek } { 012E }
+ { upper_Eszett } { 1E9E }
\q_recursion_tail { }
\q_recursion_stop
\iow_now:Nx \g__unicode_result_iow
{
\tl_const:Nn \exp_not:N \c__unicode_accents_lt_tl
{
- \luatex_Uchar:D "00CC
- { \luatex_Uchar:D "0069 \luatex_Uchar:D "0307 \luatex_Uchar:D "0300 }
- \luatex_Uchar:D "00CD
- { \luatex_Uchar:D "0069 \luatex_Uchar:D "0307 \luatex_Uchar:D "0301 }
- \luatex_Uchar:D "0128
- { \luatex_Uchar:D "0069 \luatex_Uchar:D "0307 \luatex_Uchar:D "0303 }
+ \utex_char:D "00CC
+ { \utex_char:D "0069 \utex_char:D "0307 \utex_char:D "0300 }
+ \utex_char:D "00CD
+ { \utex_char:D "0069 \utex_char:D "0307 \utex_char:D "0301 }
+ \utex_char:D "0128
+ { \utex_char:D "0069 \utex_char:D "0307 \utex_char:D "0303 }
}
}
% \end{macrocode}
@@ -807,7 +809,7 @@
\str_if_eq:nnTF {#2} { C }
{
\__unicode_parse_line_auxiv:nn
- {#1} { \luatex_Uchar:D "#3 \c_space_tl }
+ {#1} { \utex_char:D "#3 \c_space_tl }
}
{
\str_if_eq:nnT {#2} { F }
@@ -832,10 +834,10 @@
{
\__unicode_brace:n
{
- \luatex_Uchar:D "#2 \c_space_tl
- \luatex_Uchar:D "#3 \c_space_tl
+ \utex_char:D "#2 \c_space_tl
+ \utex_char:D "#3 \c_space_tl
\tl_if_empty:nF {#4}
- { \luatex_Uchar:D "#4 \c_space_tl }
+ { \utex_char:D "#4 \c_space_tl }
}
}
}
@@ -854,7 +856,7 @@
}
% \end{macrocode}
% As the input is read in string mode, there is a need for a rescan
-% here since \tn{Uchar} requires letters for hexadecimal digits
+% here since \tn{char} requires letters for hexadecimal digits
% beyond~$9$.
% \begin{macrocode}
\cs_new_protected:Npn \__unicode_parse_line_auxv:wnn
@@ -868,7 +870,7 @@
{
\tl_put_right:cx { l__unicode_lower_ #6 _X_ #7 _tl }
{
- \__unicode_brace:n { \luatex_Uchar:D "#8 \c_space_tl }
+ \__unicode_brace:n { \utex_char:D "#8 \c_space_tl }
\__unicode_brace:n { #9 }
}
}
diff --git a/Master/texmf-dist/source/latex/l3packages/l3keys2e/l3keys2e.dtx b/Master/texmf-dist/source/latex/l3packages/l3keys2e/l3keys2e.dtx
index 1de701ee0ee..2924b08d1ba 100644
--- a/Master/texmf-dist/source/latex/l3packages/l3keys2e/l3keys2e.dtx
+++ b/Master/texmf-dist/source/latex/l3packages/l3keys2e/l3keys2e.dtx
@@ -37,8 +37,8 @@
%<*driver|package>
% The version of expl3 required is tested as early as possible, as
% some really old versions do not define \ProvidesExplPackage.
-\RequirePackage{expl3}[2015/07/14]
-%<package>\@ifpackagelater{expl3}{2015/07/14}
+\RequirePackage{expl3}[2015/07/28]
+%<package>\@ifpackagelater{expl3}{2015/07/28}
%<package> {}
%<package> {%
%<package> \PackageError{l3keys2e}{Support package l3kernel too old}
@@ -50,7 +50,7 @@
%<package> }%
%<package> \endinput
%<package> }
-\GetIdInfo$Id: l3keys2e.dtx 5662 2015-07-14 21:32:38Z joseph $
+\GetIdInfo$Id: l3keys2e.dtx 5700 2015-07-28 19:26:39Z joseph $
{LaTeX2e option processing using LaTeX3 keys}
%</driver|package>
%<*driver>
diff --git a/Master/texmf-dist/source/latex/l3packages/xparse/xparse.dtx b/Master/texmf-dist/source/latex/l3packages/xparse/xparse.dtx
index f18e25b54ab..45d8088dbb7 100644
--- a/Master/texmf-dist/source/latex/l3packages/xparse/xparse.dtx
+++ b/Master/texmf-dist/source/latex/l3packages/xparse/xparse.dtx
@@ -41,8 +41,8 @@
%<*driver|package>
% The version of expl3 required is tested as early as possible, as
% some really old versions do not define \ProvidesExplPackage.
-\RequirePackage{expl3}[2015/07/14]
-%<package>\@ifpackagelater{expl3}{2015/07/14}
+\RequirePackage{expl3}[2015/07/28]
+%<package>\@ifpackagelater{expl3}{2015/07/28}
%<package> {}
%<package> {%
%<package> \PackageError{xparse}{Support package l3kernel too old}
@@ -54,7 +54,7 @@
%<package> }%
%<package> \endinput
%<package> }
-\GetIdInfo$Id: xparse.dtx 5662 2015-07-14 21:32:38Z joseph $
+\GetIdInfo$Id: xparse.dtx 5700 2015-07-28 19:26:39Z joseph $
{L3 Experimental document command parser}
%</driver|package>
%<*driver>
diff --git a/Master/texmf-dist/source/latex/l3packages/xtemplate/xtemplate.dtx b/Master/texmf-dist/source/latex/l3packages/xtemplate/xtemplate.dtx
index 20c56b00706..09c46d3be52 100644
--- a/Master/texmf-dist/source/latex/l3packages/xtemplate/xtemplate.dtx
+++ b/Master/texmf-dist/source/latex/l3packages/xtemplate/xtemplate.dtx
@@ -41,8 +41,8 @@
%<*driver|package>
% The version of expl3 required is tested as early as possible, as
% some really old versions do not define \ProvidesExplPackage.
-\RequirePackage{expl3}[2015/07/14]
-%<package>\@ifpackagelater{expl3}{2015/07/14}
+\RequirePackage{expl3}[2015/07/28]
+%<package>\@ifpackagelater{expl3}{2015/07/28}
%<package> {}
%<package> {%
%<package> \PackageError{xtemplate}{Support package l3kernel too old}
@@ -54,7 +54,7 @@
%<package> }%
%<package> \endinput
%<package> }
-\GetIdInfo$Id: xtemplate.dtx 5662 2015-07-14 21:32:38Z joseph $
+\GetIdInfo$Id: xtemplate.dtx 5700 2015-07-28 19:26:39Z joseph $
{L3 Experimental prototype document functions}
%</driver|package>
%<*driver>