From 54371d50fc6a5abc2b07e926553d7ca9cccdff74 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Tue, 26 Jan 2016 23:00:51 +0000 Subject: l3 git-svn-id: svn://tug.org/texlive/trunk@39491 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/doc/latex/l3build/README.md | 2 +- Master/texmf-dist/doc/latex/l3build/l3build.pdf | Bin 602828 -> 603579 bytes Master/texmf-dist/doc/latex/l3kernel/README.md | 2 +- Master/texmf-dist/doc/latex/l3kernel/expl3.pdf | Bin 586274 -> 586354 bytes .../texmf-dist/doc/latex/l3kernel/interface3.pdf | Bin 1501051 -> 1501105 bytes .../texmf-dist/doc/latex/l3kernel/l3docstrip.pdf | Bin 268222 -> 268222 bytes .../texmf-dist/doc/latex/l3kernel/l3obsolete.txt | 22 +- .../texmf-dist/doc/latex/l3kernel/l3styleguide.pdf | Bin 276787 -> 276787 bytes .../doc/latex/l3kernel/l3syntax-changes.pdf | Bin 220209 -> 220209 bytes Master/texmf-dist/doc/latex/l3kernel/source3.pdf | Bin 4705347 -> 4686166 bytes Master/texmf-dist/doc/latex/l3packages/README.md | 2 +- .../doc/latex/l3packages/l3keys2e/l3keys2e.pdf | Bin 333281 -> 333680 bytes .../doc/latex/l3packages/xfrac/xfrac.pdf | Bin 478120 -> 478529 bytes .../doc/latex/l3packages/xparse/xparse.pdf | Bin 460231 -> 460668 bytes .../doc/latex/l3packages/xtemplate/xtemplate.pdf | Bin 422303 -> 422714 bytes Master/texmf-dist/source/latex/l3build/l3build.dtx | 7 +- Master/texmf-dist/source/latex/l3kernel/expl3.dtx | 6 +- Master/texmf-dist/source/latex/l3kernel/l3.ins | 4 +- .../source/latex/l3kernel/l3candidates.dtx | 978 +++++++++--------- .../texmf-dist/source/latex/l3kernel/l3format.ins | 4 +- Master/texmf-dist/source/latex/l3kernel/l3int.dtx | 22 +- Master/texmf-dist/source/latex/l3kernel/l3prop.dtx | 14 +- Master/texmf-dist/source/latex/l3kernel/l3skip.dtx | 14 +- .../source/latex/l3packages/l3keys2e/l3keys2e.dtx | 10 +- .../source/latex/l3packages/xfrac/xfrac.dtx | 10 +- .../source/latex/l3packages/xparse/xparse.dtx | 10 +- .../latex/l3packages/xtemplate/xtemplate.dtx | 10 +- Master/texmf-dist/tex/latex/l3build/l3build.lua | 88 +- .../tex/latex/l3build/regression-test.tex | 2 +- .../texmf-dist/tex/latex/l3kernel/expl3-code.tex | 1063 ++++++++++---------- .../tex/latex/l3kernel/expl3-generic.tex | 6 +- Master/texmf-dist/tex/latex/l3kernel/expl3.sty | 6 +- .../tex/latex/l3packages/l3keys2e/l3keys2e.sty | 10 +- .../tex/latex/l3packages/xfrac/xfrac.sty | 10 +- .../tex/latex/l3packages/xparse/xparse.sty | 10 +- .../tex/latex/l3packages/xtemplate/xtemplate.sty | 10 +- 36 files changed, 1160 insertions(+), 1162 deletions(-) (limited to 'Master/texmf-dist') 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 Binary files a/Master/texmf-dist/doc/latex/l3build/l3build.pdf and b/Master/texmf-dist/doc/latex/l3build/l3build.pdf 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 Binary files a/Master/texmf-dist/doc/latex/l3kernel/expl3.pdf and b/Master/texmf-dist/doc/latex/l3kernel/expl3.pdf 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 Binary files a/Master/texmf-dist/doc/latex/l3kernel/interface3.pdf and b/Master/texmf-dist/doc/latex/l3kernel/interface3.pdf 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 Binary files a/Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdf and b/Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdf 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 Binary files a/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdf and b/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdf 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 Binary files a/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdf and b/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdf 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 Binary files a/Master/texmf-dist/doc/latex/l3kernel/source3.pdf and b/Master/texmf-dist/doc/latex/l3kernel/source3.pdf 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 Binary files a/Master/texmf-dist/doc/latex/l3packages/l3keys2e/l3keys2e.pdf and b/Master/texmf-dist/doc/latex/l3packages/l3keys2e/l3keys2e.pdf 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 Binary files a/Master/texmf-dist/doc/latex/l3packages/xfrac/xfrac.pdf and b/Master/texmf-dist/doc/latex/l3packages/xfrac/xfrac.pdf 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 Binary files a/Master/texmf-dist/doc/latex/l3packages/xparse/xparse.pdf and b/Master/texmf-dist/doc/latex/l3packages/xparse/xparse.pdf 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 Binary files a/Master/texmf-dist/doc/latex/l3packages/xtemplate/xtemplate.pdf and b/Master/texmf-dist/doc/latex/l3packages/xtemplate/xtemplate.pdf 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> \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|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> @@ -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 } -% -%<*package> - { - \@@_change_case_cs:Nnnn #1 {#3} - { } - { \@@_change_case_cs:N #1 } - } -% + { \@@_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 } } -% % \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} } -% -%<*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} - } - } -% { \@@_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: -% -% \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|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> @@ -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} % % \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|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> @@ -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} % % \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|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> @@ -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} % % \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] -%\@ifpackagelater{expl3}{2015/12/20} +\RequirePackage{expl3}[2016/01/19] +%\@ifpackagelater{expl3}{2016/01/19} % {} % {% % \PackageError{l3keys2e}{Support package l3kernel too old} @@ -52,8 +52,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} % %<*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] -%\@ifpackagelater{expl3}{2015/12/20} +\RequirePackage{expl3}[2016/01/19] +%\@ifpackagelater{expl3}{2016/01/19} % {} % {% % \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> \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] -%\@ifpackagelater{expl3}{2015/12/20} +\RequirePackage{expl3}[2016/01/19] +%\@ifpackagelater{expl3}{2016/01/19} % {} % {% % \PackageError{xparse}{Support package l3kernel too old} @@ -56,8 +56,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} % %<*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] -%\@ifpackagelater{expl3}{2015/12/20} +\RequirePackage{expl3}[2016/01/19] +%\@ifpackagelater{expl3}{2016/01/19} % {} % {% % \PackageError{xtemplate}{Support package l3kernel too old} @@ -56,8 +56,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} % %<*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~>~ } -- cgit v1.2.3