summaryrefslogtreecommitdiff
path: root/Master/texmf-dist
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2016-01-26 23:00:51 +0000
committerKarl Berry <karl@freefriends.org>2016-01-26 23:00:51 +0000
commit54371d50fc6a5abc2b07e926553d7ca9cccdff74 (patch)
tree86eac8cd76591209c5d5748b423edeff3fa69013 /Master/texmf-dist
parent43fbca5d01e622dd7c348d42b222bb87496d0bdc (diff)
l3
git-svn-id: svn://tug.org/texlive/trunk@39491 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist')
-rw-r--r--Master/texmf-dist/doc/latex/l3build/README.md2
-rw-r--r--Master/texmf-dist/doc/latex/l3build/l3build.pdfbin602828 -> 603579 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/README.md2
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/expl3.pdfbin586274 -> 586354 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/interface3.pdfbin1501051 -> 1501105 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdfbin268222 -> 268222 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/l3obsolete.txt22
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdfbin276787 -> 276787 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdfbin220209 -> 220209 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/source3.pdfbin4705347 -> 4686166 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3packages/README.md2
-rw-r--r--Master/texmf-dist/doc/latex/l3packages/l3keys2e/l3keys2e.pdfbin333281 -> 333680 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3packages/xfrac/xfrac.pdfbin478120 -> 478529 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3packages/xparse/xparse.pdfbin460231 -> 460668 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3packages/xtemplate/xtemplate.pdfbin422303 -> 422714 bytes
-rw-r--r--Master/texmf-dist/source/latex/l3build/l3build.dtx7
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/expl3.dtx6
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3.ins4
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx978
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3format.ins4
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3int.dtx22
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3prop.dtx14
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3skip.dtx14
-rw-r--r--Master/texmf-dist/source/latex/l3packages/l3keys2e/l3keys2e.dtx10
-rw-r--r--Master/texmf-dist/source/latex/l3packages/xfrac/xfrac.dtx10
-rw-r--r--Master/texmf-dist/source/latex/l3packages/xparse/xparse.dtx10
-rw-r--r--Master/texmf-dist/source/latex/l3packages/xtemplate/xtemplate.dtx10
-rw-r--r--Master/texmf-dist/tex/latex/l3build/l3build.lua88
-rw-r--r--Master/texmf-dist/tex/latex/l3build/regression-test.tex2
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex1063
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex6
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/expl3.sty6
-rw-r--r--Master/texmf-dist/tex/latex/l3packages/l3keys2e/l3keys2e.sty10
-rw-r--r--Master/texmf-dist/tex/latex/l3packages/xfrac/xfrac.sty10
-rw-r--r--Master/texmf-dist/tex/latex/l3packages/xparse/xparse.sty10
-rw-r--r--Master/texmf-dist/tex/latex/l3packages/xtemplate/xtemplate.sty10
36 files changed, 1160 insertions, 1162 deletions
diff --git a/Master/texmf-dist/doc/latex/l3build/README.md b/Master/texmf-dist/doc/latex/l3build/README.md
index 7716e770cac..e8f654531bb 100644
--- a/Master/texmf-dist/doc/latex/l3build/README.md
+++ b/Master/texmf-dist/doc/latex/l3build/README.md
@@ -1,7 +1,7 @@
l3build: a testing and building system for LaTeX3
=================================================
-Release 2015/12/20 (r6326)
+Release 2016/01/19 (r6377)
Overview
--------
diff --git a/Master/texmf-dist/doc/latex/l3build/l3build.pdf b/Master/texmf-dist/doc/latex/l3build/l3build.pdf
index 83cbcf543e1..caaee9acca6 100644
--- a/Master/texmf-dist/doc/latex/l3build/l3build.pdf
+++ b/Master/texmf-dist/doc/latex/l3build/l3build.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3kernel/README.md b/Master/texmf-dist/doc/latex/l3kernel/README.md
index eb23874c2d1..80c776d3df7 100644
--- a/Master/texmf-dist/doc/latex/l3kernel/README.md
+++ b/Master/texmf-dist/doc/latex/l3kernel/README.md
@@ -1,7 +1,7 @@
LaTeX3 Programming Conventions
==============================
-Release 2016/01/03 (r6358)
+Release 2016/01/19 (r6377)
Overview
--------
diff --git a/Master/texmf-dist/doc/latex/l3kernel/expl3.pdf b/Master/texmf-dist/doc/latex/l3kernel/expl3.pdf
index 0da2ea514ef..b9481032c12 100644
--- a/Master/texmf-dist/doc/latex/l3kernel/expl3.pdf
+++ b/Master/texmf-dist/doc/latex/l3kernel/expl3.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3kernel/interface3.pdf b/Master/texmf-dist/doc/latex/l3kernel/interface3.pdf
index 2b1211b1462..c4c22c927ad 100644
--- a/Master/texmf-dist/doc/latex/l3kernel/interface3.pdf
+++ b/Master/texmf-dist/doc/latex/l3kernel/interface3.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdf
index 77581e3a203..2803009f039 100644
--- a/Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdf
+++ b/Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3obsolete.txt b/Master/texmf-dist/doc/latex/l3kernel/l3obsolete.txt
index a5db9f15f83..fa462699326 100644
--- a/Master/texmf-dist/doc/latex/l3kernel/l3obsolete.txt
+++ b/Master/texmf-dist/doc/latex/l3kernel/l3obsolete.txt
@@ -16,16 +16,6 @@ They will be removed from the sources at the end of the given year.
Function Expires end
--------------------------------------
\c_job_name_tl 2016
-\fp_gset_from_dim:cn 2015
-\fp_gset_from_dim:Nn 2015
-\fp_set_from_dim:cn 2015
-\fp_set_from_dim:Nn 2015
-\int_from_binary:n 2015
-\int_to_binary:n 2015
-\int_from_hexadecimal:n 2015
-\int_to_hexadecimal:n 2015
-\int_from_octal:n 2015
-\int_to_octal:n 2015
\luatex_if_engine_p: 2016
\luatex_if_engine:F 2016
\luatex_if_engine:T 2016
@@ -34,8 +24,6 @@ Function Expires end
\pdftex_if_engine:F 2016
\pdftex_if_engine:T 2016
\pdftex_if_engine:TF 2016
-\prop_get:cn 2015
-\prop_get:Nn 2015
\scan_align_safe_stop: 2016
\xetex_if_engine_p: 2016
\xetex_if_engine:F 2016
@@ -253,10 +241,16 @@ Function Date removed SVN
\int_convert_from_base_ten:nn 2011-11-22 2986
\int_convert_from_symbols:nn 2011-11-22 2986
\int_convert_to_base_ten:nn 2011-11-22 2986
+\int_from_binary:n 2016-01-05 6366
+\int_from_hexadecimal:n 2016-01-05 6366
+\int_from_octal:n 2016-01-05 6366
\int_eval:w 2013-01-08 4412
\int_eval_end: 2013-01-08 4412
-\int_value:w 2013-01-08 4412
+\int_to_binary:n 2016-01-05 6366
+\int_to_hexadecimal:n 2016-01-05 6366
+\int_to_octal:n 2016-01-05 6366
\int_to_symbol:n 2011-11-22 2986
+\int_value:w 2013-01-08 4412
\ior_gto:NN 2013-07-28 4581
\ior_open_streams: 2011-09-08 2786
\ior_to:NN 2013-07-28 4581
@@ -321,6 +315,8 @@ Function Date removed SVN
\prop_gdel:cV 2013-01-08 4412
\prop_gdel:Nn 2013-01-08 4412
\prop_gdel:NV 2013-01-08 4412
+\prop_get:cn 2016-01-05 6366
+\prop_get:Nn 2016-01-05 6366
\prop_display:c 2011-09-08 2786
\prop_display:N 2011-09-08 2786
\prop_get_gdel:NnN 2011-09-08 2786
diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdf
index 6932b4107b6..636658aee56 100644
--- a/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdf
+++ b/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdf
index 43c495ae3b3..2e8e46ec6b6 100644
--- a/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdf
+++ b/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3kernel/source3.pdf b/Master/texmf-dist/doc/latex/l3kernel/source3.pdf
index 1b580160766..d569deef67f 100644
--- a/Master/texmf-dist/doc/latex/l3kernel/source3.pdf
+++ b/Master/texmf-dist/doc/latex/l3kernel/source3.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3packages/README.md b/Master/texmf-dist/doc/latex/l3packages/README.md
index cacbec7bff6..ae80c879027 100644
--- a/Master/texmf-dist/doc/latex/l3packages/README.md
+++ b/Master/texmf-dist/doc/latex/l3packages/README.md
@@ -1,7 +1,7 @@
LaTeX3 High-Level Concepts
==========================
-Release 2015/12/20 (r6326)
+Release 2016/01/19 (r6377)
Overview
--------
diff --git a/Master/texmf-dist/doc/latex/l3packages/l3keys2e/l3keys2e.pdf b/Master/texmf-dist/doc/latex/l3packages/l3keys2e/l3keys2e.pdf
index 3e6f367a4fb..1e6e261f4fc 100644
--- a/Master/texmf-dist/doc/latex/l3packages/l3keys2e/l3keys2e.pdf
+++ b/Master/texmf-dist/doc/latex/l3packages/l3keys2e/l3keys2e.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3packages/xfrac/xfrac.pdf b/Master/texmf-dist/doc/latex/l3packages/xfrac/xfrac.pdf
index 1c48c1154d9..5920f8b0547 100644
--- a/Master/texmf-dist/doc/latex/l3packages/xfrac/xfrac.pdf
+++ b/Master/texmf-dist/doc/latex/l3packages/xfrac/xfrac.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3packages/xparse/xparse.pdf b/Master/texmf-dist/doc/latex/l3packages/xparse/xparse.pdf
index 6f38fa13ce7..40d2b8946c9 100644
--- a/Master/texmf-dist/doc/latex/l3packages/xparse/xparse.pdf
+++ b/Master/texmf-dist/doc/latex/l3packages/xparse/xparse.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3packages/xtemplate/xtemplate.pdf b/Master/texmf-dist/doc/latex/l3packages/xtemplate/xtemplate.pdf
index 1c5816595d3..2e04de9413c 100644
--- a/Master/texmf-dist/doc/latex/l3packages/xtemplate/xtemplate.pdf
+++ b/Master/texmf-dist/doc/latex/l3packages/xtemplate/xtemplate.pdf
Binary files differ
diff --git a/Master/texmf-dist/source/latex/l3build/l3build.dtx b/Master/texmf-dist/source/latex/l3build/l3build.dtx
index 9ad1f80d586..7c7c9574cfc 100644
--- a/Master/texmf-dist/source/latex/l3build/l3build.dtx
+++ b/Master/texmf-dist/source/latex/l3build/l3build.dtx
@@ -1,6 +1,6 @@
% \iffalse
%%
-%% File l3build.dtx (C) Copyright 2014-2015 The LaTeX3 Project
+%% File l3build.dtx (C) Copyright 2014-2016 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
@@ -39,8 +39,8 @@
\RequirePackage{expl3}
\def\ExplFileName{l3build}
\def\ExplFileDescription{L3 Regression test suite}
-\def\ExplFileDate{2015/12/20}
-\def\ExplFileVersion{6326}
+\def\ExplFileDate{2016/01/19}
+\def\ExplFileVersion{6377}
\documentclass[full]{l3doc}
\renewcommand\partname{Part}
\usepackage{multicol,needspace}
@@ -154,6 +154,7 @@
\luavarseparator
\luavarset{asciiengines}{\{"pdftex"\}}{Engines which should log as sure ASCII}
\luavarset{checkruns} {1} {How many times to run a check file before comparing the log.}
+\luavarset{maxprintline}{79} {Length of line to use in log files.}
\luavarset{packtdszip} {false} {Build a TDS-style zip file for CTAN?}
\luavarset{scriptname} {"build.lua"} {Name of script used in dependencies.}
\luavarset{typesetcmds} {""} {Instructions to be passed to \TeX{} when doing typesetting.}
diff --git a/Master/texmf-dist/source/latex/l3kernel/expl3.dtx b/Master/texmf-dist/source/latex/l3kernel/expl3.dtx
index cad58a7674c..00d6a7eec50 100644
--- a/Master/texmf-dist/source/latex/l3kernel/expl3.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/expl3.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-%% File: expl3.dtx Copyright (C) 1990-2015 The LaTeX3 Project
+%% File: expl3.dtx Copyright (C) 1990-2016 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
@@ -36,8 +36,8 @@
%<*driver|generic|package>
\def\ExplFileName{expl3}%
\def\ExplFileDescription{L3 programming layer}%
-\def\ExplFileDate{2016/01/03}%
-\def\ExplFileVersion{6358}%
+\def\ExplFileDate{2016/01/19}%
+\def\ExplFileVersion{6377}%
%</driver|generic|package>
%<*driver>
\documentclass[full]{l3doc}
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3.ins b/Master/texmf-dist/source/latex/l3kernel/l3.ins
index 903e3595c7c..cc4108ba0dc 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3.ins
+++ b/Master/texmf-dist/source/latex/l3kernel/l3.ins
@@ -1,6 +1,6 @@
\iffalse meta-comment
-File l3.ins Copyright (C) 2011,2012,2014,2015 The LaTeX3 Project
+File l3.ins Copyright (C) 2011,2012,2014-2016 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
@@ -75,8 +75,8 @@ Do not distribute a modified version of this file.
\from{l3box.dtx} {package}
\from{l3coffins.dtx} {package}
\from{l3color.dtx} {package}
- \from{l3candidates.dtx} {package}
\from{l3sys.dtx} {package}
+ \from{l3candidates.dtx} {package}
\from{l3luatex.dtx} {package,tex}
}
}
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx b/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx
index 9a19df41122..8bceb8e6661 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-%% File: l3candidates.dtx Copyright(C) 2012-2015 The LaTeX3 Project
+%% File: l3candidates.dtx Copyright(C) 2012-2016 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
@@ -38,7 +38,7 @@
\documentclass[full]{l3doc}
%</driver>
%<*driver|package>
-\GetIdInfo$Id: l3candidates.dtx 6325 2015-12-20 18:07:35Z joseph $
+\GetIdInfo$Id: l3candidates.dtx 6376 2016-01-14 08:36:20Z joseph $
{L3 Experimental additions to l3kernel}
%</driver|package>
%<*driver>
@@ -860,7 +860,7 @@
% giving an \meta{integer denotation}.
% \end{function}
%
-% \begin{function}[EXP, added = 2014-06-30, updated = 2015-05-07]^^A
+% \begin{function}[EXP, added = 2014-06-30, updated = 2016-01-12]^^A
% {
% \tl_lower_case:n, \tl_upper_case:n, \tl_mixed_case:n,
% \tl_lower_case:nn, \tl_upper_case:nn, \tl_mixed_case:nn
@@ -958,12 +958,21 @@
% case changing.
% \end{variable}
%
-% In package mode, the case change system will also
-% convert text stored using the \LaTeXe{} \enquote{LICR} approach. This
-% will upper/lower case tokens as implemented for the font encodings
-% \texttt{T1}, \texttt{T2}, \texttt{T5} and \texttt{LGR} (see the behaviour of
-% the \LaTeXe{} command \tn{MakeUppercase}). Note that these commands will
-% automatically be protected from expansion.
+% \begin{variable}{\l_tl_case_change_accents_tl}
+% This list specifies accent commands which should be left unexpanded
+% in the output. This allows for example
+% \begin{verbatim}
+% \tl_upper_case:n { \" { a } }
+% \end{verbatim}
+% to yield
+% \begin{verbatim}
+% \" { A }
+% \end{verbatim}
+% irrespective of the expandability of |\"|.
+%
+% The standard contents of this variable is |\"|, |\^|, |\'|,
+% |\`|, |\.|, |\c|, |\u|, |\~|, |\H| and |\v|
+% \end{variable}
%
% \enquote{Mixed} case conversion may be regarded informally as converting the
% first character of the \meta{tokens} to upper case and the rest to lower
@@ -998,16 +1007,16 @@
% \end{variable}
%
% As is generally true for \pkg{expl3}, these functions are designed to
-% work with Unicode input only. As such, when used with \pdfTeX{}
-% \emph{only} the characters \texttt{a}--\texttt{zA}--\texttt{Z} are
-% modified. When used with \XeTeX{} or \LuaTeX{} a full range of Unicode
-% transformations are enabled. Specifically, the standard mappings here
-% follow those defined by the \href{http://www.unicode.org}^^A
+% work with Unicode input only. As such, UTF-8 input is assumed for
+% \emph{all} engines. When used with \XeTeX{} or \LuaTeX{} a full range of
+% Unicode transformations are enabled. Specifically, the standard mappings
+% here follow those defined by the \href{http://www.unicode.org}^^A
% {Unicode Consortium} in \texttt{UnicodeData.txt} and
-% \texttt{SpecialCasing.txt}. Note that in some cases, \pdfTeX{} can
-% interpret the input to a case change but not generate the correct output
-% (for example in the mapping i to I-dot in Turkish): in these cases the
-% input is left unchanged.
+% \texttt{SpecialCasing.txt}. In the case of $8$-bit engines, mappings
+% are provided for characters which can be represented in output typeset
+% using the |T1| font encoding. Thus for example |รค| can be case-changed
+% using \pdfTeX{}. For \pTeX{} only the ASCII range is covered as the
+% engine treats input outside of this range as east Asian.
%
% Context-sensitive mappings are enabled: language-dependent cases are
% discussed below. Context detection will expand input but treats any
@@ -3065,6 +3074,7 @@
% \@@_change_case_output:nwn ,
% \@@_change_case_output:Vwn ,
% \@@_change_case_output:own ,
+% \@@_change_case_output:Vwn ,
% \@@_change_case_output:fwn ,
% }
% \begin{macro}[aux, EXP]{\@@_change_case_end:wn}
@@ -3080,16 +3090,16 @@
% \begin{macro}[aux, EXP]{\@@_change_case_N_type:Nnnn}
% \begin{macro}[aux, EXP]{\@@_change_case_char:Nnn}
% \begin{macro}[aux, EXP]{\@@_change_case_char:nN}
-% \begin{macro}[aux, EXP]{\@@_change_case_char_aux:nN}
+% \begin{macro}[aux, EXP]
+% {\@@_change_case_char_auxi:nN, \@@_change_case_char_auxii:nN}
% \begin{macro}[aux]
% {\@@_lookup_lower:N, \@@_lookup_upper:N, \@@_lookup_title:N}
-% \begin{macro}[aux, EXP]{\@@_change_case_cs:Nnnn}
-% \begin{macro}[aux, EXP]{\@@_change_case_cs:nNnnn}
-% \begin{macro}[aux, EXP]{\@@_change_case_cs_three:NNNw}
-% \begin{macro}[aux, EXP]{\@@_change_case_cs_four:NNNNw}
-% \begin{macro}[aux, EXP]{\@@_change_case_cs_cyr:NnNNNNw}
-% \begin{macro}[aux, EXP]{\@@_change_case_cs_type:Nnnnn}
-% \begin{macro}[aux, EXP]{\@@_change_case_cs_type:nnn}
+% \begin{macro}[aux, EXP]{\@@_change_case_char_UTFiix:nNN}
+% \begin{macro}[aux, EXP]{\@@_change_case_char_UTFiix:nNNN}
+% \begin{macro}[aux, EXP]{\@@_change_case_char_UTFiix:nNNNN}
+% \begin{macro}[aux, EXP]{\@@_change_case_char_UTFiix:nn}
+% \begin{macro}[aux, EXP]{\@@_change_case_cs_letterlike:Nnn}
+% \begin{macro}[aux, EXP]{\@@_change_case_cs_accents:NN}
% \begin{macro}[aux, EXP]{\@@_change_case_cs:N}
% \begin{macro}[aux, EXP]{\@@_change_case_cs:NN}
% \begin{macro}[aux, EXP]{\@@_change_case_cs:NNn}
@@ -3141,7 +3151,7 @@
% \begin{macrocode}
\cs_new:Npn \@@_change_case_output:nwn #1#2 \@@_change_case_result:n #3
{ #2 \@@_change_case_result:n { #3 #1 } }
-\cs_generate_variant:Nn \@@_change_case_output:nwn { V , o , f }
+\cs_generate_variant:Nn \@@_change_case_output:nwn { V , o , v , f }
\cs_new:Npn \@@_change_case_end:wn #1 \@@_change_case_result:n #2
{
\group_align_safe_end:
@@ -3267,28 +3277,19 @@
\cs_new:Npn \@@_change_case_N_type:Nnnn #1#2#3#4
{
\token_if_cs:NTF #1
-%<*initex>
- { \@@_change_case_cs:N #1 }
-%</initex>
-%<*package>
- {
- \@@_change_case_cs:Nnnn #1 {#3}
- { }
- { \@@_change_case_cs:N #1 }
- }
-%</package>
+ { \@@_change_case_cs_letterlike:Nnn #1 {#3} { } }
{ \@@_change_case_char:Nnn #1 {#3} {#4} }
\@@_change_case_loop:wnn #2 \q_recursion_stop {#3} {#4}
}
% \end{macrocode}
-% For character tokens there are a couple of potential special cases to
-% handle then the core idea of the loop: a lookup table. The latter uses
-% the character code to spilt what would otherwise be a very long list into
-% $100$ manageable blocks (this is a balance between hash table usage and
-% performance). Notice that the special case code may do a look-ahead so
-% requires a final \texttt{w}-type argument whereas the core lookup table
-% does not and also guarantees an output so \texttt{f}-type expansion may
-% be used to obtain the case-changed result.
+% For character tokens there are some special cases to deal with then
+% the majority of changes are covered by using the \TeX{} data as a lookup
+% along with expandable character generation. This avoids needing a very
+% large number of macros or (as seen in earlier versions) a somewhat tricky
+% split of the characters into various blocks. Notice that the special case
+% code may do a look-ahead so requires a final \texttt{w}-type argument
+% whereas the core lookup table does not and also guarantees an output so
+% \texttt{f}-type expansion may be used to obtain the case-changed result.
% \begin{macrocode}
\cs_new:Npn \@@_change_case_char:Nnn #1#2#3
{
@@ -3300,18 +3301,47 @@
{ \@@_change_case_char:nN {#2} #1 }
}
}
-\cs_new:Npn \@@_change_case_char:nN #1#2
+% \end{macrocode}
+% For Unicode engines we can handle all characters directly. However, for
+% the $8$-bit engines the aim is to deal with (a subset of) Unicode (UTF-8)
+% input. They deal with that by making the upper half of the range active,
+% so we look for that and if found work out how many UTF-8 octets there
+% are to deal with. Those can then be grabbed to reconstruct the full
+% Unicode character, which is then used in a lookup. (As will become
+% obvious below, there is no intention here of covering all of Unicode.)
+% \begin{macrocode}
+\cs_if_exist:NTF \utex_char:D
+ {
+ \cs_new:Npn \@@_change_case_char:nN #1#2
+ { \@@_change_case_char_auxi:nN {#1} #2 }
+ }
+ {
+ \cs_new:Npn \@@_change_case_char:nN #1#2
+ {
+ \int_compare:nNnTF { `#2 } > { "80 }
+ {
+ \int_compare:nNnTF { `#2 } < { "E0 }
+ { \@@_change_case_char_UTFiix:nNNN {#1} #2 }
+ {
+ \int_compare:nNnTF { `#2 } < { "F0 }
+ { \@@_change_case_char_UTFiix:nNNNN {#1} #2 }
+ { \@@_change_case_char_UTFiix:nNNNNN {#1} #2 }
+ }
+ }
+ { \@@_change_case_char_auxi:nN {#1} #2 }
+ }
+ }
+\cs_new:Npn \@@_change_case_char_auxi:nN #1#2
{
\@@_change_case_output:fwn
{
- \cs_if_exist:cTF { c__unicode_ #1 _ #2 _tl }
- { \tl_use:c { c__unicode_ #1 _ #2 _tl } }
- { \@@_change_case_char_aux:nN {#1} #2 }
+ \cs_if_exist_use:cF { c__unicode_ #1 _ \token_to_str:N #2 _tl }
+ { \@@_change_case_char_auxii:nN {#1} #2 }
}
}
\cs_if_exist:NTF \utex_char:D
{
- \cs_new:Npn \@@_change_case_char_aux:nN #1#2
+ \cs_new:Npn \@@_change_case_char_auxii:nN #1#2
{
\int_compare:nNnTF { \use:c { @@_lookup_ #1 :N } #2 } = { 0 }
{ \exp_stop_f: #2 }
@@ -3324,103 +3354,69 @@
\cs_new_eq:NN \@@_lookup_title:N \@@_lookup_upper:N
}
{
- \cs_new:Npn \@@_change_case_char_aux:nN #1#2 { \exp_stop_f: #2 }
- }
-% \end{macrocode}
-% If a control sequence has been given as the argument and it is not on
-% the list of those with an argument to examine, the other possibility
-% is that it is a character represented as a command such as |\aa|. To
-% deal with that there is a need again to balance performance against
-% name use. For \LaTeXe{} the list of possible special cases is quite
-% long (there are around $100$ for Cyrillic alone) so a single long
-% \cs{str_case:nvF} is inefficient. On the other hand, using one
-% tl per special case would use a lot of names. The balance here is
-% to split up the special cases by type and for Cyrillic to further
-% subdivide. This works as there are various cases:
-% \begin{itemize}
-% \item Short (one or two letter) names for special Latin characters
-% \item Cyrillic names, all starting |cyr|
-% \item Greek names, all starting |text|
-% \item Greek accents, all starting |acc| and only applicable
-% for upper casing
-% \item Other cases (\enquote{bits and pieces})
-% \end{itemize}
-% Thus a split can be carried out by converting the control sequence to
-% a string then examining the first four characters. For Cyrillic, the
-% fourth character can be used for a second split based on the character
-% code.
-%
-% Note that as this is dependent on \LaTeXe{}, in format mode the code
-% goes straight to the final phase of handling control sequences.
-% \begin{macrocode}
-%<*package>
-\cs_new:Npn \@@_change_case_cs:Nnnn #1#2
- {
- \exp_args:Nf \@@_change_case_cs:nNnnn
- { \cs_to_str:N #1 } #1 {#2}
- }
-\cs_new:Npn \@@_change_case_cs:nNnnn #1#2#3
- {
- \tl_if_head_eq_catcode:oNTF { \use_none:nnn #1 a a a a } a
- { \@@_change_case_cs_type:Nnnnn #2 { latin } {#3} }
+ \cs_new:Npn \@@_change_case_char_auxii:nN #1#2 { \exp_stop_f: #2 }
+ \cs_new:Npn \@@_change_case_char_UTFiix:nNNN #1#2#3#4
+ { \@@_change_case_char_UTFiix:nnN {#1} {#2#4} #3 }
+ \cs_new:Npn \@@_change_case_char_UTFiix:nNNNN #1#2#3#4#5
+ { \@@_change_case_char_UTFiix:nnN {#1} {#2#4#5} #3 }
+ \cs_new:Npn \@@_change_case_char_UTFiix:nNNNNN #1#2#3#4#5#6
+ { \@@_change_case_char_UTFiix:nnN {#1} {#2#4#5#6} #3 }
+ \cs_new:Npn \@@_change_case_char_UTFiix:nnN #1#2#3
{
- \str_if_eq_x:nnTF
- { \@@_change_case_cs_three:NNNw #1 \q_nil }
- { \str_if_eq:nnTF {#3} { lower } { CYR } { cyr } }
- { \@@_change_case_cs_cyr:NnNNNNw #2 {#3} #1 \q_stop }
+ \cs_if_exist:cTF { c__unicode_ #1 _ \tl_to_str:n {#2} _tl }
{
- \str_if_eq_x:nnTF
- { \@@_change_case_cs_three:NNNw #1 \q_nil }
- { acc }
- { \@@_change_case_cs_type:Nnnnn #2 { acc } {#3} }
- {
- \str_if_eq_x:nnTF
- { \@@_change_case_cs_four:NNNNw #1 \q_nil }
- { text }
- { \@@_change_case_cs_type:Nnnnn #2 { greek } {#3} }
- { \@@_change_case_cs_type:Nnnnn #2 { misc } {#3} }
- }
+ \@@_change_case_output:vwn
+ { c__unicode_ #1 _ \tl_to_str:n {#2} _tl }
}
+ { \@@_change_case_output:nwn {#2} }
+ #3
}
}
-\cs_new:Npn \@@_change_case_cs_three:NNNw #1#2#3#4 \q_nil { #1#2#3 }
-\cs_new:Npn \@@_change_case_cs_four:NNNNw #1#2#3#4#5 \q_nil { #1#2#3#4 }
-\cs_new:Npn \@@_change_case_cs_cyr:NnNNNNw #1#2#3#4#5#6#7 \q_stop
+% \end{macrocode}
+% Before dealing with general control sequences there are the special
+% ones to deal with. Letter-like control sequences are a simple look-up,
+% while for accents the loop is much as done elsewhere. Notice that
+% we have a no-op test to make sure there is no unexpected expansion of
+% letter-like input. The third argument here is needed for mixed casing,
+% where it if there is a hit there has to be a change-of-path.
+% \begin{macrocode}
+\cs_new:Npn \@@_change_case_cs_letterlike:Nnn #1#2#3
{
- \@@_change_case_cs_type:Nnnnn #1
- { cyrillic }
+ \cs_if_exist:cTF { c_@@_change_case_ #2 _ \token_to_str:N #1 _tl }
{
- #2 _
- \int_to_roman:n
- {
- 1 +
- \int_div_truncate:nn
- {
- `#6 - \str_if_eq:nnTF {#2} { lower } { `A } { `a }
- }
- { 7 }
- }
+ \@@_change_case_output:vwn
+ { c_@@_change_case_ #2 _ \token_to_str:N #1 _tl }
+ #3
}
- }
-\cs_new:Npn \@@_change_case_cs_type:Nnnnn #1#2#3
- {
- \exp_args:Nf \@@_change_case_cs_type:nnn
{
- \str_case:nvF #1
- { c_@@_change_case_ #2 _ #3 _ tl }
- { \exp_stop_f: }
+ \cs_if_exist:cTF
+ {
+ c_@@_change_case_
+ \str_if_eq:nnTF {#2} { lower } { upper } { lower }
+ _ \token_to_str:N #1 _tl
+ }
+ {
+ \@@_change_case_output:nwn {#1}
+ #3
+ }
+ {
+ \exp_after:wN \@@_change_case_cs_accents:NN
+ \exp_after:wN #1 \l_tl_case_change_accents_tl
+ \q_recursion_tail \q_recursion_stop
+ }
}
}
-\cs_new:Npn \@@_change_case_cs_type:nnn #1#2#3
+\cs_new:Npn \@@_change_case_cs_accents:NN #1#2
{
- \tl_if_blank:nTF {#1}
- {#3}
+ \quark_if_recursion_tail_stop_do:Nn #2
+ { \@@_change_case_cs:N #1 }
+ \str_if_eq:nnTF {#1} {#2}
{
- \@@_change_case_output:nwn {#1}
- #2
+ \use_i_delimit_by_q_recursion_stop:nw
+ { \@@_change_case_output:nwn {#1} }
}
+ { \@@_change_case_cs_accents:NN #1 }
}
-%</package>
% \end{macrocode}
% To deal with a control sequence there is first a need to test if it is
% on the list which indicate that case changing should be skipped. That's
@@ -3517,7 +3513,6 @@
% \end{macro}
% \end{macro}
% \end{macro}
-% \end{macro}
%
% \begin{macro}[aux, EXP]{\@@_change_case_lower_sigma:Nnw}
% \begin{macro}[aux, EXP]{\@@_change_case_lower_sigma:w}
@@ -3577,16 +3572,18 @@
% either a dotless-I or a dotted-I. In the latter case the mapping is
% easy, but in the former there is a second stage search.
% \begin{macrocode}
-\cs_new:Npn \@@_change_case_lower_tr:Nnw #1#2
+\cs_if_exist:NTF \utex_char:D
{
- \int_compare:nNnTF { `#1 } = { "0049 }
- { \@@_change_case_lower_tr_auxi:Nw }
+ \cs_new:Npn \@@_change_case_lower_tr:Nnw #1#2
{
- \int_compare:nNnTF { `#1 } = { "0130 }
- { \@@_change_case_output:nwn { i } }
- {#2}
+ \int_compare:nNnTF { `#1 } = { "0049 }
+ { \@@_change_case_lower_tr_auxi:Nw }
+ {
+ \int_compare:nNnTF { `#1 } = { "0130 }
+ { \@@_change_case_output:nwn { i } }
+ {#2}
+ }
}
- }
% \end{macrocode}
% After a dotless-I there may be a dot-above character. If there is then
% a dotted-i should be produced, otherwise output a dotless-i. When the
@@ -3595,30 +3592,61 @@
% (it grabs \cs{@@_change_case_loop:wn} and the dot-above char and
% discards the latter).
% \begin{macrocode}
-\cs_new:Npn \@@_change_case_lower_tr_auxi:Nw #1#2 \q_recursion_stop
- {
- \tl_if_head_is_N_type:nTF {#2}
- { \@@_change_case_lower_tr_auxii:Nw #2 \q_recursion_stop }
- { \@@_change_case_output:Vwn \c__unicode_dotless_i_tl }
- #1 #2 \q_recursion_stop
- }
-\cs_new:Npn \@@_change_case_lower_tr_auxii:Nw #1#2 \q_recursion_stop
- {
- \@@_change_case_if_expandable:NTF #1
+ \cs_new:Npn \@@_change_case_lower_tr_auxi:Nw #1#2 \q_recursion_stop
{
- \exp_after:wN \@@_change_case_lower_tr_auxi:Nw #1
- #2 \q_recursion_stop
+ \tl_if_head_is_N_type:nTF {#2}
+ { \@@_change_case_lower_tr_auxii:Nw #2 \q_recursion_stop }
+ { \@@_change_case_output:Vwn \c__unicode_dotless_i_tl }
+ #1 #2 \q_recursion_stop
}
+ \cs_new:Npn \@@_change_case_lower_tr_auxii:Nw #1#2 \q_recursion_stop
{
- \bool_if:nTF
+ \@@_change_case_if_expandable:NTF #1
+ {
+ \exp_after:wN \@@_change_case_lower_tr_auxi:Nw #1
+ #2 \q_recursion_stop
+ }
{
- \token_if_cs_p:N #1
- || ! ( \int_compare_p:nNn { `#1 } = { "0307 } )
+ \bool_if:nTF
+ {
+ \token_if_cs_p:N #1
+ || ! ( \int_compare_p:nNn { `#1 } = { "0307 } )
+ }
+ { \@@_change_case_output:Vwn \c__unicode_dotless_i_tl }
+ {
+ \@@_change_case_output:nwn { i }
+ \use_i:nn
+ }
}
+ }
+ }
+% \end{macrocode}
+% For $8$-bit engines, dot-above is not available so there is a simple
+% test for an upper-case I. Then we can look for the UTF-8 representation of
+% an upper case dotted-I without the combining char. If it's not there,
+% preserve the UTF-8 sequence as-is.
+% \begin{macrocode}
+ {
+ \cs_new:Npn \@@_change_case_lower_tr:Nnw #1#2
+ {
+ \int_compare:nNnTF { `#1 } = { "0049 }
{ \@@_change_case_output:Vwn \c__unicode_dotless_i_tl }
{
+ \int_compare:nNnTF { `#1 } = { 196 }
+ { \@@_change_case_lower_tr_auxi:Nw #1 {#2} }
+ {#2}
+ }
+ }
+ \cs_new:Npn \@@_change_case_lower_tr_auxi:Nw #1#2#3#4
+ {
+ \int_compare:nNnTF { `#4 } = { 176 }
+ {
\@@_change_case_output:nwn { i }
- \use_i:nn
+ #3
+ }
+ {
+ #2
+ #3 #4
}
}
}
@@ -3792,30 +3820,87 @@
% \end{macro}
% \end{macro}
%
-% \begin{macro}{\__tl_change_case_upper_de-alt:Nnw}
+% \begin{macro}{\@@_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 }
+ { \@@_change_case_output:Vwn \c__unicode_upper_Eszett_tl }
{#2}
}
% \end{macrocode}
% \end{macro}
%
+% \begin{macro}[EXP, int]{\__unicode_codepoint_to_UTFiix:n}
+% \begin{macro}[EXP, aux]{\__unicode_codepoint_to_UTFiix_auxi:n}
+% \begin{macro}[EXP, aux]{\__unicode_codepoint_to_UTFiix_auxii:Nnn}
+% \begin{macro}[EXP, aux]{\__unicode_codepoint_to_UTFiix_auxiii:n}
+% This code will convert a codepoint into the correct UTF-8 represenation.
+% As there are a variable number of octets, the result starts with the
+% numeral |1|--|4| to indicate the nature of the returned value. Note that
+% this code will cover the full range even though at this stage it is not
+% required here. Also note that longer-term this is likely to need a public
+% interface and/or moving to \pkg{l3str} (see experimental string
+% conversions). In terms of the algoritm itself, see
+% \url{https://en.wikipedia.org/wiki/UTF-8} for the octet pattern.
+% \begin{macrocode}
+\cs_new:Npn \__unicode_codepoint_to_UTFiix:n #1
+ {
+ \exp_args:Nf \__unicode_codepoint_to_UTFiix_auxi:n
+ { \int_eval:n {#1} }
+ }
+\cs_new:Npn \__unicode_codepoint_to_UTFiix_auxi:n #1
+ {
+ \if_int_compare:w #1 > "80 ~
+ \if_int_compare:w #1 < "800 ~
+ 2
+ \__unicode_codepoint_to_UTFiix_auxii:Nnn C {#1} { 64 }
+ \__unicode_codepoint_to_UTFiix_auxiii:n {#1}
+ \else:
+ \if_int_compare:w #1 < "10000 ~
+ 3
+ \__unicode_codepoint_to_UTFiix_auxii:Nnn E {#1} { 64 * 64 }
+ \__unicode_codepoint_to_UTFiix_auxiii:n {#1}
+ \__unicode_codepoint_to_UTFiix_auxiii:n
+ { \int_div_truncate:nn {#1} { 64 } }
+ \else:
+ 4
+ \__unicode_codepoint_to_UTFiix_auxii:Nnn F
+ {#1} { 64 * 64 * 64 }
+ \__unicode_codepoint_to_UTFiix_auxiii:n
+ { \int_div_truncate:nn {#1} { 64 * 64 } }
+ \__unicode_codepoint_to_UTFiix_auxiii:n
+ { \int_div_truncate:nn {#1} { 64 } }
+ \__unicode_codepoint_to_UTFiix_auxiii:n {#1}
+
+ \fi:
+ \fi:
+ \else:
+ 1 {#1}
+ \fi:
+ }
+\cs_new:Npn \__unicode_codepoint_to_UTFiix_auxii:Nnn #1#2#3
+ { { \int_eval:n { "#10 + \int_div_truncate:nn {#2} {#3} } } }
+\cs_new:Npn \__unicode_codepoint_to_UTFiix_auxiii:n #1
+ { { \int_eval:n { \int_mod:nn {#1} { 64 } + 128 } } }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
% \begin{variable}
% {
% \c__unicode_std_sigma_tl ,
% \c__unicode_final_sigma_tl ,
% \c__unicode_accents_lt_tl ,
% \c__unicode_dot_above_tl ,
-% \c__unicode_dotless_i_tl ,
-% \c__unicode_dotted_I_tl ,
-% \c__unicode_i_ogonek_tl ,
-% \c__unicode_I_ogonek_tl ,
% \c__unicode_upper_Eszett_tl
% }
+% The above needs various special token lists containg pre-formed characters.
+% This set are only available in Unicode engines, with no-op definitions
+% for $8$-bit use.
% \begin{macrocode}
\cs_if_exist:NTF \utex_char:D
{
@@ -3831,25 +3916,264 @@
{ \utex_char:D "0069 ~ \utex_char:D "0307 ~ \utex_char:D "0303 ~ }
}
\tl_const:Nx \c__unicode_dot_above_tl { \utex_char:D "0307 ~ }
- \tl_const:Nx \c__unicode_dotless_i_tl { \utex_char:D "0131 ~ }
- \tl_const:Nx \c__unicode_dotted_I_tl { \utex_char:D "0130 ~ }
- \tl_const:Nx \c__unicode_i_ogonek_tl { \utex_char:D "012F ~ }
- \tl_const:Nx \c__unicode_I_ogonek_tl { \utex_char:D "012E ~ }
\tl_const:Nx \c__unicode_upper_Eszett_tl { \utex_char:D "1E9E ~}
}
{
- \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 { }
+ \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_upper_Eszett_tl { }
}
% \end{macrocode}
% \end{variable}
+% \begin{variable}
+% {
+% \c__unicode_dotless_i_tl ,
+% \c__unicode_dotted_I_tl ,
+% \c__unicode_i_ogonek_tl ,
+% \c__unicode_I_ogonek_tl ,
+% }
+% For cases where there is an $8$-bit option in the |T1| font set up,
+% a variant is provided in both cases.
+% \begin{macrocode}
+\group_begin:
+ \cs_if_exist:NTF \utex_char:D
+ {
+ \cs_set_protected:Npn \@@_tmp:w #1#2
+ { \tl_const:Nx #1 { \utex_char:D "#2 ~ } }
+ }
+ {
+ \char_set_catcode_active:N .
+ \char_set_catcode_active:N !
+ \cs_set_protected:Npn \@@_tmp:w #1#2
+ {
+ \group_begin:
+ \cs_set_protected:Npn \@@_tmp:w ##1##2##3
+ {
+ \char_set_lccode:nn { `\. } {##2}
+ \char_set_lccode:nn { `\! } {##3}
+ \tex_lowercase:D
+ { \tl_const:Nn #1 { . ! } }
+ }
+ \tl_set:Nx \l_@@_internal_a_tl
+ { \__unicode_codepoint_to_UTFiix:n {"#2} }
+ \exp_after:wN \@@_tmp:w \l_@@_internal_a_tl
+ \group_end:
+ }
+ }
+ \@@_tmp:w \c__unicode_dotless_i_tl { 0131 }
+ \@@_tmp:w \c__unicode_dotted_I_tl { 0130 }
+ \@@_tmp:w \c__unicode_i_ogonek_tl { 012F }
+ \@@_tmp:w \c__unicode_I_ogonek_tl { 012E }
+\group_end:
+% \end{macrocode}
+% \end{variable}
+%
+% For $8$-bit engines we now need to define the case-change data for
+% the multi-octet mappings. These need a list of what code points are
+% doable in |T1| so the list is hard coded (there's no saving in loading
+% the mappings dynamically). All of the straight-forward ones have two
+% octets, so that is taken as read.
+% \begin{macrocode}
+\group_begin:
+ \char_set_catcode_active:N .
+ \char_set_catcode_active:N !
+ \char_set_catcode_active:N ;
+ \char_set_catcode_active:N ,
+ \bool_if:nT
+ {
+ \sys_if_engine_pdftex_p: || \sys_if_engine_uptex_p:
+ }
+ {
+ \cs_set_protected:Npn \@@_loop:nn #1#2
+ {
+ \quark_if_recursion_tail_stop:n {#1}
+ \tl_set:Nx \l_@@_internal_a_tl
+ {
+ \__unicode_codepoint_to_UTFiix:n {"#1}
+ \__unicode_codepoint_to_UTFiix:n {"#2}
+ }
+ \exp_after:wN \@@_tmp:w \l_@@_internal_a_tl
+ \@@_loop:nn
+ }
+ \cs_set_protected:Npn \@@_tmp:w #1#2#3#4#5#6
+ {
+ \char_set_lccode:nn { `\. } {#2}
+ \char_set_lccode:nn { `\! } {#3}
+ \char_set_lccode:nn { `\; } {#5}
+ \char_set_lccode:nn { `\, } {#6}
+ \tex_lowercase:D
+ {
+ \tl_const:cn { c__unicode_lower_ \tl_to_str:n { . ! } _tl }
+ { ; , }
+ \tl_const:cn { c__unicode_upper_ \tl_to_str:n { ; , } _tl }
+ { . ! }
+ }
+ }
+ \@@_loop:nn
+ { 00C0 } { 00E0 }
+ { 00C2 } { 00E2 }
+ { 00C3 } { 00E3 }
+ { 00C4 } { 00E4 }
+ { 00C5 } { 00E5 }
+ { 00C6 } { 00E6 }
+ { 00C7 } { 00E7 }
+ { 00C8 } { 00E8 }
+ { 00C9 } { 00E9 }
+ { 00CA } { 00EA }
+ { 00CB } { 00EB }
+ { 00CC } { 00EC }
+ { 00CD } { 00ED }
+ { 00CE } { 00EE }
+ { 00CF } { 00EF }
+ { 00D0 } { 00F0 }
+ { 00D1 } { 00F1 }
+ { 00D2 } { 00F2 }
+ { 00D3 } { 00F3 }
+ { 00D4 } { 00F4 }
+ { 00D5 } { 00F5 }
+ { 00D6 } { 00F6 }
+ { 00D8 } { 00F8 }
+ { 00D9 } { 00F9 }
+ { 00DA } { 00FA }
+ { 00DB } { 00FB }
+ { 00DC } { 00FC }
+ { 00DD } { 00FD }
+ { 00DE } { 00FE }
+ { 0100 } { 0101 }
+ { 0102 } { 0103 }
+ { 0104 } { 0105 }
+ { 0106 } { 0107 }
+ { 0108 } { 0109 }
+ { 010A } { 010B }
+ { 010C } { 010D }
+ { 010E } { 010F }
+ { 0110 } { 0111 }
+ { 0112 } { 0113 }
+ { 0114 } { 0115 }
+ { 0116 } { 0117 }
+ { 0118 } { 0119 }
+ { 011A } { 011B }
+ { 011C } { 011D }
+ { 011E } { 011F }
+ { 0120 } { 0121 }
+ { 0122 } { 0123 }
+ { 0124 } { 0125 }
+ { 0128 } { 0129 }
+ { 012A } { 012B }
+ { 012C } { 012D }
+ { 012E } { 012F }
+ { 0132 } { 0133 }
+ { 0134 } { 0135 }
+ { 0136 } { 0137 }
+ { 0139 } { 013A }
+ { 013B } { 013C }
+ { 013E } { 013F }
+ { 0141 } { 0142 }
+ { 0143 } { 0144 }
+ { 0145 } { 0146 }
+ { 0147 } { 0148 }
+ { 014A } { 014B }
+ { 014C } { 014D }
+ { 014E } { 014F }
+ { 0150 } { 0151 }
+ { 0152 } { 0153 }
+ { 0154 } { 0155 }
+ { 0156 } { 0157 }
+ { 0158 } { 0159 }
+ { 015A } { 015B }
+ { 015C } { 015D }
+ { 015E } { 015F }
+ { 0160 } { 0161 }
+ { 0162 } { 0163 }
+ { 0164 } { 0165 }
+ { 0168 } { 0169 }
+ { 016A } { 016B }
+ { 016C } { 016D }
+ { 016E } { 016F }
+ { 0170 } { 0171 }
+ { 0172 } { 0173 }
+ { 0174 } { 0175 }
+ { 0176 } { 0177 }
+ { 0178 } { 00FF }
+ { 0179 } { 017A }
+ { 017B } { 017C }
+ { 017D } { 017E }
+ { 01CD } { 01CE }
+ { 01CF } { 01D0 }
+ { 01D1 } { 01D2 }
+ { 01D3 } { 01D4 }
+ { 01E2 } { 01E3 }
+ { 01E6 } { 01E7 }
+ { 01E8 } { 01E9 }
+ { 01EA } { 01EB }
+ { 01F4 } { 01F5 }
+ { 0218 } { 0219 }
+ { 021A } { 021B }
+ \q_recursion_tail ?
+ \q_recursion_stop
+ \cs_set_protected:Npn \@@_tmp:w #1#2#3
+ {
+ \group_begin:
+ \cs_set_protected:Npn \@@_tmp:w ##1##2##3
+ {
+ \char_set_lccode:nn { `\. } {##2}
+ \char_set_lccode:nn { `\! } {##3}
+ \tex_lowercase:D
+ {
+ \tl_const:cn
+ { c__unicode_ #3 _ \tl_to_str:n { . ! } _tl }
+ }
+ { #2 }
+ }
+ \tl_set:Nx \l_@@_internal_a_tl
+ { \__unicode_codepoint_to_UTFiix:n { "#1 } }
+ \exp_after:wN \@@_tmp:w \l_@@_internal_a_tl
+ \group_end:
+ }
+ \@@_tmp:w { 00DF } { SS } { upper }
+ \@@_tmp:w { 00DF } { Ss } { title }
+ \@@_tmp:w { 0131 } { I } { upper }
+ }
+ \group_end:
+% \end{macrocode}
+%
+% The (fixed) look-up mappings for letter-like control sequences.
+% \begin{macrocode}
+\group_begin:
+ \cs_set_protected:Npn \@@_change_case_setup:NN #1#2
+ {
+ \quark_if_recursion_tail_stop:N #1
+ \tl_const:cn { c_@@_change_case_lower_ \token_to_str:N #1 _tl } { #2 }
+ \tl_const:cn { c_@@_change_case_upper_ \token_to_str:N #2 _tl } { #1 }
+ \@@_change_case_setup:NN
+ }
+ \@@_change_case_setup:NN
+ \AA \aa
+ \AE \ae
+ \DH \dh
+ \DJ \dj
+ \L \l
+ \NG \ng
+ \O \o
+ \OE \oe
+ \SS \ss
+ \TH \th
+ \q_recursion_tail ?
+ \q_recursion_stop
+ \tl_const:cn { c_@@_change_case_upper_ \token_to_str:N \i _tl } { I }
+ \tl_const:cn { c_@@_change_case_upper_ \token_to_str:N \j _tl } { J }
+\group_end:
+% \end{macrocode}
+%
+% \begin{variable}{\l_tl_case_change_accents_tl}
+% A list of accents to leave alone.
+% \begin{macrocode}
+\tl_new:N \l_tl_case_change_accents_tl
+\tl_set:Nn \l_tl_case_change_accents_tl { \" \^ \' \` \. \c \u \~ \H \v }
+% \end{macrocode}
+% \end{variable}
%
% \begin{macro}[aux, EXP]{\@@_mixed_case:nn}
% \begin{macro}[aux, EXP]{\@@_mixed_case_aux:nn}
@@ -3859,6 +4183,7 @@
% \begin{macro}[aux, EXP]{\@@_mixed_case_N_type:Nwn}
% \begin{macro}[aux, EXP]{\@@_mixed_case_N_type:NNNnn}
% \begin{macro}[aux, EXP]{\@@_mixed_case_N_type:Nnn}
+% \begin{macro}[aux, EXP]{\@@_mixed_case_letterlike:Nw}
% \begin{macro}[aux, EXP]{\@@_mixed_case_char:N}
% \begin{macro}[aux, EXP]{\@@_mixed_case_skip:N}
% \begin{macro}[aux, EXP]{\@@_mixed_case_skip:NN}
@@ -3950,34 +4275,24 @@
% \end{macrocode}
% The business end of the loop is here: there is first a need to deal
% with any control sequence cases before looking for characters to skip.
+% If there is a hit for a letter-like control sequence, switch to lower
+% casing.
% \begin{macrocode}
\cs_new:Npn \@@_mixed_case_N_type:Nnn #1#2#3
{
\token_if_cs:NTF #1
-%<*initex>
{
- \@@_change_case_cs:N #1
+ \@@_change_case_cs_letterlike:Nnn #1 { upper }
+ { \@@_mixed_case_letterlike:Nw }
\@@_mixed_case_loop:wn #2 \q_recursion_stop {#3}
}
-%</initex>
-%<*package>
- {
- \@@_change_case_cs:Nnnn #1 { upper }
- {
- \@@_change_case_loop:wnn
- #2 \q_recursion_stop { lower } {#3}
- }
- {
- \@@_change_case_cs:N #1
- \@@_mixed_case_loop:wn #2 \q_recursion_stop {#3}
- }
- }
-%</package>
{
\@@_mixed_case_char:Nn #1 {#3}
\@@_change_case_loop:wnn #2 \q_recursion_stop { lower } {#3}
}
}
+\cs_new:Npn \@@_mixed_case_letterlike:Nw #1#2 \q_recursion_stop
+ { \@@_change_case_loop:wnn #2 \q_recursion_stop { lower } }
% \end{macrocode}
% As detailed above, handling a mixed case char means first looking for
% exceptions then treating as an upper cased letter, but with a list of
@@ -4040,6 +4355,7 @@
% \end{macro}
% \end{macro}
% \end{macro}
+% \end{macro}
%
% \begin{macro}[aux, EXP]{\@@_change_case_mixed_nl:Nnw}
% \begin{macro}[aux, EXP]{\@@_change_case_mixed_nl:Nw}
@@ -4135,286 +4451,6 @@
% \end{macrocode}
% \end{variable}
%
-% \begin{variable}
-% {
-% \c_@@_change_case_latin_upper_tl ,
-% \c_@@_change_case_latin_lower_tl ,
-% \c_@@_change_case_cyrillic_upper_i_tl ,
-% \c_@@_change_case_cyrillic_upper_ii_tl ,
-% \c_@@_change_case_cyrillic_upper_iii_tl ,
-% \c_@@_change_case_cyrillic_upper_iv_tl ,
-% \c_@@_change_case_cyrillic_lower_i_tl ,
-% \c_@@_change_case_cyrillic_lower_ii_tl ,
-% \c_@@_change_case_cyrillic_lower_iii_tl ,
-% \c_@@_change_case_cyrillic_lower_iv_tl ,
-% \c_@@_change_case_greek_upper_tl ,
-% \c_@@_change_case_greek_lower_tl ,
-% \c_@@_change_case_acc_upper_tl ,
-% \c_@@_change_case_acc_upper_tl ,
-% \c_@@_change_case_misc_upper_tl ,
-% \c_@@_change_case_misc_lower_tl
-% }
-% The data for case changing control sequences representing characters
-% is stored such that further expansion is inhibited. This is required
-% as many of the \LaTeXe{} commands are fragile and so will fail inside
-% an \texttt{x}-type expansion without this precaution. As such, there is
-% a bit of set up to deal with the various requirements here: upper and
-% lower case mappings are not identical so special end cases are needed
-% to get everything set up correctly with minimal repetition.
-% \begin{macrocode}
-%<*package>
-\group_begin:
- \cs_set_protected:Npn \@@_change_case_setup:nnnn #1#2#3#4
- {
- \tl_const:cx { c_@@_change_case_ #1 _upper #2 _tl }
- {
- \@@_change_case_map:NN
- #3 \q_recursion_tail ? \q_recursion_stop
- }
- \tl_const:cx { c_@@_change_case_ #1 _lower #2 _tl }
- {
- \@@_change_case_map:NNN #4
- #3 \q_recursion_tail ? \q_recursion_stop
- }
- }
- \cs_set:Npn \@@_change_case_map:NN #1#2
- {
- \quark_if_recursion_tail_stop:N #1
- \exp_not:N #1 \exp_not:n { { \exp_stop_f: #2 } }
- \@@_change_case_map:NN
- }
- \cs_set:Npn \@@_change_case_map:NNN #1#2#3
- {
- \str_if_eq:nnT {#1} {#2}
- { \use_none_delimit_by_q_recursion_stop:w }
- \exp_not:N #3 \exp_not:n { { \exp_stop_f: #2 } }
- \@@_change_case_map:NNN #1
- }
- \@@_change_case_setup:nnnn
- { latin }
- { }
- {
- \aa \AA
- \ae \AE
- \dh \DH
- \dj \DJ
- \l \L
- \ng \NG
- \o \O
- \oe \OE
- \ss \SS
- \th \TH
- \i I
- \j J
- }
- { \i }
- \@@_change_case_setup:nnnn
- { cyrillic }
- { _i }
- {
- \cyra \CYRA
- \cyrabhch \CYRABHCH
- \cyrabhchdsc \CYRABHCHDSC
- \cyrabhdze \CYRABHDZE
- \cyrabhha \CYRABHHA
- \cyrae \CYRAE
- \cyrb \CYRB
- \cyrbyus \CYRBYUS
- \cyrc \CYRC
- \cyrch \CYRCH
- \cyrchldsc \CYRCHLDSC
- \cyrchrdsc \CYRCHRDSC
- \cyrchvcrs \CYRCHVCRS
- \cyrd \CYRD
- \cyrdelta \CYRDELTA
- \cyrdje \CYRDJE
- \cyrdze \CYRDZE
- \cyrdzhe \CYRDZHE
- \cyre \CYRE
- \cyreps \CYREPS
- \cyrerev \CYREREV
- \cyrery \CYRERY
- \cyrf \CYRF
- \cyrfita \CYRFITA
- \cyrg \CYRG
- \cyrgdsc \CYRGDSC
- \cyrgdschcrs \CYRGDSCHCRS
- \cyrghcrs \CYRGHCRS
- \cyrghk \CYRGHK
- \cyrgup \CYRGUP
- }
- { \q_recursion_tail }
- \@@_change_case_setup:nnnn
- { cyrillic }
- { _ii }
- {
- \cyrh \CYRH
- \cyrhdsc \CYRHDSC
- \cyrhhcrs \CYRHHCRS
- \cyrhhk \CYRHHK
- \cyrhrdsn \CYRHRDSN
- \cyri \CYRI
- \cyrie \CYRIE
- \cyrii \CYRII
- \cyrishrt \CYRISHRT
- \cyrishrtdsc \CYRISHRTDSC
- \cyrizh \CYRIZH
- \cyrje \CYRJE
- \cyrk \CYRK
- \cyrkbeak \CYRKBEAK
- \cyrkdsc \CYRKDSC
- \cyrkhcrs \CYRKHCRS
- \cyrkhk \CYRKHK
- \cyrkvcrs \CYRKVCRS
- \cyrl \CYRL
- \cyrldsc \CYRLDSC
- \cyrlhk \CYRLHK
- \cyrlje \CYRLJE
- \cyrm \CYRM
- \cyrmdsc \CYRMDSC
- \cyrmhk \CYRMHK
- \cyrn \CYRN
- \cyrndsc \CYRNDSC
- \cyrng \CYRNG
- \cyrnhk \CYRNHK
- \cyrnje \CYRNJE
- \cyrnlhk \CYRNLHK
- }
- { \q_recursion_tail }
- \@@_change_case_setup:nnnn
- { cyrillic }
- { _iii }
- {
- \cyro \CYRO
- \cyrotld \CYROTLD
- \cyrp \CYRP
- \cyrphk \CYRPHK
- \cyrq \CYRQ
- \cyrr \CYRR
- \cyrrdsc \CYRRDSC
- \cyrrhk \CYRRHK
- \cyrrtick \CYRRTICK
- \cyrs \CYRS
- \cyrsacrs \CYRSACRS
- \cyrschwa \CYRSCHWA
- \cyrsdsc \CYRSDSC
- \cyrsemisftsn \CYRSEMISFTSN
- \cyrsftsn \CYRSFTSN
- \cyrsh \CYRSH
- \cyrshch \CYRSHCH
- \cyrshha \CYRSHHA
- \cyrt \CYRT
- \cyrtdsc \CYRTDSC
- \cyrtetse \CYRTETSE
- \cyrtshe \CYRTSHE
- \cyru \CYRU
- \cyrushrt \CYRUSHRT
- }
- { \q_recursion_tail }
- \@@_change_case_setup:nnnn
- { cyrillic }
- { _iv }
- {
- \cyrv \CYRV
- \cyrw \CYRW
- \cyry \CYRY
- \cyrya \CYRYA
- \cyryat \CYRYAT
- \cyryhcrs \CYRYHCRS
- \cyryi \CYRYI
- \cyryo \CYRYO
- \cyryu \CYRYU
- \cyrz \CYRZ
- \cyrzdsc \CYRZDSC
- \cyrzh \CYRZH
- \cyrzhdsc \CYRZHDSC
- }
- { \q_recursion_tail }
- \@@_change_case_setup:nnnn
- { greek }
- { }
- {
- \textalpha \textAlpha
- \textbeta \textBeta
- \textchi \textChi
- \textdelta \textDelta
- \textdigamma \textDigamma
- \texteta \textEta
- \textepsilon \textEpsilon
- \textgamma \textGamma
- \textiota \textIota
- \textkappa \textKappa
- \textlambda \textLambda
- \textmu \textMu
- \textnu \textNu
- \textomega \textOmega
- \textomicron \textOmicron
- \textphi \textPhi
- \textpi \textPi
- \textpsi \textPsi
- \textqoppa \textQoppa
- \textrho \textRho
- \textsampi \textSampi
- \textautosigma \textSigma
- \textstigma \textStigma
- \texttheta \textTheta
- \texttau \textTau
- \textupsilon \textUpsilon
- \textxi \textXi
- \textzeta \textZeta
- \textsigma \textSigma
- \textvarsigma \textSigma
- \textvarstigma \textStigma
- }
- { \textsigma }
- \tl_const:Nn \c_@@_change_case_acc_upper_tl
- {
- \accdasia { \exp_stop_f: \LGR@accdropped }
- \accdasiaoxia { \exp_stop_f: \LGR@hiatus }
- \accdasiavaria { \exp_stop_f: \LGR@accdropped }
- \accdasiaperispomeni { \exp_stop_f: \LGR@accdropped }
- \accpsili { \exp_stop_f: \LGR@hiatus }
- \accpsilioxia { \exp_stop_f: \LGR@hiatus }
- \accpsilivaria { \exp_stop_f: \LGR@hiatus }
- \accpsiliperispomeni { \exp_stop_f: \LGR@accdropped }
- \acctonos { \exp_stop_f: \LGR@hiatus }
- \accvaria { \exp_stop_f: \LGR@accdropped }
- \accdialytikatonos { \exp_stop_f: \LGR@accDialytika }
- \accdialytikavaria { \exp_stop_f: \LGR@accDialytika }
- \accdialytikaperispomeni { \exp_stop_f: \LGR@accDialytika }
- \accperispomeni { \exp_stop_f: \LGR@accdropped }
- }
- \tl_const:Nn \c_@@_change_case_acc_lower_tl { }
- \tl_const:Nn \c_@@_change_case_misc_upper_tl
- {
- \ypogegrammeni { \exp_stop_f: \prosgegrammeni }
- \abreve { \exp_stop_f: \Abreve }
- \acircumflex { \exp_stop_f: \Acircumflex }
- \ecircumflex { \exp_stop_f: \Ecircumflex }
- \ocircumflex { \exp_stop_f: \Ocircumflex }
- \ohorn { \exp_stop_f: \Ohorn }
- \uhorn { \exp_stop_f: \Uhorn }
- }
- \tl_const:Nn \c_@@_change_case_misc_lower_tl
- {
- \prosgegrammeni { \exp_stop_f: \ypogegrammeni }
- \Abreve { \exp_stop_f: \abreve }
- \Acircumflex { \exp_stop_f: \acircumflex }
- \Ecircumflex { \exp_stop_f: \ecircumflex }
- \Ocircumflex { \exp_stop_f: \ocircumflex }
- \Ohorn { \exp_stop_f: \ohorn }
- \Uhorn { \exp_stop_f: \uhorn }
- \ABREVE { \exp_stop_f: \abreve }
- \ACIRCUMFLEX { \exp_stop_f: \acircumflex }
- \ECIRCUMFLEX { \exp_stop_f: \ecircumflex }
- \OCIRCUMFLEX { \exp_stop_f: \ocircumflex }
- \OHORN { \exp_stop_f: \ohorn }
- \UHORN { \exp_stop_f: \uhorn }
- }
-\group_end:
-%</package>
-% \end{macrocode}
-% \end{variable}
%
% \begin{macro}{\tl_log:N, \tl_log:c}
% Redirect output of \cs{tl_show:N} to the log.
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3format.ins b/Master/texmf-dist/source/latex/l3kernel/l3format.ins
index 9f3bd8b9ad0..381cf7ce0fe 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3format.ins
+++ b/Master/texmf-dist/source/latex/l3kernel/l3format.ins
@@ -1,6 +1,6 @@
\iffalse meta-comment
-File l3format.ins Copyright (C) 2011,2012,2014,2015 The LaTeX3 Project
+File l3format.ins Copyright (C) 2011,2012,2014-2016 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
@@ -75,8 +75,8 @@ Do not distribute a modified version of this file.
\from{l3box.dtx} {initex}
\from{l3coffins.dtx} {initex}
\from{l3color.dtx} {initex}
- \from{l3candidates.dtx} {initex}
\from{l3sys.dtx} {initex}
+ \from{l3candidates.dtx} {initex}
\from{l3luatex.dtx} {initex,tex}
% ======== FORMAT ONLY =========
\from{l3final.dtx} {initex}
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3int.dtx b/Master/texmf-dist/source/latex/l3kernel/l3int.dtx
index 93af5dd409b..2bd45b71fe1 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3int.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3int.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-%% File: l3int.dtx Copyright (C) 1990-2015 The LaTeX3 Project
+%% File: l3int.dtx Copyright (C) 1990-2016 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: l3int.dtx 6089 2015-09-25 13:29:50Z mittelba $
+\GetIdInfo$Id: l3int.dtx 6366 2016-01-05 22:18:59Z joseph $
{L3 Integers}
%</driver|package>
%<*driver>
@@ -2450,24 +2450,6 @@
% \end{variable}
% \end{variable}
%
-% \subsection{Deprecated functions}
-%
-% \begin{macro}{\int_to_binary:n, \int_from_binary:n}
-% \begin{macro}{\int_to_hexadecimal:n, \int_from_hexadecimal:n}
-% \begin{macro}{\int_to_octal:n, \int_from_octal:n}
-% Deprecated 2014-02-11.
-% \begin{macrocode}
-\cs_new_eq:NN \int_to_binary:n \int_to_bin:n
-\cs_new_eq:NN \int_to_hexadecimal:n \int_to_Hex:n
-\cs_new_eq:NN \int_to_octal:n \int_to_oct:n
-\cs_new_eq:NN \int_from_binary:n \int_from_bin:n
-\cs_new_eq:NN \int_from_hexadecimal:n \int_from_hex:n
-\cs_new_eq:NN \int_from_octal:n \int_from_oct:n
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
% \begin{macrocode}
%</initex|package>
% \end{macrocode}
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx b/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx
index 9a1ca2a7251..a30c9b30b85 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-%% File: l3prop.dtx Copyright (C) 1990-2015 The LaTeX3 Project
+%% File: l3prop.dtx Copyright (C) 1990-2016 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: l3prop.dtx 5777 2015-08-05 02:32:21Z bruno $
+\GetIdInfo$Id: l3prop.dtx 6366 2016-01-05 22:18:59Z joseph $
{L3 Property lists}
%</driver|package>
%<*driver>
@@ -1126,16 +1126,6 @@
% \end{macrocode}
% \end{macro}
%
-% \subsection{Deprecated functions}
-%
-% \begin{macro}{\prop_get:Nn, \prop_get:cn}
-% Deprecated 2014-07-17.
-% \begin{macrocode}
-\cs_new_eq:NN \prop_get:Nn \prop_item:Nn
-\cs_new_eq:NN \prop_get:cn \prop_item:cn
-% \end{macrocode}
-% \end{macro}
-%
% \begin{macrocode}
%</initex|package>
% \end{macrocode}
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx b/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx
index 30cd341ec53..404b24bef11 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx
@@ -1,7 +1,7 @@
% \iffalse meta-comment
%
%% File: l3skip.dtx Copyright (C) 2004-2011 Frank Mittelbach, The LaTeX3 Project
-%% (C) 2012-2015 The LaTeX3 Project
+%% (C) 2012-2016 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
@@ -38,7 +38,7 @@
\documentclass[full]{l3doc}
%</driver>
%<*driver|package>
-\GetIdInfo$Id: l3skip.dtx 6089 2015-09-25 13:29:50Z mittelba $
+\GetIdInfo$Id: l3skip.dtx 6366 2016-01-05 22:18:59Z joseph $
{L3 Dimensions and skips}
%</driver|package>
%<*driver>
@@ -1963,16 +1963,6 @@
% \end{variable}
% \end{variable}
%
-% \subsection{Deprecated functions}
-%
-% \begin{macro}{\__dim_strip_bp:n, \__dim_strip_pt:n}
-% Deprecated 2014-07-15.
-% \begin{macrocode}
-\cs_new_eq:NN \__dim_strip_bp:n \dim_to_decimal_in_bp:n
-\cs_new_eq:NN \__dim_strip_pt:n \dim_to_decimal:n
-% \end{macrocode}
-% \end{macro}
-%
% \begin{macrocode}
%</initex|package>
% \end{macrocode}
diff --git a/Master/texmf-dist/source/latex/l3packages/l3keys2e/l3keys2e.dtx b/Master/texmf-dist/source/latex/l3packages/l3keys2e/l3keys2e.dtx
index c59d2eeb876..f3d52e71669 100644
--- a/Master/texmf-dist/source/latex/l3packages/l3keys2e/l3keys2e.dtx
+++ b/Master/texmf-dist/source/latex/l3packages/l3keys2e/l3keys2e.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-%% File: l3keys2e.dtx (C) Copyright 2009,2011-2015 The LaTeX3 Project
+%% File: l3keys2e.dtx (C) Copyright 2009,2011-2016 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,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/12/20]
-%<package>\@ifpackagelater{expl3}{2015/12/20}
+\RequirePackage{expl3}[2016/01/19]
+%<package>\@ifpackagelater{expl3}{2016/01/19}
%<package> {}
%<package> {%
%<package> \PackageError{l3keys2e}{Support package l3kernel too old}
@@ -52,8 +52,8 @@
%<package> }
\def\ExplFileName{l3keys2e}
\def\ExplFileDescription{LaTeX2e option processing using LaTeX3 keys}
-\def\ExplFileDate{2015/12/20}
-\def\ExplFileVersion{6326}
+\def\ExplFileDate{2016/01/19}
+\def\ExplFileVersion{6377}
%</driver|package>
%<*driver>
\documentclass[full]{l3doc}
diff --git a/Master/texmf-dist/source/latex/l3packages/xfrac/xfrac.dtx b/Master/texmf-dist/source/latex/l3packages/xfrac/xfrac.dtx
index 94875c846f7..44d94da461c 100644
--- a/Master/texmf-dist/source/latex/l3packages/xfrac/xfrac.dtx
+++ b/Master/texmf-dist/source/latex/l3packages/xfrac/xfrac.dtx
@@ -1,7 +1,7 @@
% \iffalse meta-comment
%
%% File: xfrac.dtx Copyright (C) 2004, 2008-2010 Morten Hoegholm
-%% (C) 2011,2012,2014,2015 The LaTeX3 Project
+%% (C) 2011,2012,2014-2016 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
@@ -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/12/20]
-%<package>\@ifpackagelater{expl3}{2015/12/20}
+\RequirePackage{expl3}[2016/01/19]
+%<package>\@ifpackagelater{expl3}{2016/01/19}
%<package> {}
%<package> {%
%<package> \PackageError{xfrac}{Support package l3kernel too old}
@@ -54,8 +54,8 @@
\RequirePackage{amstext,graphicx,l3keys2e,textcomp,xparse,xtemplate}
\def\ExplFileName{xfrac}
\def\ExplFileDescription{L3 Experimental split-level fractions}
-\def\ExplFileDate{2015/12/20}
-\def\ExplFileVersion{6326}
+\def\ExplFileDate{2016/01/19}
+\def\ExplFileVersion{6377}
%</driver|package>
%<*driver>
\documentclass[full]{l3doc}
diff --git a/Master/texmf-dist/source/latex/l3packages/xparse/xparse.dtx b/Master/texmf-dist/source/latex/l3packages/xparse/xparse.dtx
index 392b93262f9..7150b65947c 100644
--- a/Master/texmf-dist/source/latex/l3packages/xparse/xparse.dtx
+++ b/Master/texmf-dist/source/latex/l3packages/xparse/xparse.dtx
@@ -4,7 +4,7 @@
%% David Carlisle
%% (C) Copyright 2004-2008 Frank Mittelbach,
%% The LaTeX3 Project
-%% (C) Copyright 2009-2015 The LaTeX3 Project
+%% (C) Copyright 2009-2016 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
@@ -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/12/20]
-%<package>\@ifpackagelater{expl3}{2015/12/20}
+\RequirePackage{expl3}[2016/01/19]
+%<package>\@ifpackagelater{expl3}{2016/01/19}
%<package> {}
%<package> {%
%<package> \PackageError{xparse}{Support package l3kernel too old}
@@ -56,8 +56,8 @@
%<package> }
\def\ExplFileName{xparse}
\def\ExplFileDescription{L3 Experimental document command parser}
-\def\ExplFileDate{2015/12/20}
-\def\ExplFileVersion{6326}
+\def\ExplFileDate{2016/01/19}
+\def\ExplFileVersion{6377}
%</driver|package>
%<*driver>
\documentclass[full]{l3doc}
diff --git a/Master/texmf-dist/source/latex/l3packages/xtemplate/xtemplate.dtx b/Master/texmf-dist/source/latex/l3packages/xtemplate/xtemplate.dtx
index b2e0edc7cc6..9fe0c844ab2 100644
--- a/Master/texmf-dist/source/latex/l3packages/xtemplate/xtemplate.dtx
+++ b/Master/texmf-dist/source/latex/l3packages/xtemplate/xtemplate.dtx
@@ -4,7 +4,7 @@
%% David Carlisle
%% (C) Copyright 2004-2010 Frank Mittelbach,
%% The LaTeX3 Project
-%% (C) Copyright 2011-2015 The LaTeX3 Project
+%% (C) Copyright 2011-2016 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
@@ -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/12/20]
-%<package>\@ifpackagelater{expl3}{2015/12/20}
+\RequirePackage{expl3}[2016/01/19]
+%<package>\@ifpackagelater{expl3}{2016/01/19}
%<package> {}
%<package> {%
%<package> \PackageError{xtemplate}{Support package l3kernel too old}
@@ -56,8 +56,8 @@
%<package> }
\def\ExplFileName{xtemplate}
\def\ExplFileDescription{L3 Experimental prototype document functions}
-\def\ExplFileDate{2015/12/20}
-\def\ExplFileVersion{6326}
+\def\ExplFileDate{2016/01/19}
+\def\ExplFileVersion{6377}
%</driver|package>
%<*driver>
\documentclass[full]{l3doc}
diff --git a/Master/texmf-dist/tex/latex/l3build/l3build.lua b/Master/texmf-dist/tex/latex/l3build/l3build.lua
index aac3a20ca20..e6766737673 100644
--- a/Master/texmf-dist/tex/latex/l3build/l3build.lua
+++ b/Master/texmf-dist/tex/latex/l3build/l3build.lua
@@ -1,6 +1,6 @@
--[[
- File l3build.lua (C) Copyright 2014-2015 The LaTeX3 Project
+ File l3build.lua (C) Copyright 2014-2016 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
@@ -17,8 +17,8 @@
--]]
-- Version information: should be identical to that in l3build.dtx
-release_date = "2015/12/20"
-release_ver = "6326"
+release_date = "2016/01/19"
+release_ver = "6377"
-- "module" is a deprecated function in Lua 5.2: as we want the name
-- for other purposes, and it should eventually be 'free', simply
@@ -149,6 +149,7 @@ makeindexopts = makeindexopts or ""
-- Other required settings
asciiengines = asciiengines or {"pdftex"}
checkruns = checkruns or 1
+maxprintline = maxprintline or 79
packtdszip = packtdszip or false -- Not actually needed but clearer
scriptname = scriptname or "build.lua" -- Script used in each directory
typesetcmds = typesetcmds or ""
@@ -189,11 +190,11 @@ function argparse()
}
local option_args =
{
- date = true ,
- engine = true ,
- halt = false,
- help = false,
- quiet = false,
+ date = true ,
+ engine = true ,
+ halt = false,
+ help = false,
+ quiet = false,
version = true
}
-- arg[1] is a special case: must be a command or "-h"/"--help"
@@ -213,7 +214,6 @@ function argparse()
end
-- An auxiliary to grab all file names into a table
local function remainder(num)
- local i
local files = { }
for i = num, #arg do
table.insert(files, arg[i])
@@ -382,9 +382,6 @@ end
-- operations 'natively'.
-- Detect the operating system in use
--- See http://www.lua.org/manual/5.2/manual.html#pdf-package.config for details
--- of the string used here to pick up the operating system (Windows or
--- 'not-Windows'
-- Support items are defined here for cases where a single string can cover
-- both Windows and Unix cases: more complex situations are handled inside
-- the support functions
@@ -564,7 +561,7 @@ function rmdir(dir)
-- First, make sure it exists to avoid any errors
mkdir(dir)
if os_windows then
- return os.execute("rmdir /s /q " .. unix_to_win(dir) )
+ return os.execute("rmdir /s /q " .. unix_to_win(dir))
else
return os.execute("rm -r " .. dir)
end
@@ -577,8 +574,7 @@ end
-- Deal with the fact that Windows and Unix use different path separators
function unix_to_win(path)
- local path = string.gsub(path, "/", "\\")
- return path
+ return string.gsub(path, "/", "\\")
end
--
@@ -731,6 +727,10 @@ end
-- Convert the raw log file into one for comparison/storage: keeps only
-- the 'business' part from the tests and removes system-dependent stuff
function formatlog(logfile, newfile, engine)
+ local maxprintline = maxprintline
+ if engine == "luatex" or engine == "luajittex" then
+ maxprintline = maxprintline + 1 -- Deal with an out-by-one error
+ end
local function killcheck(line)
-- Skip lines containing file dates
if string.match(line, "[^<]%d%d%d%d/%d%d/%d%d") then
@@ -747,9 +747,14 @@ function formatlog(logfile, newfile, engine)
return false
end
-- Substitutions to remove some non-useful changes
- local function normalize(line, maxprintline)
+ local function normalize(line)
+ -- Zap line numbers from \show, \showbox, \box_show and the like:
+ -- do this before wrapping lines
+ line = string.gsub(line, "^l%.%d+ ", "l. ...")
-- Allow for wrapped lines: preserve the content and wrap
- if (string.len(line) == maxprintline) then
+ -- Skip lines that have an explicit marker for truncation
+ if string.len(line) == maxprintline and
+ not string.match(line, "%.%.%.$") then
lastline = (lastline or "") .. line
return ""
end
@@ -776,6 +781,8 @@ function formatlog(logfile, newfile, engine)
end
-- Zap map loading of map
line = string.gsub(line, "%{%w?:?[%w/%-]*/pdftex%.map%}", "")
+ -- Deal with the fact that "(.aux)" may have still a leading space
+ line = string.gsub(line, "^ %(%.aux%)", "(.aux)")
-- Merge all of .fd data into one line so will be removed later
if string.match(line, "^ *%([%.%/%w]+%.fd[^%)]*$") then
lastline = (lastline or "") .. line
@@ -796,17 +803,6 @@ function formatlog(logfile, newfile, engine)
for i = 0, 31 do
line = string.gsub(line, string.char(i), "^^" .. string.char(64 + i))
end
- -- Zap line numbers from \show, \showbox, \box_show and the like
- -- Two stages as line wrapping alters some of them and restore the break
- line = string.gsub(line, "^l%.%d+ ", "l. ...")
- line = string.gsub(
- line,
- "%.%.%.l%.%d+ ( *)%}$",
- "..." .. os_newline .. "l. ...%1}"
- )
- -- Remove spaces at the start of lines: deals with the fact that LuaTeX
- -- uses a different number to the other engines
- line = string.gsub(line, "^%s+", "")
-- Remove 'normal' direction information on boxes with (u)pTeX
line = string.gsub(line, ",? yoko direction,?", "")
-- A tidy-up to keep LuaTeX and other engines in sync
@@ -821,12 +817,6 @@ function formatlog(logfile, newfile, engine)
end
return line
end
- local kpse = require("kpse")
- kpse.set_program_name(engine)
- local maxprintline = tonumber(kpse.expand_var("$max_print_line"))
- if engine == "luatex" or engine == "luajittex" then
- maxprintline = maxprintline + 1 -- Deal with an out-by-one error
- end
local lastline = ""
local newlog = ""
local prestart = true
@@ -841,7 +831,7 @@ function formatlog(logfile, newfile, engine)
elseif line == "TIMO" then
skipping = false
elseif not prestart and not skipping then
- line = normalize(line, maxprintline)
+ line = normalize(line)
if not string.match(line, "^ *$") and not killcheck(line) then
newlog = newlog .. line .. os_newline
end
@@ -987,12 +977,9 @@ function formatlualog(logfile, newfile)
-- Wrap some cases that can be picked out
-- In some places LuaTeX does use max_print_line, then we
-- get into issues with different wrapping approaches
- local kpse = require("kpse")
- kpse.set_program_name("luatex")
- local maxprintline = tonumber(kpse.expand_var("$max_print_line"))
- if (string.len(line) == maxprintline) then
- return "", line
- elseif (string.len(lastline) == maxprintline) then
+ if string.len(line) == maxprintline then
+ return "", lastline .. line
+ elseif string.len(lastline) == maxprintline then
if string.match(line, "\\ETC%.%}$") then
-- If the line wrapped at \ETC we might have lost a space
return lastline
@@ -1003,8 +990,13 @@ function formatlualog(logfile, newfile)
else
return lastline .. os_newline .. line, ""
end
+ -- Return all of the text for a wrapped (multi)line
+ elseif string.len(lastline) > maxprintline then
+ return lastline .. line, ""
end
- return line, ""
+ -- Remove spaces at the start of lines: deals with the fact that LuaTeX
+ -- uses a different number to the other engines
+ return string.gsub(line, "^%s+", ""), ""
end
local newlog = ""
local lastline = ""
@@ -1097,7 +1089,7 @@ function runcheck(name, hide)
-- Do additional log formatting if the engine is LuaTeX, there is no
-- LuaTeX-specific .tlg file and the default engine is not LuaTeX
if enginename == "luatex"
- and tlgfile ~= name .. ".luatex" .. tlgext
+ and not string.match(tlgfile, "%.luatex" .. "%" .. tlgext)
and stdengine ~= "luatex"
and stdengine ~= "luajittex" then
local luatlgfile = testdir .. "/" .. name .. ".luatex" .. tlgext
@@ -1181,6 +1173,9 @@ function runtest(name, engine, hide, ext)
-- Avoid spurious output from (u)pTeX
os_setenv .. " GUESS_INPUT_KANJI_ENCODING=0"
.. os_concat ..
+ -- Ensure lines are of a known length
+ os_setenv .. " max_print_line=" .. maxprintline
+ .. os_concat ..
realengine .. format .. " "
.. checkopts .. " " .. asciiopt .. lvtfile
.. (hide and (" > " .. os_null) or "")
@@ -1376,7 +1371,6 @@ function check(names)
if names and next(names) then
hide = false
end
- local i
names = names or { }
-- No names passed: find all test files
if not next(names) then
@@ -1394,7 +1388,6 @@ function check(names)
end
-- Actually run the tests
print("Running checks on")
- local name
for _,name in ipairs(names) do
print(" " .. name)
local errlevel = runcheck(name, hide)
@@ -1621,7 +1614,6 @@ function doc(files)
-- Allow for command line selection of files
local typeset = true
if files and next(files) then
- local k
typeset = false
for _,k in ipairs(files) do
if k == stripext(j) then
@@ -1666,7 +1658,6 @@ end
function save(names)
checkinit()
local engines = optengines or {stdengine}
- local name
for _,name in pairs(names) do
local engine
for _,engine in pairs(engines) do
@@ -1703,7 +1694,6 @@ end
if versionform ~= "" and not setversion_update_line then
if versionform == "ProvidesPackage" then
function setversion_update_line(line, date, version)
- local i
-- No real regex so do it one type at a time
for _,i in pairs({"Class", "File", "Package"}) do
if string.match(
@@ -1722,7 +1712,6 @@ if versionform ~= "" and not setversion_update_line then
end
elseif versionform == "ProvidesExplPackage" then
function setversion_update_line(line, date, version)
- local i
-- No real regex so do it one type at a time
for _,i in pairs({"Class", "File", "Package"}) do
if string.match(
@@ -1804,7 +1793,6 @@ function setversion()
if optversion then
version = optversion[1] or version
end
- local i, j
for _,i in pairs(versionfiles) do
for _,j in pairs(filelist(".", i)) do
rewrite(j, date, version)
diff --git a/Master/texmf-dist/tex/latex/l3build/regression-test.tex b/Master/texmf-dist/tex/latex/l3build/regression-test.tex
index 40bddaeee44..96dc4320a58 100644
--- a/Master/texmf-dist/tex/latex/l3build/regression-test.tex
+++ b/Master/texmf-dist/tex/latex/l3build/regression-test.tex
@@ -14,7 +14,7 @@
%% Do not distribute a modified version of this file.
%%
%%
-%% File l3build.dtx (C) Copyright 2014-2015 The LaTeX3 Project
+%% File l3build.dtx (C) Copyright 2014-2016 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
diff --git a/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex b/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex
index 3b89b6f6fd1..048905cce52 100644
--- a/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex
+++ b/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex
@@ -37,8 +37,8 @@
%% l3box.dtx (with options: `package')
%% l3coffins.dtx (with options: `package')
%% l3color.dtx (with options: `package')
-%% l3candidates.dtx (with options: `package')
%% l3sys.dtx (with options: `package')
+%% l3candidates.dtx (with options: `package')
%% l3luatex.dtx (with options: `package,tex')
%%
%% EXPERIMENTAL CODE
@@ -48,7 +48,7 @@
%%
%% Do not distribute a modified version of this file.
%%
-%% File: expl3.dtx Copyright (C) 1990-2015 The LaTeX3 Project
+%% File: expl3.dtx Copyright (C) 1990-2016 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
@@ -82,8 +82,8 @@
%% -----------------------------------------------------------------------
\def\ExplFileName{expl3}%
\def\ExplFileDescription{L3 programming layer}%
-\def\ExplFileDate{2016/01/03}%
-\def\ExplFileVersion{6358}%
+\def\ExplFileDate{2016/01/19}%
+\def\ExplFileVersion{6377}%
\begingroup
\def\next{\endgroup}%
\expandafter\ifx\csname PackageError\endcsname\relax
@@ -4789,7 +4789,7 @@
\seq_new:N \l_tmpb_seq
\seq_new:N \g_tmpa_seq
\seq_new:N \g_tmpb_seq
-%% File: l3int.dtx Copyright (C) 1990-2015 The LaTeX3 Project
+%% File: l3int.dtx Copyright (C) 1990-2016 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
@@ -4821,7 +4821,7 @@
%% prior consultation with the LaTeX3 Project.
%%
%% -----------------------------------------------------------------------
-\GetIdInfo$Id: l3int.dtx 6089 2015-09-25 13:29:50Z mittelba $
+\GetIdInfo$Id: l3int.dtx 6366 2016-01-05 22:18:59Z joseph $
{L3 Integers}
\cs_new_eq:NN \__int_value:w \tex_number:D
\cs_new_eq:NN \__int_eval:w \etex_numexpr:D
@@ -5611,12 +5611,6 @@
\int_new:N \l_tmpb_int
\int_new:N \g_tmpa_int
\int_new:N \g_tmpb_int
-\cs_new_eq:NN \int_to_binary:n \int_to_bin:n
-\cs_new_eq:NN \int_to_hexadecimal:n \int_to_Hex:n
-\cs_new_eq:NN \int_to_octal:n \int_to_oct:n
-\cs_new_eq:NN \int_from_binary:n \int_from_bin:n
-\cs_new_eq:NN \int_from_hexadecimal:n \int_from_hex:n
-\cs_new_eq:NN \int_from_octal:n \int_from_oct:n
%% File: l3quark.dtx Copyright (C) 1990-2015 The LaTeX3 Project
%%
%% It may be distributed and/or modified under the conditions of the
@@ -7266,7 +7260,7 @@
}
{ \scan_stop: }
}
-%% File: l3prop.dtx Copyright (C) 1990-2015 The LaTeX3 Project
+%% File: l3prop.dtx Copyright (C) 1990-2016 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
@@ -7298,7 +7292,7 @@
%% prior consultation with the LaTeX3 Project.
%%
%% -----------------------------------------------------------------------
-\GetIdInfo$Id: l3prop.dtx 5777 2015-08-05 02:32:21Z bruno $
+\GetIdInfo$Id: l3prop.dtx 6366 2016-01-05 22:18:59Z joseph $
{L3 Property lists}
\__scan_new:N \s__prop
\cs_new:Npn \__prop_pair:wn #1 \s__prop #2
@@ -7569,8 +7563,6 @@
{ \prop_map_function:NN #1 \__msg_show_item:nn }
}
\cs_generate_variant:Nn \prop_show:N { c }
-\cs_new_eq:NN \prop_get:Nn \prop_item:Nn
-\cs_new_eq:NN \prop_get:cn \prop_item:cn
%% File: l3msg.dtx Copyright (C) 2009-2015 The LaTeX3 Project
%%
%% It may be distributed and/or modified under the conditions of the
@@ -8987,7 +8979,7 @@
\__msg_kernel_new:nnn { kernel } { indent-outside-wrapping-code }
{ Only~\iow_wrap:nnnN~(arg~1)~allows~\iow_indent:n }
%% File: l3skip.dtx Copyright (C) 2004-2011 Frank Mittelbach, The LaTeX3 Project
-%% (C) 2012-2015 The LaTeX3 Project
+%% (C) 2012-2016 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
@@ -9019,7 +9011,7 @@
%% prior consultation with the LaTeX3 Project.
%%
%% -----------------------------------------------------------------------
-\GetIdInfo$Id: l3skip.dtx 6089 2015-09-25 13:29:50Z mittelba $
+\GetIdInfo$Id: l3skip.dtx 6366 2016-01-05 22:18:59Z joseph $
{L3 Dimensions and skips}
\cs_new_eq:NN \if_dim:w \tex_ifdim:D
\cs_new_eq:NN \__dim_eval:w \etex_dimexpr:D
@@ -9425,8 +9417,6 @@
\muskip_new:N \l_tmpb_muskip
\muskip_new:N \g_tmpa_muskip
\muskip_new:N \g_tmpb_muskip
-\cs_new_eq:NN \__dim_strip_bp:n \dim_to_decimal_in_bp:n
-\cs_new_eq:NN \__dim_strip_pt:n \dim_to_decimal:n
%% File: l3keys.dtx Copyright (C) 2006-2015 The LaTeX3 Project
%%
%% It may be distributed and/or modified under the conditions of the
@@ -16981,7 +16971,151 @@
}
}
}
-%% File: l3candidates.dtx Copyright(C) 2012-2015 The LaTeX3 Project
+%% File: l3sys.dtx Copyright (C) 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
+%% 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 "l3kernel 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 LaTeX3 Project.
+%%
+%% -----------------------------------------------------------------------
+\GetIdInfo$Id: l3sys.dtx 6087 2015-09-25 10:29:53Z joseph $
+ {L3 Experimental system/runtime functions}
+\str_const:Nx \c_sys_jobname_str { \tex_jobname:D }
+\int_const:Nn \c_sys_minute_int
+ { \int_mod:nn { \tex_time:D } { 60 } }
+\int_const:Nn \c_sys_hour_int
+ { \int_div_truncate:nn { \tex_time:D } { 60 } }
+\int_const:Nn \c_sys_day_int { \tex_day:D }
+\int_const:Nn \c_sys_month_int { \tex_month:D }
+\int_const:Nn \c_sys_year_int { \tex_year:D }
+\clist_map_inline:nn { lua , pdf , p , up , xe }
+ {
+ \cs_new_eq:cN { sys_if_engine_ #1 tex:T } \use_none:n
+ \cs_new_eq:cN { sys_if_engine_ #1 tex:F } \use:n
+ \cs_new_eq:cN { sys_if_engine_ #1 tex:TF } \use_ii:nn
+ \cs_new_eq:cN { sys_if_engine_ #1 tex_p: } \c_false_bool
+ }
+\cs_if_exist:NT \luatex_luatexversion:D
+ {
+ \cs_gset_eq:NN \sys_if_engine_luatex:T \use:n
+ \cs_gset_eq:NN \sys_if_engine_luatex:F \use_none:n
+ \cs_gset_eq:NN \sys_if_engine_luatex:TF \use_i:nn
+ \cs_gset_eq:NN \sys_if_engine_luatex_p: \c_true_bool
+ \str_const:Nn \c_sys_engine_str { luatex }
+ }
+\cs_if_exist:NT \pdftex_pdftexversion:D
+ {
+ \cs_gset_eq:NN \sys_if_engine_pdftex:T \use:n
+ \cs_gset_eq:NN \sys_if_engine_pdftex:F \use_none:n
+ \cs_gset_eq:NN \sys_if_engine_pdftex:TF \use_i:nn
+ \cs_gset_eq:NN \sys_if_engine_pdftex_p: \c_true_bool
+ \str_const:Nn \c_sys_engine_str { pdftex }
+ }
+\cs_if_exist:NT \ptex_kanjiskip:D
+ {
+ \bool_if:nTF
+ {
+ \cs_if_exist_p:N \uptex_disablecjktoken:D &&
+ \int_compare_p:nNn { \ptex_jis:D "2121 } = { "3000 }
+ }
+ {
+ \cs_gset_eq:NN \sys_if_engine_uptex:T \use:n
+ \cs_gset_eq:NN \sys_if_engine_uptex:F \use_none:n
+ \cs_gset_eq:NN \sys_if_engine_uptex:TF \use_i:nn
+ \cs_gset_eq:NN \sys_if_engine_uptex_p: \c_true_bool
+ \str_const:Nn \c_sys_engine_str { uptex }
+ }
+ {
+ \cs_gset_eq:NN \sys_if_engine_ptex:T \use:n
+ \cs_gset_eq:NN \sys_if_engine_ptex:F \use_none:n
+ \cs_gset_eq:NN \sys_if_engine_ptex:TF \use_i:nn
+ \cs_gset_eq:NN \sys_if_engine_ptex_p: \c_true_bool
+ \str_const:Nn \c_sys_engine_str { ptex }
+ }
+ }
+\cs_if_exist:NT \xetex_XeTeXversion:D
+ {
+ \cs_gset_eq:NN \sys_if_engine_xetex:T \use:n
+ \cs_gset_eq:NN \sys_if_engine_xetex:F \use_none:n
+ \cs_gset_eq:NN \sys_if_engine_xetex:TF \use_i:nn
+ \cs_gset_eq:NN \sys_if_engine_xetex_p: \c_true_bool
+ \str_const:Nn \c_sys_engine_str { xetex }
+ }
+\bool_if:nTF
+ {
+ \cs_if_exist_p:N \pdftex_pdfoutput:D
+ && \int_compare_p:nNn \pdftex_pdfoutput:D > \c_zero
+ }
+ {
+ \cs_new_eq:NN \sys_if_output_dvi:T \use_none:n
+ \cs_new_eq:NN \sys_if_output_dvi:F \use:n
+ \cs_new_eq:NN \sys_if_output_dvi:TF \use_ii:nn
+ \cs_new_eq:NN \sys_if_output_dvi_p: \c_false_bool
+ \cs_new_eq:NN \sys_if_output_pdf:T \use:n
+ \cs_new_eq:NN \sys_if_output_pdf:F \use_none:n
+ \cs_new_eq:NN \sys_if_output_pdf:TF \use_i:nn
+ \cs_new_eq:NN \sys_if_output_pdf_p: \c_true_bool
+ \str_const:Nn \c_sys_output_str { pdf }
+ }
+ {
+ \cs_new_eq:NN \sys_if_output_dvi:T \use:n
+ \cs_new_eq:NN \sys_if_output_dvi:F \use_none:n
+ \cs_new_eq:NN \sys_if_output_dvi:TF \use_i:nn
+ \cs_new_eq:NN \sys_if_output_dvi_p: \c_true_bool
+ \cs_new_eq:NN \sys_if_output_pdf:T \use_none:n
+ \cs_new_eq:NN \sys_if_output_pdf:F \use:n
+ \cs_new_eq:NN \sys_if_output_pdf:TF \use_ii:nn
+ \cs_new_eq:NN \sys_if_output_pdf_p: \c_false_bool
+ \str_const:Nn \c_sys_output_str { dvi }
+ }
+\prg_new_eq_conditional:NNn \luatex_if_engine: \sys_if_engine_luatex:
+ { T , F , TF , p }
+\prg_new_eq_conditional:NNn \xetex_if_engine: \sys_if_engine_xetex:
+ { T , F , TF , p }
+\bool_if:nTF
+ {
+ \sys_if_engine_luatex_p: ||
+ \sys_if_engine_xetex_p:
+ }
+ {
+ \cs_new_eq:NN \pdftex_if_engine:T \use_none:n
+ \cs_new_eq:NN \pdftex_if_engine:F \use:n
+ \cs_new_eq:NN \pdftex_if_engine:TF \use_ii:nn
+ \cs_new_eq:NN \pdftex_if_engine_p: \c_false_bool
+ }
+ {
+ \cs_new_eq:NN \pdftex_if_engine:T \use:n
+ \cs_new_eq:NN \pdftex_if_engine:F \use_none:n
+ \cs_new_eq:NN \pdftex_if_engine:TF \use_i:nn
+ \cs_new_eq:NN \pdftex_if_engine_p: \c_true_bool
+ }
+\cs_set_eq:NN \c_job_name_tl \c_sys_jobname_str
+%% File: l3candidates.dtx Copyright(C) 2012-2016 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
@@ -17014,7 +17148,7 @@
%%
%% -----------------------------------------------------------------------
%%
-\GetIdInfo$Id: l3candidates.dtx 6325 2015-12-20 18:07:35Z joseph $
+\GetIdInfo$Id: l3candidates.dtx 6376 2016-01-14 08:36:20Z joseph $
{L3 Experimental additions to l3kernel}
\cs_new_protected_nopar:Npn \cs_log:N
{ \__msg_log_next: \cs_show:N }
@@ -17999,7 +18133,7 @@
}
\cs_new:Npn \__tl_change_case_output:nwn #1#2 \__tl_change_case_result:n #3
{ #2 \__tl_change_case_result:n { #3 #1 } }
-\cs_generate_variant:Nn \__tl_change_case_output:nwn { V , o , f }
+\cs_generate_variant:Nn \__tl_change_case_output:nwn { V , o , v , f }
\cs_new:Npn \__tl_change_case_end:wn #1 \__tl_change_case_result:n #2
{
\group_align_safe_end:
@@ -18086,11 +18220,7 @@
\cs_new:Npn \__tl_change_case_N_type:Nnnn #1#2#3#4
{
\token_if_cs:NTF #1
- {
- \__tl_change_case_cs:Nnnn #1 {#3}
- { }
- { \__tl_change_case_cs:N #1 }
- }
+ { \__tl_change_case_cs_letterlike:Nnn #1 {#3} { } }
{ \__tl_change_case_char:Nnn #1 {#3} {#4} }
\__tl_change_case_loop:wnn #2 \q_recursion_stop {#3} {#4}
}
@@ -18104,18 +18234,38 @@
{ \__tl_change_case_char:nN {#2} #1 }
}
}
-\cs_new:Npn \__tl_change_case_char:nN #1#2
+\cs_if_exist:NTF \utex_char:D
+ {
+ \cs_new:Npn \__tl_change_case_char:nN #1#2
+ { \__tl_change_case_char_auxi:nN {#1} #2 }
+ }
+ {
+ \cs_new:Npn \__tl_change_case_char:nN #1#2
+ {
+ \int_compare:nNnTF { `#2 } > { "80 }
+ {
+ \int_compare:nNnTF { `#2 } < { "E0 }
+ { \__tl_change_case_char_UTFiix:nNNN {#1} #2 }
+ {
+ \int_compare:nNnTF { `#2 } < { "F0 }
+ { \__tl_change_case_char_UTFiix:nNNNN {#1} #2 }
+ { \__tl_change_case_char_UTFiix:nNNNNN {#1} #2 }
+ }
+ }
+ { \__tl_change_case_char_auxi:nN {#1} #2 }
+ }
+ }
+\cs_new:Npn \__tl_change_case_char_auxi:nN #1#2
{
\__tl_change_case_output:fwn
{
- \cs_if_exist:cTF { c__unicode_ #1 _ #2 _tl }
- { \tl_use:c { c__unicode_ #1 _ #2 _tl } }
- { \__tl_change_case_char_aux:nN {#1} #2 }
+ \cs_if_exist_use:cF { c__unicode_ #1 _ \token_to_str:N #2 _tl }
+ { \__tl_change_case_char_auxii:nN {#1} #2 }
}
}
\cs_if_exist:NTF \utex_char:D
{
- \cs_new:Npn \__tl_change_case_char_aux:nN #1#2
+ \cs_new:Npn \__tl_change_case_char_auxii:nN #1#2
{
\int_compare:nNnTF { \use:c { __tl_lookup_ #1 :N } #2 } = { 0 }
{ \exp_stop_f: #2 }
@@ -18128,73 +18278,60 @@
\cs_new_eq:NN \__tl_lookup_title:N \__tl_lookup_upper:N
}
{
- \cs_new:Npn \__tl_change_case_char_aux:nN #1#2 { \exp_stop_f: #2 }
- }
-\cs_new:Npn \__tl_change_case_cs:Nnnn #1#2
- {
- \exp_args:Nf \__tl_change_case_cs:nNnnn
- { \cs_to_str:N #1 } #1 {#2}
- }
-\cs_new:Npn \__tl_change_case_cs:nNnnn #1#2#3
- {
- \tl_if_head_eq_catcode:oNTF { \use_none:nnn #1 a a a a } a
- { \__tl_change_case_cs_type:Nnnnn #2 { latin } {#3} }
+ \cs_new:Npn \__tl_change_case_char_auxii:nN #1#2 { \exp_stop_f: #2 }
+ \cs_new:Npn \__tl_change_case_char_UTFiix:nNNN #1#2#3#4
+ { \__tl_change_case_char_UTFiix:nnN {#1} {#2#4} #3 }
+ \cs_new:Npn \__tl_change_case_char_UTFiix:nNNNN #1#2#3#4#5
+ { \__tl_change_case_char_UTFiix:nnN {#1} {#2#4#5} #3 }
+ \cs_new:Npn \__tl_change_case_char_UTFiix:nNNNNN #1#2#3#4#5#6
+ { \__tl_change_case_char_UTFiix:nnN {#1} {#2#4#5#6} #3 }
+ \cs_new:Npn \__tl_change_case_char_UTFiix:nnN #1#2#3
{
- \str_if_eq_x:nnTF
- { \__tl_change_case_cs_three:NNNw #1 \q_nil }
- { \str_if_eq:nnTF {#3} { lower } { CYR } { cyr } }
- { \__tl_change_case_cs_cyr:NnNNNNw #2 {#3} #1 \q_stop }
+ \cs_if_exist:cTF { c__unicode_ #1 _ \tl_to_str:n {#2} _tl }
{
- \str_if_eq_x:nnTF
- { \__tl_change_case_cs_three:NNNw #1 \q_nil }
- { acc }
- { \__tl_change_case_cs_type:Nnnnn #2 { acc } {#3} }
- {
- \str_if_eq_x:nnTF
- { \__tl_change_case_cs_four:NNNNw #1 \q_nil }
- { text }
- { \__tl_change_case_cs_type:Nnnnn #2 { greek } {#3} }
- { \__tl_change_case_cs_type:Nnnnn #2 { misc } {#3} }
- }
+ \__tl_change_case_output:vwn
+ { c__unicode_ #1 _ \tl_to_str:n {#2} _tl }
}
+ { \__tl_change_case_output:nwn {#2} }
+ #3
}
}
-\cs_new:Npn \__tl_change_case_cs_three:NNNw #1#2#3#4 \q_nil { #1#2#3 }
-\cs_new:Npn \__tl_change_case_cs_four:NNNNw #1#2#3#4#5 \q_nil { #1#2#3#4 }
-\cs_new:Npn \__tl_change_case_cs_cyr:NnNNNNw #1#2#3#4#5#6#7 \q_stop
+\cs_new:Npn \__tl_change_case_cs_letterlike:Nnn #1#2#3
{
- \__tl_change_case_cs_type:Nnnnn #1
- { cyrillic }
+ \cs_if_exist:cTF { c__tl_change_case_ #2 _ \token_to_str:N #1 _tl }
{
- #2 _
- \int_to_roman:n
- {
- 1 +
- \int_div_truncate:nn
- {
- `#6 - \str_if_eq:nnTF {#2} { lower } { `A } { `a }
- }
- { 7 }
- }
+ \__tl_change_case_output:vwn
+ { c__tl_change_case_ #2 _ \token_to_str:N #1 _tl }
+ #3
}
- }
-\cs_new:Npn \__tl_change_case_cs_type:Nnnnn #1#2#3
- {
- \exp_args:Nf \__tl_change_case_cs_type:nnn
{
- \str_case:nvF #1
- { c__tl_change_case_ #2 _ #3 _ tl }
- { \exp_stop_f: }
+ \cs_if_exist:cTF
+ {
+ c__tl_change_case_
+ \str_if_eq:nnTF {#2} { lower } { upper } { lower }
+ _ \token_to_str:N #1 _tl
+ }
+ {
+ \__tl_change_case_output:nwn {#1}
+ #3
+ }
+ {
+ \exp_after:wN \__tl_change_case_cs_accents:NN
+ \exp_after:wN #1 \l_tl_case_change_accents_tl
+ \q_recursion_tail \q_recursion_stop
+ }
}
}
-\cs_new:Npn \__tl_change_case_cs_type:nnn #1#2#3
+\cs_new:Npn \__tl_change_case_cs_accents:NN #1#2
{
- \tl_if_blank:nTF {#1}
- {#3}
+ \quark_if_recursion_tail_stop_do:Nn #2
+ { \__tl_change_case_cs:N #1 }
+ \str_if_eq:nnTF {#1} {#2}
{
- \__tl_change_case_output:nwn {#1}
- #2
+ \use_i_delimit_by_q_recursion_stop:nw
+ { \__tl_change_case_output:nwn {#1} }
}
+ { \__tl_change_case_cs_accents:NN #1 }
}
\cs_new:Npn \__tl_change_case_cs:N #1
{
@@ -18274,40 +18411,67 @@
}
}
\cs_new_eq:NN \__tl_change_case_upper_sigma:Nnw \use_ii:nn
-\cs_new:Npn \__tl_change_case_lower_tr:Nnw #1#2
+\cs_if_exist:NTF \utex_char:D
{
- \int_compare:nNnTF { `#1 } = { "0049 }
- { \__tl_change_case_lower_tr_auxi:Nw }
+ \cs_new:Npn \__tl_change_case_lower_tr:Nnw #1#2
{
- \int_compare:nNnTF { `#1 } = { "0130 }
- { \__tl_change_case_output:nwn { i } }
- {#2}
+ \int_compare:nNnTF { `#1 } = { "0049 }
+ { \__tl_change_case_lower_tr_auxi:Nw }
+ {
+ \int_compare:nNnTF { `#1 } = { "0130 }
+ { \__tl_change_case_output:nwn { i } }
+ {#2}
+ }
}
- }
-\cs_new:Npn \__tl_change_case_lower_tr_auxi:Nw #1#2 \q_recursion_stop
- {
- \tl_if_head_is_N_type:nTF {#2}
- { \__tl_change_case_lower_tr_auxii:Nw #2 \q_recursion_stop }
- { \__tl_change_case_output:Vwn \c__unicode_dotless_i_tl }
- #1 #2 \q_recursion_stop
- }
-\cs_new:Npn \__tl_change_case_lower_tr_auxii:Nw #1#2 \q_recursion_stop
- {
- \__tl_change_case_if_expandable:NTF #1
+ \cs_new:Npn \__tl_change_case_lower_tr_auxi:Nw #1#2 \q_recursion_stop
{
- \exp_after:wN \__tl_change_case_lower_tr_auxi:Nw #1
- #2 \q_recursion_stop
+ \tl_if_head_is_N_type:nTF {#2}
+ { \__tl_change_case_lower_tr_auxii:Nw #2 \q_recursion_stop }
+ { \__tl_change_case_output:Vwn \c__unicode_dotless_i_tl }
+ #1 #2 \q_recursion_stop
}
+ \cs_new:Npn \__tl_change_case_lower_tr_auxii:Nw #1#2 \q_recursion_stop
{
- \bool_if:nTF
+ \__tl_change_case_if_expandable:NTF #1
{
- \token_if_cs_p:N #1
- || ! ( \int_compare_p:nNn { `#1 } = { "0307 } )
+ \exp_after:wN \__tl_change_case_lower_tr_auxi:Nw #1
+ #2 \q_recursion_stop
+ }
+ {
+ \bool_if:nTF
+ {
+ \token_if_cs_p:N #1
+ || ! ( \int_compare_p:nNn { `#1 } = { "0307 } )
+ }
+ { \__tl_change_case_output:Vwn \c__unicode_dotless_i_tl }
+ {
+ \__tl_change_case_output:nwn { i }
+ \use_i:nn
+ }
}
+ }
+ }
+ {
+ \cs_new:Npn \__tl_change_case_lower_tr:Nnw #1#2
+ {
+ \int_compare:nNnTF { `#1 } = { "0049 }
{ \__tl_change_case_output:Vwn \c__unicode_dotless_i_tl }
{
+ \int_compare:nNnTF { `#1 } = { 196 }
+ { \__tl_change_case_lower_tr_auxi:Nw #1 {#2} }
+ {#2}
+ }
+ }
+ \cs_new:Npn \__tl_change_case_lower_tr_auxi:Nw #1#2#3#4
+ {
+ \int_compare:nNnTF { `#4 } = { 176 }
+ {
\__tl_change_case_output:nwn { i }
- \use_i:nn
+ #3
+ }
+ {
+ #2
+ #3 #4
}
}
}
@@ -18434,6 +18598,45 @@
{ \__tl_change_case_output:Vwn \c__unicode_upper_Eszett_tl }
{#2}
}
+\cs_new:Npn \__unicode_codepoint_to_UTFiix:n #1
+ {
+ \exp_args:Nf \__unicode_codepoint_to_UTFiix_auxi:n
+ { \int_eval:n {#1} }
+ }
+\cs_new:Npn \__unicode_codepoint_to_UTFiix_auxi:n #1
+ {
+ \if_int_compare:w #1 > "80 ~
+ \if_int_compare:w #1 < "800 ~
+ 2
+ \__unicode_codepoint_to_UTFiix_auxii:Nnn C {#1} { 64 }
+ \__unicode_codepoint_to_UTFiix_auxiii:n {#1}
+ \else:
+ \if_int_compare:w #1 < "10000 ~
+ 3
+ \__unicode_codepoint_to_UTFiix_auxii:Nnn E {#1} { 64 * 64 }
+ \__unicode_codepoint_to_UTFiix_auxiii:n {#1}
+ \__unicode_codepoint_to_UTFiix_auxiii:n
+ { \int_div_truncate:nn {#1} { 64 } }
+ \else:
+ 4
+ \__unicode_codepoint_to_UTFiix_auxii:Nnn F
+ {#1} { 64 * 64 * 64 }
+ \__unicode_codepoint_to_UTFiix_auxiii:n
+ { \int_div_truncate:nn {#1} { 64 * 64 } }
+ \__unicode_codepoint_to_UTFiix_auxiii:n
+ { \int_div_truncate:nn {#1} { 64 } }
+ \__unicode_codepoint_to_UTFiix_auxiii:n {#1}
+
+ \fi:
+ \fi:
+ \else:
+ 1 {#1}
+ \fi:
+ }
+\cs_new:Npn \__unicode_codepoint_to_UTFiix_auxii:Nnn #1#2#3
+ { { \int_eval:n { "#10 + \int_div_truncate:nn {#2} {#3} } } }
+\cs_new:Npn \__unicode_codepoint_to_UTFiix_auxiii:n #1
+ { { \int_eval:n { \int_mod:nn {#1} { 64 } + 128 } } }
\cs_if_exist:NTF \utex_char:D
{
\tl_const:Nx \c__unicode_std_sigma_tl { \utex_char:D "03C3 ~ }
@@ -18448,23 +18651,232 @@
{ \utex_char:D "0069 ~ \utex_char:D "0307 ~ \utex_char:D "0303 ~ }
}
\tl_const:Nx \c__unicode_dot_above_tl { \utex_char:D "0307 ~ }
- \tl_const:Nx \c__unicode_dotless_i_tl { \utex_char:D "0131 ~ }
- \tl_const:Nx \c__unicode_dotted_I_tl { \utex_char:D "0130 ~ }
- \tl_const:Nx \c__unicode_i_ogonek_tl { \utex_char:D "012F ~ }
- \tl_const:Nx \c__unicode_I_ogonek_tl { \utex_char:D "012E ~ }
\tl_const:Nx \c__unicode_upper_Eszett_tl { \utex_char:D "1E9E ~}
}
{
- \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 { }
+ \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_upper_Eszett_tl { }
}
+\group_begin:
+ \cs_if_exist:NTF \utex_char:D
+ {
+ \cs_set_protected:Npn \__tl_tmp:w #1#2
+ { \tl_const:Nx #1 { \utex_char:D "#2 ~ } }
+ }
+ {
+ \char_set_catcode_active:N .
+ \char_set_catcode_active:N !
+ \cs_set_protected:Npn \__tl_tmp:w #1#2
+ {
+ \group_begin:
+ \cs_set_protected:Npn \__tl_tmp:w ##1##2##3
+ {
+ \char_set_lccode:nn { `\. } {##2}
+ \char_set_lccode:nn { `\! } {##3}
+ \tex_lowercase:D
+ { \tl_const:Nn #1 { . ! } }
+ }
+ \tl_set:Nx \l__tl_internal_a_tl
+ { \__unicode_codepoint_to_UTFiix:n {"#2} }
+ \exp_after:wN \__tl_tmp:w \l__tl_internal_a_tl
+ \group_end:
+ }
+ }
+ \__tl_tmp:w \c__unicode_dotless_i_tl { 0131 }
+ \__tl_tmp:w \c__unicode_dotted_I_tl { 0130 }
+ \__tl_tmp:w \c__unicode_i_ogonek_tl { 012F }
+ \__tl_tmp:w \c__unicode_I_ogonek_tl { 012E }
+\group_end:
+\group_begin:
+ \char_set_catcode_active:N .
+ \char_set_catcode_active:N !
+ \char_set_catcode_active:N ;
+ \char_set_catcode_active:N ,
+ \bool_if:nT
+ {
+ \sys_if_engine_pdftex_p: || \sys_if_engine_uptex_p:
+ }
+ {
+ \cs_set_protected:Npn \__tl_loop:nn #1#2
+ {
+ \quark_if_recursion_tail_stop:n {#1}
+ \tl_set:Nx \l__tl_internal_a_tl
+ {
+ \__unicode_codepoint_to_UTFiix:n {"#1}
+ \__unicode_codepoint_to_UTFiix:n {"#2}
+ }
+ \exp_after:wN \__tl_tmp:w \l__tl_internal_a_tl
+ \__tl_loop:nn
+ }
+ \cs_set_protected:Npn \__tl_tmp:w #1#2#3#4#5#6
+ {
+ \char_set_lccode:nn { `\. } {#2}
+ \char_set_lccode:nn { `\! } {#3}
+ \char_set_lccode:nn { `\; } {#5}
+ \char_set_lccode:nn { `\, } {#6}
+ \tex_lowercase:D
+ {
+ \tl_const:cn { c__unicode_lower_ \tl_to_str:n { . ! } _tl }
+ { ; , }
+ \tl_const:cn { c__unicode_upper_ \tl_to_str:n { ; , } _tl }
+ { . ! }
+ }
+ }
+ \__tl_loop:nn
+ { 00C0 } { 00E0 }
+ { 00C2 } { 00E2 }
+ { 00C3 } { 00E3 }
+ { 00C4 } { 00E4 }
+ { 00C5 } { 00E5 }
+ { 00C6 } { 00E6 }
+ { 00C7 } { 00E7 }
+ { 00C8 } { 00E8 }
+ { 00C9 } { 00E9 }
+ { 00CA } { 00EA }
+ { 00CB } { 00EB }
+ { 00CC } { 00EC }
+ { 00CD } { 00ED }
+ { 00CE } { 00EE }
+ { 00CF } { 00EF }
+ { 00D0 } { 00F0 }
+ { 00D1 } { 00F1 }
+ { 00D2 } { 00F2 }
+ { 00D3 } { 00F3 }
+ { 00D4 } { 00F4 }
+ { 00D5 } { 00F5 }
+ { 00D6 } { 00F6 }
+ { 00D8 } { 00F8 }
+ { 00D9 } { 00F9 }
+ { 00DA } { 00FA }
+ { 00DB } { 00FB }
+ { 00DC } { 00FC }
+ { 00DD } { 00FD }
+ { 00DE } { 00FE }
+ { 0100 } { 0101 }
+ { 0102 } { 0103 }
+ { 0104 } { 0105 }
+ { 0106 } { 0107 }
+ { 0108 } { 0109 }
+ { 010A } { 010B }
+ { 010C } { 010D }
+ { 010E } { 010F }
+ { 0110 } { 0111 }
+ { 0112 } { 0113 }
+ { 0114 } { 0115 }
+ { 0116 } { 0117 }
+ { 0118 } { 0119 }
+ { 011A } { 011B }
+ { 011C } { 011D }
+ { 011E } { 011F }
+ { 0120 } { 0121 }
+ { 0122 } { 0123 }
+ { 0124 } { 0125 }
+ { 0128 } { 0129 }
+ { 012A } { 012B }
+ { 012C } { 012D }
+ { 012E } { 012F }
+ { 0132 } { 0133 }
+ { 0134 } { 0135 }
+ { 0136 } { 0137 }
+ { 0139 } { 013A }
+ { 013B } { 013C }
+ { 013E } { 013F }
+ { 0141 } { 0142 }
+ { 0143 } { 0144 }
+ { 0145 } { 0146 }
+ { 0147 } { 0148 }
+ { 014A } { 014B }
+ { 014C } { 014D }
+ { 014E } { 014F }
+ { 0150 } { 0151 }
+ { 0152 } { 0153 }
+ { 0154 } { 0155 }
+ { 0156 } { 0157 }
+ { 0158 } { 0159 }
+ { 015A } { 015B }
+ { 015C } { 015D }
+ { 015E } { 015F }
+ { 0160 } { 0161 }
+ { 0162 } { 0163 }
+ { 0164 } { 0165 }
+ { 0168 } { 0169 }
+ { 016A } { 016B }
+ { 016C } { 016D }
+ { 016E } { 016F }
+ { 0170 } { 0171 }
+ { 0172 } { 0173 }
+ { 0174 } { 0175 }
+ { 0176 } { 0177 }
+ { 0178 } { 00FF }
+ { 0179 } { 017A }
+ { 017B } { 017C }
+ { 017D } { 017E }
+ { 01CD } { 01CE }
+ { 01CF } { 01D0 }
+ { 01D1 } { 01D2 }
+ { 01D3 } { 01D4 }
+ { 01E2 } { 01E3 }
+ { 01E6 } { 01E7 }
+ { 01E8 } { 01E9 }
+ { 01EA } { 01EB }
+ { 01F4 } { 01F5 }
+ { 0218 } { 0219 }
+ { 021A } { 021B }
+ \q_recursion_tail ?
+ \q_recursion_stop
+ \cs_set_protected:Npn \__tl_tmp:w #1#2#3
+ {
+ \group_begin:
+ \cs_set_protected:Npn \__tl_tmp:w ##1##2##3
+ {
+ \char_set_lccode:nn { `\. } {##2}
+ \char_set_lccode:nn { `\! } {##3}
+ \tex_lowercase:D
+ {
+ \tl_const:cn
+ { c__unicode_ #3 _ \tl_to_str:n { . ! } _tl }
+ }
+ { #2 }
+ }
+ \tl_set:Nx \l__tl_internal_a_tl
+ { \__unicode_codepoint_to_UTFiix:n { "#1 } }
+ \exp_after:wN \__tl_tmp:w \l__tl_internal_a_tl
+ \group_end:
+ }
+ \__tl_tmp:w { 00DF } { SS } { upper }
+ \__tl_tmp:w { 00DF } { Ss } { title }
+ \__tl_tmp:w { 0131 } { I } { upper }
+ }
+ \group_end:
+\group_begin:
+ \cs_set_protected:Npn \__tl_change_case_setup:NN #1#2
+ {
+ \quark_if_recursion_tail_stop:N #1
+ \tl_const:cn { c__tl_change_case_lower_ \token_to_str:N #1 _tl } { #2 }
+ \tl_const:cn { c__tl_change_case_upper_ \token_to_str:N #2 _tl } { #1 }
+ \__tl_change_case_setup:NN
+ }
+ \__tl_change_case_setup:NN
+ \AA \aa
+ \AE \ae
+ \DH \dh
+ \DJ \dj
+ \L \l
+ \NG \ng
+ \O \o
+ \OE \oe
+ \SS \ss
+ \TH \th
+ \q_recursion_tail ?
+ \q_recursion_stop
+ \tl_const:cn { c__tl_change_case_upper_ \token_to_str:N \i _tl } { I }
+ \tl_const:cn { c__tl_change_case_upper_ \token_to_str:N \j _tl } { J }
+\group_end:
+\tl_new:N \l_tl_case_change_accents_tl
+\tl_set:Nn \l_tl_case_change_accents_tl { \" \^ \' \` \. \c \u \~ \H \v }
\cs_new:Npn \__tl_mixed_case:nn #1#2
{
\etex_unexpanded:D \exp_after:wN
@@ -18534,21 +18946,17 @@
{
\token_if_cs:NTF #1
{
- \__tl_change_case_cs:Nnnn #1 { upper }
- {
- \__tl_change_case_loop:wnn
- #2 \q_recursion_stop { lower } {#3}
- }
- {
- \__tl_change_case_cs:N #1
- \__tl_mixed_case_loop:wn #2 \q_recursion_stop {#3}
- }
+ \__tl_change_case_cs_letterlike:Nnn #1 { upper }
+ { \__tl_mixed_case_letterlike:Nw }
+ \__tl_mixed_case_loop:wn #2 \q_recursion_stop {#3}
}
{
\__tl_mixed_case_char:Nn #1 {#3}
\__tl_change_case_loop:wnn #2 \q_recursion_stop { lower } {#3}
}
}
+\cs_new:Npn \__tl_mixed_case_letterlike:Nw #1#2 \q_recursion_stop
+ { \__tl_change_case_loop:wnn #2 \q_recursion_stop { lower } }
\cs_new:Npn \__tl_mixed_case_char:Nn #1#2
{
\cs_if_exist_use:cF { __tl_change_case_mixed_ #2 :Nnw }
@@ -18650,255 +19058,6 @@
`
-
}
-\group_begin:
- \cs_set_protected:Npn \__tl_change_case_setup:nnnn #1#2#3#4
- {
- \tl_const:cx { c__tl_change_case_ #1 _upper #2 _tl }
- {
- \__tl_change_case_map:NN
- #3 \q_recursion_tail ? \q_recursion_stop
- }
- \tl_const:cx { c__tl_change_case_ #1 _lower #2 _tl }
- {
- \__tl_change_case_map:NNN #4
- #3 \q_recursion_tail ? \q_recursion_stop
- }
- }
- \cs_set:Npn \__tl_change_case_map:NN #1#2
- {
- \quark_if_recursion_tail_stop:N #1
- \exp_not:N #1 \exp_not:n { { \exp_stop_f: #2 } }
- \__tl_change_case_map:NN
- }
- \cs_set:Npn \__tl_change_case_map:NNN #1#2#3
- {
- \str_if_eq:nnT {#1} {#2}
- { \use_none_delimit_by_q_recursion_stop:w }
- \exp_not:N #3 \exp_not:n { { \exp_stop_f: #2 } }
- \__tl_change_case_map:NNN #1
- }
- \__tl_change_case_setup:nnnn
- { latin }
- { }
- {
- \aa \AA
- \ae \AE
- \dh \DH
- \dj \DJ
- \l \L
- \ng \NG
- \o \O
- \oe \OE
- \ss \SS
- \th \TH
- \i I
- \j J
- }
- { \i }
- \__tl_change_case_setup:nnnn
- { cyrillic }
- { _i }
- {
- \cyra \CYRA
- \cyrabhch \CYRABHCH
- \cyrabhchdsc \CYRABHCHDSC
- \cyrabhdze \CYRABHDZE
- \cyrabhha \CYRABHHA
- \cyrae \CYRAE
- \cyrb \CYRB
- \cyrbyus \CYRBYUS
- \cyrc \CYRC
- \cyrch \CYRCH
- \cyrchldsc \CYRCHLDSC
- \cyrchrdsc \CYRCHRDSC
- \cyrchvcrs \CYRCHVCRS
- \cyrd \CYRD
- \cyrdelta \CYRDELTA
- \cyrdje \CYRDJE
- \cyrdze \CYRDZE
- \cyrdzhe \CYRDZHE
- \cyre \CYRE
- \cyreps \CYREPS
- \cyrerev \CYREREV
- \cyrery \CYRERY
- \cyrf \CYRF
- \cyrfita \CYRFITA
- \cyrg \CYRG
- \cyrgdsc \CYRGDSC
- \cyrgdschcrs \CYRGDSCHCRS
- \cyrghcrs \CYRGHCRS
- \cyrghk \CYRGHK
- \cyrgup \CYRGUP
- }
- { \q_recursion_tail }
- \__tl_change_case_setup:nnnn
- { cyrillic }
- { _ii }
- {
- \cyrh \CYRH
- \cyrhdsc \CYRHDSC
- \cyrhhcrs \CYRHHCRS
- \cyrhhk \CYRHHK
- \cyrhrdsn \CYRHRDSN
- \cyri \CYRI
- \cyrie \CYRIE
- \cyrii \CYRII
- \cyrishrt \CYRISHRT
- \cyrishrtdsc \CYRISHRTDSC
- \cyrizh \CYRIZH
- \cyrje \CYRJE
- \cyrk \CYRK
- \cyrkbeak \CYRKBEAK
- \cyrkdsc \CYRKDSC
- \cyrkhcrs \CYRKHCRS
- \cyrkhk \CYRKHK
- \cyrkvcrs \CYRKVCRS
- \cyrl \CYRL
- \cyrldsc \CYRLDSC
- \cyrlhk \CYRLHK
- \cyrlje \CYRLJE
- \cyrm \CYRM
- \cyrmdsc \CYRMDSC
- \cyrmhk \CYRMHK
- \cyrn \CYRN
- \cyrndsc \CYRNDSC
- \cyrng \CYRNG
- \cyrnhk \CYRNHK
- \cyrnje \CYRNJE
- \cyrnlhk \CYRNLHK
- }
- { \q_recursion_tail }
- \__tl_change_case_setup:nnnn
- { cyrillic }
- { _iii }
- {
- \cyro \CYRO
- \cyrotld \CYROTLD
- \cyrp \CYRP
- \cyrphk \CYRPHK
- \cyrq \CYRQ
- \cyrr \CYRR
- \cyrrdsc \CYRRDSC
- \cyrrhk \CYRRHK
- \cyrrtick \CYRRTICK
- \cyrs \CYRS
- \cyrsacrs \CYRSACRS
- \cyrschwa \CYRSCHWA
- \cyrsdsc \CYRSDSC
- \cyrsemisftsn \CYRSEMISFTSN
- \cyrsftsn \CYRSFTSN
- \cyrsh \CYRSH
- \cyrshch \CYRSHCH
- \cyrshha \CYRSHHA
- \cyrt \CYRT
- \cyrtdsc \CYRTDSC
- \cyrtetse \CYRTETSE
- \cyrtshe \CYRTSHE
- \cyru \CYRU
- \cyrushrt \CYRUSHRT
- }
- { \q_recursion_tail }
- \__tl_change_case_setup:nnnn
- { cyrillic }
- { _iv }
- {
- \cyrv \CYRV
- \cyrw \CYRW
- \cyry \CYRY
- \cyrya \CYRYA
- \cyryat \CYRYAT
- \cyryhcrs \CYRYHCRS
- \cyryi \CYRYI
- \cyryo \CYRYO
- \cyryu \CYRYU
- \cyrz \CYRZ
- \cyrzdsc \CYRZDSC
- \cyrzh \CYRZH
- \cyrzhdsc \CYRZHDSC
- }
- { \q_recursion_tail }
- \__tl_change_case_setup:nnnn
- { greek }
- { }
- {
- \textalpha \textAlpha
- \textbeta \textBeta
- \textchi \textChi
- \textdelta \textDelta
- \textdigamma \textDigamma
- \texteta \textEta
- \textepsilon \textEpsilon
- \textgamma \textGamma
- \textiota \textIota
- \textkappa \textKappa
- \textlambda \textLambda
- \textmu \textMu
- \textnu \textNu
- \textomega \textOmega
- \textomicron \textOmicron
- \textphi \textPhi
- \textpi \textPi
- \textpsi \textPsi
- \textqoppa \textQoppa
- \textrho \textRho
- \textsampi \textSampi
- \textautosigma \textSigma
- \textstigma \textStigma
- \texttheta \textTheta
- \texttau \textTau
- \textupsilon \textUpsilon
- \textxi \textXi
- \textzeta \textZeta
- \textsigma \textSigma
- \textvarsigma \textSigma
- \textvarstigma \textStigma
- }
- { \textsigma }
- \tl_const:Nn \c__tl_change_case_acc_upper_tl
- {
- \accdasia { \exp_stop_f: \LGR@accdropped }
- \accdasiaoxia { \exp_stop_f: \LGR@hiatus }
- \accdasiavaria { \exp_stop_f: \LGR@accdropped }
- \accdasiaperispomeni { \exp_stop_f: \LGR@accdropped }
- \accpsili { \exp_stop_f: \LGR@hiatus }
- \accpsilioxia { \exp_stop_f: \LGR@hiatus }
- \accpsilivaria { \exp_stop_f: \LGR@hiatus }
- \accpsiliperispomeni { \exp_stop_f: \LGR@accdropped }
- \acctonos { \exp_stop_f: \LGR@hiatus }
- \accvaria { \exp_stop_f: \LGR@accdropped }
- \accdialytikatonos { \exp_stop_f: \LGR@accDialytika }
- \accdialytikavaria { \exp_stop_f: \LGR@accDialytika }
- \accdialytikaperispomeni { \exp_stop_f: \LGR@accDialytika }
- \accperispomeni { \exp_stop_f: \LGR@accdropped }
- }
- \tl_const:Nn \c__tl_change_case_acc_lower_tl { }
- \tl_const:Nn \c__tl_change_case_misc_upper_tl
- {
- \ypogegrammeni { \exp_stop_f: \prosgegrammeni }
- \abreve { \exp_stop_f: \Abreve }
- \acircumflex { \exp_stop_f: \Acircumflex }
- \ecircumflex { \exp_stop_f: \Ecircumflex }
- \ocircumflex { \exp_stop_f: \Ocircumflex }
- \ohorn { \exp_stop_f: \Ohorn }
- \uhorn { \exp_stop_f: \Uhorn }
- }
- \tl_const:Nn \c__tl_change_case_misc_lower_tl
- {
- \prosgegrammeni { \exp_stop_f: \ypogegrammeni }
- \Abreve { \exp_stop_f: \abreve }
- \Acircumflex { \exp_stop_f: \acircumflex }
- \Ecircumflex { \exp_stop_f: \ecircumflex }
- \Ocircumflex { \exp_stop_f: \ocircumflex }
- \Ohorn { \exp_stop_f: \ohorn }
- \Uhorn { \exp_stop_f: \uhorn }
- \ABREVE { \exp_stop_f: \abreve }
- \ACIRCUMFLEX { \exp_stop_f: \acircumflex }
- \ECIRCUMFLEX { \exp_stop_f: \ecircumflex }
- \OCIRCUMFLEX { \exp_stop_f: \ocircumflex }
- \OHORN { \exp_stop_f: \ohorn }
- \UHORN { \exp_stop_f: \uhorn }
- }
-\group_end:
\cs_new_protected_nopar:Npn \tl_log:N
{ \__msg_log_next: \tl_show:N }
\cs_generate_variant:Nn \tl_log:N { c }
@@ -19096,150 +19255,6 @@
{ \__peek_token_generic:NNT \__peek_execute_branches_N_type: \scan_stop: }
\cs_new_protected_nopar:Npn \peek_N_type:F
{ \__peek_token_generic:NNF \__peek_execute_branches_N_type: \scan_stop: }
-%% File: l3sys.dtx Copyright (C) 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
-%% 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 "l3kernel 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 LaTeX3 Project.
-%%
-%% -----------------------------------------------------------------------
-\GetIdInfo$Id: l3sys.dtx 6087 2015-09-25 10:29:53Z joseph $
- {L3 Experimental system/runtime functions}
-\str_const:Nx \c_sys_jobname_str { \tex_jobname:D }
-\int_const:Nn \c_sys_minute_int
- { \int_mod:nn { \tex_time:D } { 60 } }
-\int_const:Nn \c_sys_hour_int
- { \int_div_truncate:nn { \tex_time:D } { 60 } }
-\int_const:Nn \c_sys_day_int { \tex_day:D }
-\int_const:Nn \c_sys_month_int { \tex_month:D }
-\int_const:Nn \c_sys_year_int { \tex_year:D }
-\clist_map_inline:nn { lua , pdf , p , up , xe }
- {
- \cs_new_eq:cN { sys_if_engine_ #1 tex:T } \use_none:n
- \cs_new_eq:cN { sys_if_engine_ #1 tex:F } \use:n
- \cs_new_eq:cN { sys_if_engine_ #1 tex:TF } \use_ii:nn
- \cs_new_eq:cN { sys_if_engine_ #1 tex_p: } \c_false_bool
- }
-\cs_if_exist:NT \luatex_luatexversion:D
- {
- \cs_gset_eq:NN \sys_if_engine_luatex:T \use:n
- \cs_gset_eq:NN \sys_if_engine_luatex:F \use_none:n
- \cs_gset_eq:NN \sys_if_engine_luatex:TF \use_i:nn
- \cs_gset_eq:NN \sys_if_engine_luatex_p: \c_true_bool
- \str_const:Nn \c_sys_engine_str { luatex }
- }
-\cs_if_exist:NT \pdftex_pdftexversion:D
- {
- \cs_gset_eq:NN \sys_if_engine_pdftex:T \use:n
- \cs_gset_eq:NN \sys_if_engine_pdftex:F \use_none:n
- \cs_gset_eq:NN \sys_if_engine_pdftex:TF \use_i:nn
- \cs_gset_eq:NN \sys_if_engine_pdftex_p: \c_true_bool
- \str_const:Nn \c_sys_engine_str { pdftex }
- }
-\cs_if_exist:NT \ptex_kanjiskip:D
- {
- \bool_if:nTF
- {
- \cs_if_exist_p:N \uptex_disablecjktoken:D &&
- \int_compare_p:nNn { \ptex_jis:D "2121 } = { "3000 }
- }
- {
- \cs_gset_eq:NN \sys_if_engine_uptex:T \use:n
- \cs_gset_eq:NN \sys_if_engine_uptex:F \use_none:n
- \cs_gset_eq:NN \sys_if_engine_uptex:TF \use_i:nn
- \cs_gset_eq:NN \sys_if_engine_uptex_p: \c_true_bool
- \str_const:Nn \c_sys_engine_str { uptex }
- }
- {
- \cs_gset_eq:NN \sys_if_engine_ptex:T \use:n
- \cs_gset_eq:NN \sys_if_engine_ptex:F \use_none:n
- \cs_gset_eq:NN \sys_if_engine_ptex:TF \use_i:nn
- \cs_gset_eq:NN \sys_if_engine_ptex_p: \c_true_bool
- \str_const:Nn \c_sys_engine_str { ptex }
- }
- }
-\cs_if_exist:NT \xetex_XeTeXversion:D
- {
- \cs_gset_eq:NN \sys_if_engine_xetex:T \use:n
- \cs_gset_eq:NN \sys_if_engine_xetex:F \use_none:n
- \cs_gset_eq:NN \sys_if_engine_xetex:TF \use_i:nn
- \cs_gset_eq:NN \sys_if_engine_xetex_p: \c_true_bool
- \str_const:Nn \c_sys_engine_str { xetex }
- }
-\bool_if:nTF
- {
- \cs_if_exist_p:N \pdftex_pdfoutput:D
- && \int_compare_p:nNn \pdftex_pdfoutput:D > \c_zero
- }
- {
- \cs_new_eq:NN \sys_if_output_dvi:T \use_none:n
- \cs_new_eq:NN \sys_if_output_dvi:F \use:n
- \cs_new_eq:NN \sys_if_output_dvi:TF \use_ii:nn
- \cs_new_eq:NN \sys_if_output_dvi_p: \c_false_bool
- \cs_new_eq:NN \sys_if_output_pdf:T \use:n
- \cs_new_eq:NN \sys_if_output_pdf:F \use_none:n
- \cs_new_eq:NN \sys_if_output_pdf:TF \use_i:nn
- \cs_new_eq:NN \sys_if_output_pdf_p: \c_true_bool
- \str_const:Nn \c_sys_output_str { pdf }
- }
- {
- \cs_new_eq:NN \sys_if_output_dvi:T \use:n
- \cs_new_eq:NN \sys_if_output_dvi:F \use_none:n
- \cs_new_eq:NN \sys_if_output_dvi:TF \use_i:nn
- \cs_new_eq:NN \sys_if_output_dvi_p: \c_true_bool
- \cs_new_eq:NN \sys_if_output_pdf:T \use_none:n
- \cs_new_eq:NN \sys_if_output_pdf:F \use:n
- \cs_new_eq:NN \sys_if_output_pdf:TF \use_ii:nn
- \cs_new_eq:NN \sys_if_output_pdf_p: \c_false_bool
- \str_const:Nn \c_sys_output_str { dvi }
- }
-\prg_new_eq_conditional:NNn \luatex_if_engine: \sys_if_engine_luatex:
- { T , F , TF , p }
-\prg_new_eq_conditional:NNn \xetex_if_engine: \sys_if_engine_xetex:
- { T , F , TF , p }
-\bool_if:nTF
- {
- \sys_if_engine_luatex_p: ||
- \sys_if_engine_xetex_p:
- }
- {
- \cs_new_eq:NN \pdftex_if_engine:T \use_none:n
- \cs_new_eq:NN \pdftex_if_engine:F \use:n
- \cs_new_eq:NN \pdftex_if_engine:TF \use_ii:nn
- \cs_new_eq:NN \pdftex_if_engine_p: \c_false_bool
- }
- {
- \cs_new_eq:NN \pdftex_if_engine:T \use:n
- \cs_new_eq:NN \pdftex_if_engine:F \use_none:n
- \cs_new_eq:NN \pdftex_if_engine:TF \use_i:nn
- \cs_new_eq:NN \pdftex_if_engine_p: \c_true_bool
- }
-\cs_set_eq:NN \c_job_name_tl \c_sys_jobname_str
%% File: l3luatex.dtx Copyright (C) 2010-2015 The LaTeX3 Project
%%
%% It may be distributed and/or modified under the conditions of the
diff --git a/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex b/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex
index 7227ae2dc85..ebc170e2f19 100644
--- a/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex
+++ b/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex
@@ -13,7 +13,7 @@
%%
%% Do not distribute a modified version of this file.
%%
-%% File: expl3.dtx Copyright (C) 1990-2015 The LaTeX3 Project
+%% File: expl3.dtx Copyright (C) 1990-2016 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
@@ -47,8 +47,8 @@
%% -----------------------------------------------------------------------
\def\ExplFileName{expl3}%
\def\ExplFileDescription{L3 programming layer}%
-\def\ExplFileDate{2016/01/03}%
-\def\ExplFileVersion{6358}%
+\def\ExplFileDate{2016/01/19}%
+\def\ExplFileVersion{6377}%
\let\ExplLoaderFileVersion\ExplFileVersion
\begingroup
\def\tempa{LaTeX2e}%
diff --git a/Master/texmf-dist/tex/latex/l3kernel/expl3.sty b/Master/texmf-dist/tex/latex/l3kernel/expl3.sty
index cb9e99bb02c..843acbfeca7 100644
--- a/Master/texmf-dist/tex/latex/l3kernel/expl3.sty
+++ b/Master/texmf-dist/tex/latex/l3kernel/expl3.sty
@@ -13,7 +13,7 @@
%%
%% Do not distribute a modified version of this file.
%%
-%% File: expl3.dtx Copyright (C) 1990-2015 The LaTeX3 Project
+%% File: expl3.dtx Copyright (C) 1990-2016 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
@@ -47,8 +47,8 @@
%% -----------------------------------------------------------------------
\def\ExplFileName{expl3}%
\def\ExplFileDescription{L3 programming layer}%
-\def\ExplFileDate{2016/01/03}%
-\def\ExplFileVersion{6358}%
+\def\ExplFileDate{2016/01/19}%
+\def\ExplFileVersion{6377}%
\let\ExplLoaderFileVersion\ExplFileVersion
\ProvidesPackage{\ExplFileName}
[%
diff --git a/Master/texmf-dist/tex/latex/l3packages/l3keys2e/l3keys2e.sty b/Master/texmf-dist/tex/latex/l3packages/l3keys2e/l3keys2e.sty
index d80a6bf71ea..7a73a3992b0 100644
--- a/Master/texmf-dist/tex/latex/l3packages/l3keys2e/l3keys2e.sty
+++ b/Master/texmf-dist/tex/latex/l3packages/l3keys2e/l3keys2e.sty
@@ -13,7 +13,7 @@
%%
%% Do not distribute a modified version of this file.
%%
-%% File: l3keys2e.dtx (C) Copyright 2009,2011-2015 The LaTeX3 Project
+%% File: l3keys2e.dtx (C) Copyright 2009,2011-2016 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
@@ -46,8 +46,8 @@
%%
%% -----------------------------------------------------------------------
%%
-\RequirePackage{expl3}[2015/12/20]
-\@ifpackagelater{expl3}{2015/12/20}
+\RequirePackage{expl3}[2016/01/19]
+\@ifpackagelater{expl3}{2016/01/19}
{}
{%
\PackageError{l3keys2e}{Support package l3kernel too old}
@@ -61,8 +61,8 @@
}
\def\ExplFileName{l3keys2e}
\def\ExplFileDescription{LaTeX2e option processing using LaTeX3 keys}
-\def\ExplFileDate{2015/12/20}
-\def\ExplFileVersion{6326}
+\def\ExplFileDate{2016/01/19}
+\def\ExplFileVersion{6377}
\ProvidesExplPackage
{\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
\cs_generate_variant:Nn \clist_put_right:Nn { Nv }
diff --git a/Master/texmf-dist/tex/latex/l3packages/xfrac/xfrac.sty b/Master/texmf-dist/tex/latex/l3packages/xfrac/xfrac.sty
index 55c4141728d..46caf08faf1 100644
--- a/Master/texmf-dist/tex/latex/l3packages/xfrac/xfrac.sty
+++ b/Master/texmf-dist/tex/latex/l3packages/xfrac/xfrac.sty
@@ -14,7 +14,7 @@
%% Do not distribute a modified version of this file.
%%
%% File: xfrac.dtx Copyright (C) 2004, 2008-2010 Morten Hoegholm
-%% (C) 2011,2012,2014,2015 The LaTeX3 Project
+%% (C) 2011,2012,2014-2016 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
@@ -47,8 +47,8 @@
%%
%% -----------------------------------------------------------------------
%%
-\RequirePackage{expl3}[2015/12/20]
-\@ifpackagelater{expl3}{2015/12/20}
+\RequirePackage{expl3}[2016/01/19]
+\@ifpackagelater{expl3}{2016/01/19}
{}
{%
\PackageError{xfrac}{Support package l3kernel too old}
@@ -63,8 +63,8 @@
\RequirePackage{amstext,graphicx,l3keys2e,textcomp,xparse,xtemplate}
\def\ExplFileName{xfrac}
\def\ExplFileDescription{L3 Experimental split-level fractions}
-\def\ExplFileDate{2015/12/20}
-\def\ExplFileVersion{6326}
+\def\ExplFileDate{2016/01/19}
+\def\ExplFileVersion{6377}
\ProvidesExplPackage
{\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
\keys_define:nn { xfrac }
diff --git a/Master/texmf-dist/tex/latex/l3packages/xparse/xparse.sty b/Master/texmf-dist/tex/latex/l3packages/xparse/xparse.sty
index db91163ba0c..01b6243fff0 100644
--- a/Master/texmf-dist/tex/latex/l3packages/xparse/xparse.sty
+++ b/Master/texmf-dist/tex/latex/l3packages/xparse/xparse.sty
@@ -17,7 +17,7 @@
%% David Carlisle
%% (C) Copyright 2004-2008 Frank Mittelbach,
%% The LaTeX3 Project
-%% (C) Copyright 2009-2015 The LaTeX3 Project
+%% (C) Copyright 2009-2016 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
@@ -50,8 +50,8 @@
%%
%% -----------------------------------------------------------------------
%%
-\RequirePackage{expl3}[2015/12/20]
-\@ifpackagelater{expl3}{2015/12/20}
+\RequirePackage{expl3}[2016/01/19]
+\@ifpackagelater{expl3}{2016/01/19}
{}
{%
\PackageError{xparse}{Support package l3kernel too old}
@@ -65,8 +65,8 @@
}
\def\ExplFileName{xparse}
\def\ExplFileDescription{L3 Experimental document command parser}
-\def\ExplFileDate{2015/12/20}
-\def\ExplFileVersion{6326}
+\def\ExplFileDate{2016/01/19}
+\def\ExplFileVersion{6377}
\ProvidesExplPackage
{\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
\tl_const:Nx \c__xparse_no_value_tl
diff --git a/Master/texmf-dist/tex/latex/l3packages/xtemplate/xtemplate.sty b/Master/texmf-dist/tex/latex/l3packages/xtemplate/xtemplate.sty
index 653fa0e2249..00e7c3e19b1 100644
--- a/Master/texmf-dist/tex/latex/l3packages/xtemplate/xtemplate.sty
+++ b/Master/texmf-dist/tex/latex/l3packages/xtemplate/xtemplate.sty
@@ -17,7 +17,7 @@
%% David Carlisle
%% (C) Copyright 2004-2010 Frank Mittelbach,
%% The LaTeX3 Project
-%% (C) Copyright 2011-2015 The LaTeX3 Project
+%% (C) Copyright 2011-2016 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
@@ -50,8 +50,8 @@
%%
%% -----------------------------------------------------------------------
%%
-\RequirePackage{expl3}[2015/12/20]
-\@ifpackagelater{expl3}{2015/12/20}
+\RequirePackage{expl3}[2016/01/19]
+\@ifpackagelater{expl3}{2016/01/19}
{}
{%
\PackageError{xtemplate}{Support package l3kernel too old}
@@ -65,8 +65,8 @@
}
\def\ExplFileName{xtemplate}
\def\ExplFileDescription{L3 Experimental prototype document functions}
-\def\ExplFileDate{2015/12/20}
-\def\ExplFileVersion{6326}
+\def\ExplFileDate{2016/01/19}
+\def\ExplFileVersion{6377}
\ProvidesExplPackage
{\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
\tl_const:Nn \c__xtemplate_code_root_tl { template~code~>~ }