diff options
151 files changed, 2551 insertions, 1499 deletions
diff --git a/Master/texmf-dist/doc/latex/l3experimental/CHANGELOG.md b/Master/texmf-dist/doc/latex/l3experimental/CHANGELOG.md index 376c0eb3943..c8631201e70 100644 --- a/Master/texmf-dist/doc/latex/l3experimental/CHANGELOG.md +++ b/Master/texmf-dist/doc/latex/l3experimental/CHANGELOG.md @@ -7,7 +7,11 @@ this project uses date-based 'snapshot' version identifiers. ## [Unreleased] -## [2018-11-19] +## [2019-01-28] + +### Changed + +- Track `expl3` changes ## [2018-10-31] @@ -24,6 +28,7 @@ this project uses date-based 'snapshot' version identifiers. ## [2018-08-24] ### Fixed + - Actually distribute `l3sys-shell` ## [2018-08-23] @@ -54,8 +59,8 @@ this project uses date-based 'snapshot' version identifiers. - New `l3color` module using `xcolor`-like expression syntax - New `l3draw` module, based on `pgf` layer of the TikZ system -[Unreleased]: https://github.com/latex3/latex3/compare/2018-11-19...HEAD -[2018-11-19]: https://github.com/latex3/latex3/compare/2018-10-31...2018-11-19 +[Unreleased]: https://github.com/latex3/latex3/compare/2019-01-28...HEAD +[2019-01-28]: https://github.com/latex3/latex3/compare/2018-10-31...2019-01-28 [2018-10-31]: https://github.com/latex3/latex3/compare/2018-10-26...2018-10-31 [2018-10-26]: https://github.com/latex3/latex3/compare/2018-10-17...2018-10-26 [2018-10-17]: https://github.com/latex3/latex3/compare/2018-08-24...2018-10-17 diff --git a/Master/texmf-dist/doc/latex/l3experimental/README.md b/Master/texmf-dist/doc/latex/l3experimental/README.md index 95a0ecbc399..dd85ffa9e78 100644 --- a/Master/texmf-dist/doc/latex/l3experimental/README.md +++ b/Master/texmf-dist/doc/latex/l3experimental/README.md @@ -1,7 +1,7 @@ Experimental LaTeX3 Concepts ============================ -Release 2018-11-19 +Release 2019-01-28 Overview -------- @@ -150,6 +150,6 @@ the [LaTeX-L list](#Discussion) should be used. ----- -<p>Copyright (C) 1998-2011,2015-2018 The LaTeX3 Project <br /> +<p>Copyright (C) 1998-2011,2015-2019 The LaTeX3 Project <br /> <a href="http://latex-project.org/">http://latex-project.org/</a> <br /> All rights reserved.</p> diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3benchmark/l3benchmark.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3benchmark/l3benchmark.pdf Binary files differindex 40c5297dae9..e4e4aa77bd1 100644 --- a/Master/texmf-dist/doc/latex/l3experimental/l3benchmark/l3benchmark.pdf +++ b/Master/texmf-dist/doc/latex/l3experimental/l3benchmark/l3benchmark.pdf diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3cctab/l3cctab.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3cctab/l3cctab.pdf Binary files differindex e41db012b81..9c71ce246f4 100644 --- a/Master/texmf-dist/doc/latex/l3experimental/l3cctab/l3cctab.pdf +++ b/Master/texmf-dist/doc/latex/l3experimental/l3cctab/l3cctab.pdf diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3color/l3color.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3color/l3color.pdf Binary files differindex 930c8e2bfd5..e7b07e10283 100644 --- a/Master/texmf-dist/doc/latex/l3experimental/l3color/l3color.pdf +++ b/Master/texmf-dist/doc/latex/l3experimental/l3color/l3color.pdf diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3draw/l3draw-code.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3draw/l3draw-code.pdf Binary files differindex 3e7483050af..b54802c006c 100644 --- a/Master/texmf-dist/doc/latex/l3experimental/l3draw/l3draw-code.pdf +++ b/Master/texmf-dist/doc/latex/l3experimental/l3draw/l3draw-code.pdf diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3draw/l3draw-code.tex b/Master/texmf-dist/doc/latex/l3experimental/l3draw/l3draw-code.tex index b94986f5b9d..33f6f8a9a5b 100644 --- a/Master/texmf-dist/doc/latex/l3experimental/l3draw/l3draw-code.tex +++ b/Master/texmf-dist/doc/latex/l3experimental/l3draw/l3draw-code.tex @@ -1,26 +1,28 @@ \iffalse meta-comment - File: l3draw-code.tex Copyright (C) 2018 The LaTeX3 Project +File: l3draw-code.tex - 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 +Copyright (C) 2018,2019 The LaTeX3 Project - https://www.latex-project.org/lppl.txt +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 - This file is part of the "l3experimental bundle" (The Work in LPPL) - and all files in that bundle must be distributed together. + https://www.latex-project.org/lppl.txt - The released version of this bundle is available from CTAN. +This file is part of the "l3experimental 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 +----------------------------------------------------------------------- - https://github.com/latex3/latex3 +The development version of the bundle can be found at - for those people who are interested. + https://github.com/latex3/latex3 + +for those people who are interested. \fi diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3draw/l3draw.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3draw/l3draw.pdf Binary files differindex 9617300720a..3a76b5792f2 100644 --- a/Master/texmf-dist/doc/latex/l3experimental/l3draw/l3draw.pdf +++ b/Master/texmf-dist/doc/latex/l3experimental/l3draw/l3draw.pdf diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-convert.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-convert.pdf Binary files differindex 741b0c9afd8..4a84c0539dc 100644 --- a/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-convert.pdf +++ b/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-convert.pdf diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-format.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-format.pdf Binary files differindex e1d8e83f8b8..5c5820af82a 100644 --- a/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-format.pdf +++ b/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-format.pdf diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3sys-shell/l3sys-shell.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3sys-shell/l3sys-shell.pdf Binary files differindex df3367d8902..ac246423308 100644 --- a/Master/texmf-dist/doc/latex/l3experimental/l3sys-shell/l3sys-shell.pdf +++ b/Master/texmf-dist/doc/latex/l3experimental/l3sys-shell/l3sys-shell.pdf diff --git a/Master/texmf-dist/doc/latex/l3experimental/xcoffins/xcoffins.pdf b/Master/texmf-dist/doc/latex/l3experimental/xcoffins/xcoffins.pdf Binary files differindex 1cad8f4f7c8..22f852c8d07 100644 --- a/Master/texmf-dist/doc/latex/l3experimental/xcoffins/xcoffins.pdf +++ b/Master/texmf-dist/doc/latex/l3experimental/xcoffins/xcoffins.pdf diff --git a/Master/texmf-dist/doc/latex/l3experimental/xgalley/l3galley.pdf b/Master/texmf-dist/doc/latex/l3experimental/xgalley/l3galley.pdf Binary files differindex 40799e12bc5..376c45c4950 100644 --- a/Master/texmf-dist/doc/latex/l3experimental/xgalley/l3galley.pdf +++ b/Master/texmf-dist/doc/latex/l3experimental/xgalley/l3galley.pdf diff --git a/Master/texmf-dist/doc/latex/l3experimental/xgalley/xgalley.pdf b/Master/texmf-dist/doc/latex/l3experimental/xgalley/xgalley.pdf Binary files differindex b41c6df8ded..8fc44f0867b 100644 --- a/Master/texmf-dist/doc/latex/l3experimental/xgalley/xgalley.pdf +++ b/Master/texmf-dist/doc/latex/l3experimental/xgalley/xgalley.pdf diff --git a/Master/texmf-dist/doc/latex/l3kernel/CHANGELOG.md b/Master/texmf-dist/doc/latex/l3kernel/CHANGELOG.md index d973ba34b1e..542ba4d4775 100644 --- a/Master/texmf-dist/doc/latex/l3kernel/CHANGELOG.md +++ b/Master/texmf-dist/doc/latex/l3kernel/CHANGELOG.md @@ -7,12 +7,45 @@ this project uses date-based 'snapshot' version identifiers. ## [Unreleased] +## [2019-01-28] + ### Added -- `\ior_map_variable:NNn` and `\ior_str_map_variable:NNn` +- Global versions of box affine functions, e.g. `\box_grotate:Nn` +- Global versions of box size adjustment functions +- `\box_(g)set_eq_drop:NN`, `\(h|v)box_unpack_drop:N` +- `\file_get:nnN` and `\file_get:nnNTF` +- Experimental functions `\sys_shell_get:nnN` and `\sys_shell_get:nnNTF` + +### Changed + +- `\char_generate:nn` now always takes exactly two expansions +- Move `\prg_generate_conditional_variant:Nnn` to stable +- Renamed experimental `\box_trim:Nnnnn` and `\box_viewport:Nnnnn` as + `\box_set_trim:Nnnnn` and `\box_set_viewport:Nnnnn`, respectively + +### Deprecated + +- `\box_(g)set_eq_clear:NN`, replaced by `\box_(g)set_eq_drop:NN` +- `\(h|v)box_unpack_clear:N`, replaced by `\(h|v)box_unpack_drop:N +- `\tl_(g)set_from_file(_x):Nnn`, replaced by `\file_get:nnN` + +### Fixed + +- Scope treatment of `\box_set_dp:N`, _etc._ +- In (u)platex: detection of spaces in `\tl_rescan:nn` and related functions + +### Removed + +- Experimental function family `\tl_(g)set_from_shell:(N|c)nn` + (replaced by `\sys_shell_get:nnN`) ## [2019-01-13] +### Added + +- `\ior_map_variable:NNn` and `\ior_str_map_variable:NNn` + ### Fixed - Unclosed conditional with Unicode engines @@ -240,7 +273,8 @@ this project uses date-based 'snapshot' version identifiers. - Step funcÂtions have been added for dim variÂables, e.g. `\dim_step_inÂline:nnnn` -[Unreleased]: https://github.com/latex3/latex3/compare/2019-01-13...HEAD +[Unreleased]: https://github.com/latex3/latex3/compare/2019-01-28...HEAD +[2019-01-28]: https://github.com/latex3/latex3/compare/2019-01-13...2019-01-28 [2019-01-13]: https://github.com/latex3/latex3/compare/2019-01-12...2019-01-13 [2019-01-12]: https://github.com/latex3/latex3/compare/2019-01-01...2019-01-12 [2019-01-01]: https://github.com/latex3/latex3/compare/2018-12-12...2019-01-01 diff --git a/Master/texmf-dist/doc/latex/l3kernel/README.md b/Master/texmf-dist/doc/latex/l3kernel/README.md index 9c565157215..e2922689838 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 2019-01-13 +Release 2019-01-28 Overview -------- diff --git a/Master/texmf-dist/doc/latex/l3kernel/expl3.pdf b/Master/texmf-dist/doc/latex/l3kernel/expl3.pdf Binary files differindex 48fe6f97fe1..998675cf11e 100644 --- a/Master/texmf-dist/doc/latex/l3kernel/expl3.pdf +++ b/Master/texmf-dist/doc/latex/l3kernel/expl3.pdf diff --git a/Master/texmf-dist/doc/latex/l3kernel/interface3.pdf b/Master/texmf-dist/doc/latex/l3kernel/interface3.pdf Binary files differindex 92c8d98e28c..7a806df027a 100644 --- a/Master/texmf-dist/doc/latex/l3kernel/interface3.pdf +++ b/Master/texmf-dist/doc/latex/l3kernel/interface3.pdf diff --git a/Master/texmf-dist/doc/latex/l3kernel/interface3.tex b/Master/texmf-dist/doc/latex/l3kernel/interface3.tex index 128b8d41cd2..b0e86ea5451 100644 --- a/Master/texmf-dist/doc/latex/l3kernel/interface3.tex +++ b/Master/texmf-dist/doc/latex/l3kernel/interface3.tex @@ -1,28 +1,30 @@ -% \iffalse meta-comment -% -%% File: interfaces3.tex Copyright (C) 1990-2011,2017-2019 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 -%% -%% https://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 -%% -%% https://github.com/latex3/latex3 -%% -%% for those people who are interested. -% -% \fi +\iffalse meta-comment + +File: interfaces3.tex + +Copyright (C) 1990-2011,2017-2019 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 + + https://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 + + https://github.com/latex3/latex3 + +for those people who are interested. + +\fi %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % @@ -52,7 +54,7 @@ {latex-team@latex-project.org}% }% } -\date{Released 2019-01-13} +\date{Released 2019-01-28} \pagenumbering{roman} \maketitle diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdf Binary files differindex dc6fc49b3cd..3c4d4a5f5d6 100644 --- a/Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdf +++ b/Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdf diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3obsolete.txt b/Master/texmf-dist/doc/latex/l3kernel/l3obsolete.txt index ab7f713a73a..6be97eeebff 100644 --- a/Master/texmf-dist/doc/latex/l3kernel/l3obsolete.txt +++ b/Master/texmf-dist/doc/latex/l3kernel/l3obsolete.txt @@ -15,6 +15,14 @@ They will be removed from the sources at the end of the given year. -------------------------------------- Function Expires end -------------------------------------- +\box_gset_eq_clear:cc 2020 +\box_gset_eq_clear:cN 2020 +\box_gset_eq_clear:Nc 2020 +\box_gset_eq_clear:NN 2020 +\box_set_eq_clear:cc 2020 +\box_set_eq_clear:cN 2020 +\box_set_eq_clear:Nc 2020 +\box_set_eq_clear:NN 2020 \c_zero 2019 \c_one 2019 \c_two 2019 @@ -39,6 +47,8 @@ Function Expires end \c_one_thousand 2019 \c_ten_thousand 2019 \etex_....:D 2019 +\hbox_unpack_clear:c 2020 +\hbox_unpack_clear:N 2020 \lua_escape_x:n 2019 \lua_now_x:n 2019 \lua_shipout_x:n 2019 @@ -56,10 +66,20 @@ Function Expires end \str_if_eq_x:nnT 2019 \str_if_eq_x:nnTF 2019 \str_if_eq_x_p:nn 2019 +\tl_gset_from_file:cnn 2020 +\tl_gset_from_file:Nnn 2020 +\tl_gset_from_file_x:cnn 2020 +\tl_gset_from_file_x:Nnn 2020 \tl_show_analysis:N 2019 \tl_show_analysis:n 2019 +\tl_set_from_file:cnn 2020 +\tl_set_from_file:Nnn 2020 +\tl_set_from_file_x:cnn 2020 +\tl_set_from_file_x:Nnn 2020 \uptex_...:D 2019 \utex_...:D 2019 +\vbox_unpack_clear:c 2020 +\vbox_unpack_clear:N 2020 \xetex_...:D 2019 -------------------------------------- diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdf Binary files differindex d8ad44cfd03..80e8ec14c51 100644 --- a/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdf +++ b/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdf diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.tex b/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.tex index ed13c4ca371..5f1af43ab76 100644 --- a/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.tex +++ b/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.tex @@ -1,6 +1,8 @@ \iffalse meta-comment -File l3styleguide.tex Copyright (C) 2011,2012,2014-2019 The LaTeX3 Project +File: l3styleguide.tex + +Copyright (C) 2011,2012,2014-2019 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 @@ -30,7 +32,7 @@ The released version of this bundle is available from CTAN. {latex-team@latex-project.org}% }% } -\date{Released 2019-01-13} +\date{Released 2019-01-28} \begin{document} diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdf Binary files differindex bbb0b39a65a..fc133822c87 100644 --- a/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdf +++ b/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdf diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.tex b/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.tex index a660dd9cf0f..e615c89d3fe 100644 --- a/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.tex +++ b/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.tex @@ -1,6 +1,8 @@ \iffalse meta-comment -File l3syntax-changes.tex Copyright (C) 2011-2012,2017-2019 The LaTeX3 Project +File: l3syntax-changes.tex + +Copyright (C) 2011-2012,2017-2019 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 @@ -30,7 +32,7 @@ The released version of this bundle is available from CTAN. {latex-team@latex-project.org}% }% } -\date{Released 2019-01-13} +\date{Released 2019-01-28} \newcommand{\TF}{\textit{(TF)}} diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.pdf Binary files differindex 6d7089c9c37..663636f1a91 100644 --- a/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.pdf +++ b/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.pdf diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.tex b/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.tex index 320787a53d5..7d08ce163f9 100644 --- a/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.tex +++ b/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.tex @@ -1,6 +1,8 @@ \iffalse meta-comment -File l3term-glossary.tex Copyright (C) 2018-2019 The LaTeX3 Project +File: l3term-glossary.tex + +Copyright (C) 2018-2019 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 @@ -30,7 +32,7 @@ The released version of this bundle is available from CTAN. {latex-team@latex-project.org}% }% } -\date{Released 2019-01-13} +\date{Released 2019-01-28} \newcommand{\TF}{\textit{(TF)}} diff --git a/Master/texmf-dist/doc/latex/l3kernel/source3.pdf b/Master/texmf-dist/doc/latex/l3kernel/source3.pdf Binary files differindex b13bcc68fb5..6203aa958a4 100644 --- a/Master/texmf-dist/doc/latex/l3kernel/source3.pdf +++ b/Master/texmf-dist/doc/latex/l3kernel/source3.pdf diff --git a/Master/texmf-dist/doc/latex/l3kernel/source3.tex b/Master/texmf-dist/doc/latex/l3kernel/source3.tex index 44969811d2f..774aa0b1d65 100644 --- a/Master/texmf-dist/doc/latex/l3kernel/source3.tex +++ b/Master/texmf-dist/doc/latex/l3kernel/source3.tex @@ -1,28 +1,30 @@ -% \iffalse meta-comment -% -%% File: source3.tex Copyright (C) 1990-2012,2017-2019 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 -%% -%% https://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 -%% -%% https://github.com/latex3/latex3 -%% -%% for those people who are interested. -% -% \fi +\iffalse meta-comment + +File: source3.tex + +Copyright (C) 1990-2012,2017-2019 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 + + https://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 + + https://github.com/latex3/latex3 + +for those people who are interested. + +\fi %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % @@ -51,7 +53,7 @@ {latex-team@latex-project.org}% }% } -\date{Released 2019-01-13} +\date{Released 2019-01-28} \pagenumbering{roman} \maketitle diff --git a/Master/texmf-dist/doc/latex/l3kernel/source3body.tex b/Master/texmf-dist/doc/latex/l3kernel/source3body.tex index 853b90801d8..2776b79af65 100644 --- a/Master/texmf-dist/doc/latex/l3kernel/source3body.tex +++ b/Master/texmf-dist/doc/latex/l3kernel/source3body.tex @@ -1,28 +1,30 @@ -% \iffalse meta-comment -% -%% File: source3body.tex Copyright (C) 1990-2012,2014-2018 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 -%% -%% https://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 -%% -%% https://github.com/latex3/latex3 -%% -%% for those people who are interested. -% -% \fi +\iffalse meta-comment + +File: source3body.tex + +Copyright (C) 1990-2012,2014-2018 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 + + https://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 + + https://github.com/latex3/latex3 + +for those people who are interested. + +\fi %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % diff --git a/Master/texmf-dist/source/latex/l3experimental/l3benchmark/l3benchmark.dtx b/Master/texmf-dist/source/latex/l3experimental/l3benchmark/l3benchmark.dtx index cf8414f22fc..f2b906f5c4b 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3benchmark/l3benchmark.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3benchmark/l3benchmark.dtx @@ -1,6 +1,8 @@ % \iffalse meta-comment % -%% File: l3benchmark.dtx Copyright (C) 2011,2012,2014-2018 The LaTeX3 Project +%% File: l3benchmark.dtx +% +% Copyright (C) 2011,2012,2014-2019 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 @@ -44,7 +46,7 @@ % }^^A % } % -% \date{Released 2018-11-19} +% \date{Released 2019-01-28} % % \maketitle % @@ -126,7 +128,7 @@ % % \begin{macrocode} %<*package> -\ProvidesExplPackage{l3benchmark}{2018-11-19}{} +\ProvidesExplPackage{l3benchmark}{2019-01-28}{} {L3 Experimental benchmarking} %</package> % \end{macrocode} diff --git a/Master/texmf-dist/source/latex/l3experimental/l3benchmark/l3benchmark.ins b/Master/texmf-dist/source/latex/l3experimental/l3benchmark/l3benchmark.ins index befb2bc9c96..d925b01b148 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3benchmark/l3benchmark.ins +++ b/Master/texmf-dist/source/latex/l3experimental/l3benchmark/l3benchmark.ins @@ -1,6 +1,8 @@ \iffalse meta-comment -File l3benchmark.ins Copyright (C) 2011,2018 The LaTeX3 Project +File: l3benchmark.ins + +Copyright (C) 2011,2018,2019 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 @@ -32,7 +34,7 @@ license information is placed in the derived files. \preamble -Copyright (C) 2018 The LaTeX3 Project +Copyright (C) 2018,2019 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 diff --git a/Master/texmf-dist/source/latex/l3experimental/l3cctab/l3cctab.dtx b/Master/texmf-dist/source/latex/l3experimental/l3cctab/l3cctab.dtx index 7e0820f8b7b..8770a2b7be6 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3cctab/l3cctab.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3cctab/l3cctab.dtx @@ -1,6 +1,8 @@ % \iffalse meta-comment % -%% File: l3cctab.dtx Copyright (C) 2018 The LaTeX3 Project +%% File: l3cctab.dtx +% +% Copyright (C) 2018,2019 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 @@ -44,7 +46,7 @@ % }^^A % } % -% \date{Released 2018-11-19} +% \date{Released 2019-01-28} % % \maketitle % @@ -148,7 +150,7 @@ % % \begin{macrocode} %<*package> -\ProvidesExplPackage{l3cctab}{2018-11-19}{} +\ProvidesExplPackage{l3cctab}{2019-01-28}{} {L3 Experimental category code tables} %</package> % \end{macrocode} diff --git a/Master/texmf-dist/source/latex/l3experimental/l3cctab/l3cctab.ins b/Master/texmf-dist/source/latex/l3experimental/l3cctab/l3cctab.ins index f3c0ad0a7ed..3c7a9b05ae1 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3cctab/l3cctab.ins +++ b/Master/texmf-dist/source/latex/l3experimental/l3cctab/l3cctab.ins @@ -1,6 +1,8 @@ \iffalse meta-comment -File l3cctab.ins Copyright (C) 2018 The LaTeX3 Project +File: l3cctab.ins + +Copyright (C) 2018,2019 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 @@ -32,7 +34,7 @@ license information is placed in the derived files. \preamble -Copyright (C) 2018 The LaTeX3 Project +Copyright (C) 2018,2019 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 diff --git a/Master/texmf-dist/source/latex/l3experimental/l3color/l3color.dtx b/Master/texmf-dist/source/latex/l3experimental/l3color/l3color.dtx index 111018bb5c8..c2c783ad1b6 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3color/l3color.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3color/l3color.dtx @@ -1,6 +1,8 @@ % \iffalse meta-comment % -%% File: l3color.dtx Copyright(C) 2017-2018 The LaTeX3 Project +%% File: l3color.dtx +% +% Copyright (C) 2017-2019 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 @@ -44,7 +46,7 @@ % }^^A % } % -% \date{Released 2018-11-19} +% \date{Released 2019-01-28} % % \maketitle % @@ -263,7 +265,7 @@ % % \begin{macrocode} %<*package> -\ProvidesExplPackage{l3color}{2018-11-19}{} +\ProvidesExplPackage{l3color}{2019-01-28}{} {L3 Experimental color support} %</package> % \end{macrocode} diff --git a/Master/texmf-dist/source/latex/l3experimental/l3color/l3color.ins b/Master/texmf-dist/source/latex/l3experimental/l3color/l3color.ins index de23faed546..ae12ed89b60 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3color/l3color.ins +++ b/Master/texmf-dist/source/latex/l3experimental/l3color/l3color.ins @@ -1,6 +1,8 @@ \iffalse meta-comment -File l3color.ins Copyright (C) 2017-2018 The LaTeX3 Project +File: l3color.ins + +Copyright (C) 2017-2019 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 @@ -32,7 +34,7 @@ license information is placed in the derived files. \preamble -Copyright (C) 2017-2018 The LaTeX3 Project +Copyright (C) 2017-2019 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 diff --git a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-boxes.dtx b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-boxes.dtx index e450d0c4d4e..59bf5ac2ba5 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-boxes.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-boxes.dtx @@ -1,6 +1,8 @@ % \iffalse meta-comment % -%% File: l3draw-boxes.dtx Copyright(C) 2018 The LaTeX3 Project +%% File: l3draw-boxes.dtx +% +% Copyright (C) 2018,2019 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 @@ -42,7 +44,7 @@ % }^^A % } % -% \date{Released 2018-11-19} +% \date{Released 2019-01-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-paths.dtx b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-paths.dtx index 240d131af41..cf40e9564d7 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-paths.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-paths.dtx @@ -1,6 +1,8 @@ % \iffalse meta-comment % -%% File: l3draw-paths.dtx Copyright(C) 2018 The LaTeX3 Project +%% File: l3draw-paths.dtx +% +% Copyright (C) 2018,2019 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 @@ -42,7 +44,7 @@ % }^^A % } % -% \date{Released 2018-11-19} +% \date{Released 2019-01-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-points.dtx b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-points.dtx index 186f4a4a334..5c81074a407 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-points.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-points.dtx @@ -1,6 +1,8 @@ % \iffalse meta-comment % -%% File: l3draw-points.dtx Copyright(C) 2018 The LaTeX3 Project +%% File: l3draw-points.dtx +% +% Copyright (C) 2018,2019 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 @@ -42,7 +44,7 @@ % }^^A % } % -% \date{Released 2018-11-19} +% \date{Released 2019-01-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-scopes.dtx b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-scopes.dtx index 8d2b93093ad..c3d98b5d52b 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-scopes.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-scopes.dtx @@ -1,6 +1,8 @@ % \iffalse meta-comment % -%% File: l3draw-scopes.dtx Copyright(C) 2018 The LaTeX3 Project +%% File: l3draw-scopes.dtx +% +% Copyright (C) 2018,2019 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 @@ -42,7 +44,7 @@ % }^^A % } % -% \date{Released 2018-11-19} +% \date{Released 2019-01-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-softpath.dtx b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-softpath.dtx index 99da2d119e4..7fe7a37bbd6 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-softpath.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-softpath.dtx @@ -1,6 +1,8 @@ % \iffalse meta-comment % -%% File: l3draw-softpath.dtx Copyright(C) 2018 The LaTeX3 Project +%% File: l3draw-softpath.dtx +% +% Copyright (C) 2018,2019 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 @@ -42,7 +44,7 @@ % }^^A % } % -% \date{Released 2018-11-19} +% \date{Released 2019-01-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-state.dtx b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-state.dtx index 8f1276e5450..fed90c69032 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-state.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-state.dtx @@ -1,6 +1,8 @@ % \iffalse meta-comment % -%% File: l3draw-state.dtx Copyright(C) 2018 The LaTeX3 Project +%% File: l3draw-state.dtx +% +% Copyright (C) 2018,2019 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 @@ -42,7 +44,7 @@ % }^^A % } % -% \date{Released 2018-11-19} +% \date{Released 2019-01-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-transforms.dtx b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-transforms.dtx index 2fba1a421fa..e7b74452852 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-transforms.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-transforms.dtx @@ -1,6 +1,8 @@ % \iffalse meta-comment % -%% File: l3draw-transforms.dtx Copyright(C) 2018 The LaTeX3 Project +%% File: l3draw-transforms.dtx +% +% Copyright (C) 2018,2019 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 @@ -42,7 +44,7 @@ % }^^A % } % -% \date{Released 2018-11-19} +% \date{Released 2019-01-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw.dtx b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw.dtx index a409de15881..90e9b27e28b 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw.dtx @@ -1,6 +1,8 @@ % \iffalse meta-comment % -%% File: l3draw.dtx Copyright(C) 2018 The LaTeX3 Project +%% File: l3draw.dtx +% +% Copyright(C) 2018,2019 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 @@ -109,7 +111,7 @@ % }^^A % } % -% \date{Released 2018-11-19} +% \date{Released 2019-01-28} % % \maketitle % @@ -991,7 +993,7 @@ % \begin{function} % {\draw_transform_matrix:nnnn, \draw_transform_matrix_concat:nnnn} % \begin{syntax} -% \cs{draw_transform_matrix:nnnnn} +% \cs{draw_transform_matrix:nnnn} % \Arg{a} \Arg{b} \Arg{c} \Arg{d} % \end{syntax} % Applies the transformation matrix $[ \meta{a} \meta{b} \meta{c} \meta{d}]$. @@ -1033,7 +1035,7 @@ % { % \draw_transform_scale:n, % \draw_transform_xscale:n, -% \draw_transform_xscale:n +% \draw_transform_yscale:n % } % \begin{syntax} % \cs{draw_transform_scale:n} \Arg{scale} @@ -1049,7 +1051,6 @@ % \draw_transform_yshift:n % } % \begin{syntax} -% \cs{draw_transform_shift:n} \Arg{vector} % \cs{draw_transform_xshift:n} \Arg{xshift} % \end{syntax} % Applies an \meta{xshift} or \meta{yshift}, as appropriate. This shift is @@ -1081,7 +1082,7 @@ % \end{function} % % \begin{function} -% {\draw_transform_matrix_reset, \draw_transform_shift_reset:} +% {\draw_transform_matrix_reset:, \draw_transform_shift_reset:} % \begin{syntax} % \cs{draw_transform_matrix_reset:} % \end{syntax} @@ -1106,7 +1107,7 @@ % % \begin{macrocode} %<*package> -\ProvidesExplPackage{l3draw}{2018-11-19}{} +\ProvidesExplPackage{l3draw}{2019-01-28}{} {L3 Experimental core drawing support} %</package> % \end{macrocode} diff --git a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw.ins b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw.ins index e91015c2ba1..855f033a8de 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw.ins +++ b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw.ins @@ -1,6 +1,8 @@ \iffalse meta-comment -File l3draw.ins Copyright (C) 2018 The LaTeX3 Project +File: l3draw.ins + +Copyright (C) 2018,2019 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 @@ -32,7 +34,7 @@ license information is placed in the derived files. \preamble -Copyright (C) 2018 The LaTeX3 Project +Copyright (C) 2018,2019 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 diff --git a/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-convert.dtx b/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-convert.dtx index c26e6eaf82b..f3e757dba7a 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-convert.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-convert.dtx @@ -1,6 +1,6 @@ % \iffalse meta-comment % -%% File: l3str-convert.dtx Copyright (C) 2013-2018 The LaTeX3 Project +%% File: l3str-convert.dtx Copyright (C) 2013-2019 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,7 +46,7 @@ % }^^A % } % -% \date{Released 2018-11-19} +% \date{Released 2019-01-28} % % \maketitle % @@ -234,7 +234,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{l3str-convert}{2018-11-19}{} +\ProvidesExplPackage{l3str-convert}{2019-01-28}{} {L3 Experimental string encoding conversions} % \end{macrocode} % diff --git a/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-format.dtx b/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-format.dtx index bdd0426712d..8f8ad52bee4 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-format.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-format.dtx @@ -1,6 +1,8 @@ % \iffalse meta-comment % -%% File: l3str-format.dtx Copyright (C) 2012-2018 The LaTeX3 Project +%% File: l3str-format.dtx +% +% Copyright (C) 2012-2019 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,7 +48,7 @@ % }^^A % } % -% \date{Released 2018-11-19} +% \date{Released 2019-01-28} % % \maketitle % @@ -162,7 +164,7 @@ % % \begin{macrocode} %<*package> -\ProvidesExplPackage{l3str-format}{2018-11-19}{} +\ProvidesExplPackage{l3str-format}{2019-01-28}{} {L3 Experimental string formatting} %</package> % \end{macrocode} diff --git a/Master/texmf-dist/source/latex/l3experimental/l3str/l3str.ins b/Master/texmf-dist/source/latex/l3experimental/l3str/l3str.ins index 944541e77b7..959deb3b576 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3str/l3str.ins +++ b/Master/texmf-dist/source/latex/l3experimental/l3str/l3str.ins @@ -1,6 +1,8 @@ \iffalse meta-comment -File l3str.ins Copyright (C) 2011-2017 The LaTeX3 Project +File l3str.ins + +Copyright (C) 2011-2017,2019 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 @@ -32,7 +34,7 @@ license information is placed in the derived files. \preamble -Copyright (C) 2011-2017 The LaTeX3 Project +Copyright (C) 2011-2019 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 diff --git a/Master/texmf-dist/source/latex/l3experimental/l3sys-shell/l3sys-shell.dtx b/Master/texmf-dist/source/latex/l3experimental/l3sys-shell/l3sys-shell.dtx index a1b7af274ba..053a119358a 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3sys-shell/l3sys-shell.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3sys-shell/l3sys-shell.dtx @@ -1,6 +1,8 @@ % \iffalse meta-comment % -%% File: l3sys-shell.dtx Copyright(C) 2018 The LaTeX3 Project +%% File: l3sys-shell.dtx +% +% Copyright (C) 2018,2019 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 @@ -44,7 +46,7 @@ % }^^A % } % -% \date{Released 2018-11-19} +% \date{Released 2019-01-28} % % \maketitle % @@ -134,7 +136,7 @@ % % \begin{macrocode} %<*package> -\ProvidesExplPackage{l3sys-shell}{2018-11-19}{} +\ProvidesExplPackage{l3sys-shell}{2019-01-28}{} {L3 Experimental system shell functions} %</package> % \end{macrocode} @@ -308,7 +310,11 @@ { \sys_if_shell_unrestricted:T { - \exp_not:N \tl_set_from_shell:Nnn \exp_not:N \l_@@_tmp_tl + \exp_not:N \sys_shell_get:nnN + { + \sys_if_platform_unix:T { pwd } + \sys_if_platform_windows:T { cd } + } { \char_set_catcode_other:N \exp_not:N \\ \char_set_catcode_other:N \exp_not:N \# @@ -316,10 +322,7 @@ \char_set_catcode_other:N \exp_not:N \% \char_set_catcode_space:N \exp_not:N \ % } - { - \sys_if_platform_unix:T { pwd } - \sys_if_platform_windows:T { cd } - } + \exp_not:N \l_@@_tmp_tl \str_set:NV #1 \exp_not:N \l_@@_tmp_tl } } @@ -336,7 +339,11 @@ { \sys_if_shell_unrestricted:T { - \exp_not:N \tl_set_from_shell:Nnn \exp_not:N \l_@@_tmp_tl + \exp_not:N \sys_shell_get:nnN + { + \sys_if_platform_unix:T { ls~-1~ #1 } + \sys_if_platform_windows:T { dir~/b~ #1 } + } { \ExplSyntaxOff \char_set_catcode_other:N \exp_not:N \\ @@ -345,10 +352,7 @@ \char_set_catcode_other:N \exp_not:N \% \char_set_catcode_other:n { 13 } } - { - \sys_if_platform_unix:T { ls~-1~ #1 } - \sys_if_platform_windows:T { dir~/b~ #1 } - } + \exp_not:N \l_@@_tmp_tl \str_set:NV \exp_not:N \l_@@_tmp_tl \exp_not:N \l_@@_tmp_tl \seq_set_split:NnV #2 { \char_generate:nn { `\^^M } { 12 } } \exp_not:N \l_@@_tmp_tl diff --git a/Master/texmf-dist/source/latex/l3experimental/l3sys-shell/l3sys-shell.ins b/Master/texmf-dist/source/latex/l3experimental/l3sys-shell/l3sys-shell.ins index 33dbe46ea21..acf3c1d7102 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3sys-shell/l3sys-shell.ins +++ b/Master/texmf-dist/source/latex/l3experimental/l3sys-shell/l3sys-shell.ins @@ -1,6 +1,8 @@ \iffalse meta-comment -File l3sys-shell.ins Copyright (C) 2018 The LaTeX3 Project +File: l3sys-shell.ins + +Copyright (C) 2018,2019 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 @@ -32,7 +34,7 @@ license information is placed in the derived files. \preamble -Copyright (C) 2018 The LaTeX3 Project +Copyright (C) 2018,2019 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 diff --git a/Master/texmf-dist/source/latex/l3experimental/xcoffins/xcoffins.dtx b/Master/texmf-dist/source/latex/l3experimental/xcoffins/xcoffins.dtx index 4c2a45bdd69..8ba2b02d0ce 100644 --- a/Master/texmf-dist/source/latex/l3experimental/xcoffins/xcoffins.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/xcoffins/xcoffins.dtx @@ -1,6 +1,8 @@ % \iffalse meta-comment % -%% File: xcoffins.dtx Copyright(C) 2010-2012,2014,2016-2018 The LaTeX3 Project +%% File: xcoffins.dtx +% +% Copyright (C) 2010-2012,2014,2016-2019 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 @@ -54,7 +56,7 @@ % }^^A % } % -% \date{Released 2018-11-19} +% \date{Released 2019-01-28} % % \maketitle % @@ -673,7 +675,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{xcoffins}{2018-11-19}{} +\ProvidesExplPackage{xcoffins}{2019-01-28}{} {L3 Experimental design level coffins} % \end{macrocode} % diff --git a/Master/texmf-dist/source/latex/l3experimental/xcoffins/xcoffins.ins b/Master/texmf-dist/source/latex/l3experimental/xcoffins/xcoffins.ins index 9b70480da4c..065cb5eae7f 100644 --- a/Master/texmf-dist/source/latex/l3experimental/xcoffins/xcoffins.ins +++ b/Master/texmf-dist/source/latex/l3experimental/xcoffins/xcoffins.ins @@ -1,6 +1,8 @@ \iffalse meta-comment -File xcoffins.ins Copyright (C) 2010,2011,2012,2016,2017 The LaTeX3 Project +File: xcoffins.ins + +Copyright (C) 2010,2011,2012,2016,2017,2019 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 @@ -32,7 +34,7 @@ license information is placed in the derived files. \preamble -Copyright (C) 2010-2017 The LaTeX3 Project +Copyright (C) 2010-2019 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 diff --git a/Master/texmf-dist/source/latex/l3experimental/xgalley/l3galley.dtx b/Master/texmf-dist/source/latex/l3experimental/xgalley/l3galley.dtx index 7ff6508cbb7..e4093ad833d 100644 --- a/Master/texmf-dist/source/latex/l3experimental/xgalley/l3galley.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/xgalley/l3galley.dtx @@ -1,7 +1,9 @@ % \iffalse % -%% File: l3galley.dtx Copyright (C) 1999-2001, 2004-2009 Frank Mittelbach -%% (C) 2010-2018 The LaTeX3 Project +%% File: l3galley.dtx +% +% Copyright (C) 1999-2001,2004-2009 Frank Mittelbach +% (C) 2010-2019 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 @@ -59,7 +61,7 @@ % }^^A % } % -% \date{Released 2018-11-19} +% \date{Released 2019-01-28} % % \maketitle % @@ -685,7 +687,7 @@ % % \begin{macrocode} %<*package> -\ProvidesExplPackage{l3galley}{2018-11-19}{} +\ProvidesExplPackage{l3galley}{2019-01-28}{} {L3 Experimental galley code} %</package> % \end{macrocode} diff --git a/Master/texmf-dist/source/latex/l3experimental/xgalley/xgalley.dtx b/Master/texmf-dist/source/latex/l3experimental/xgalley/xgalley.dtx index 92368b98a7e..5c1831a6800 100644 --- a/Master/texmf-dist/source/latex/l3experimental/xgalley/xgalley.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/xgalley/xgalley.dtx @@ -1,7 +1,9 @@ % \iffalse % -%% File: xgalley.dtx Copyright (C) 1999-2001, 2004-2009 Frank Mittelbach -%% (C) 2010-2012,2014,2016-2018 The LaTeX3 Project +%% File: xgalley.dtx +% +% Copyright (C) 1999-2001,2004-2009 Frank Mittelbach +% (C) 2010-2012,2014,2016-2019 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 @@ -45,7 +47,7 @@ % }^^A % } % -% \date{Released 2018-11-19} +% \date{Released 2019-01-28} % % \maketitle % @@ -732,7 +734,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{xgalley}{2018-11-19}{} +\ProvidesExplPackage{xgalley}{2019-01-28}{} {L3 Experimental galley} \RequirePackage{xparse,xtemplate,l3galley} % \end{macrocode} diff --git a/Master/texmf-dist/source/latex/l3experimental/xgalley/xgalley.ins b/Master/texmf-dist/source/latex/l3experimental/xgalley/xgalley.ins index 5ef421779d4..13388c46d8c 100644 --- a/Master/texmf-dist/source/latex/l3experimental/xgalley/xgalley.ins +++ b/Master/texmf-dist/source/latex/l3experimental/xgalley/xgalley.ins @@ -1,6 +1,8 @@ \iffalse meta-comment -File xgalley.ins Copyright (C) 2010-2012,2016,2017 The LaTeX3 Project +File: xgalley.ins + +Copyright (C) 2010-2012,2016,2017,2019 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 @@ -32,7 +34,7 @@ license information is placed in the derived files. \preamble -Copyright (C) 2010-2017 The LaTeX3 Project +Copyright (C) 2010-2019 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 diff --git a/Master/texmf-dist/source/latex/l3kernel/expl3.dtx b/Master/texmf-dist/source/latex/l3kernel/expl3.dtx index 73eb2f404c3..be3e7eeb1c5 100644 --- a/Master/texmf-dist/source/latex/l3kernel/expl3.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/expl3.dtx @@ -1,6 +1,8 @@ % \iffalse meta-comment % -%% File: expl3.dtx Copyright (C) 1990-2019 The LaTeX3 Project +%% File: expl3.dtx +% +% Copyright (C) 1990-2019 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 @@ -21,7 +23,7 @@ % for those people who are interested. % %<*driver|generic|package> -\def\ExplFileDate{2019-01-13}% +\def\ExplFileDate{2019-01-28}% %</driver|generic|package> %<*driver> \documentclass[full]{l3doc} @@ -49,7 +51,7 @@ % }^^A % } % -% \date{Released 2019-01-13} +% \date{Released 2019-01-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3.ins b/Master/texmf-dist/source/latex/l3kernel/l3.ins index cbd58c8e296..73132b1e222 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3.ins +++ b/Master/texmf-dist/source/latex/l3kernel/l3.ins @@ -1,6 +1,8 @@ \iffalse meta-comment -File l3.ins Copyright (C) 2011,2012,2014-2018 The LaTeX3 Project +File l3.ins + +Copyright (C) 2011,2012,2014-2018 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 @@ -33,7 +35,7 @@ license information is placed in the derived files. \preamble -Copyright (C) 1990-2018 The LaTeX3 Project +Copyright (C) 1990-2019 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 diff --git a/Master/texmf-dist/source/latex/l3kernel/l3alloc.dtx b/Master/texmf-dist/source/latex/l3kernel/l3alloc.dtx index 68446087540..ea5a6332307 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3alloc.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3alloc.dtx @@ -1,6 +1,8 @@ % \iffalse meta-comment % -%% File: l3alloc.dtx Copyright (C) 1990-2012,2014-2019 The LaTeX3 Project +%% File: l3alloc.dtx +% +% Copyright (C) 1990-2012,2014-2019 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,7 +43,7 @@ % }^^A % } % -% \date{Released 2019-01-13} +% \date{Released 2019-01-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx b/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx index c18e497be61..cb60f38390d 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx @@ -1,6 +1,8 @@ % \iffalse meta-comment % -%% File: l3basics.dtx Copyright (C) 1990-2019 The LaTeX3 project +%% File: l3basics.dtx +% +% Copyright (C) 1990-2019 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,7 +43,7 @@ % }^^A % } % -% \date{Released 2019-01-13} +% \date{Released 2019-01-28} % % \maketitle % @@ -947,9 +949,10 @@ % \emph{but} the function remains fully expandable, and parameter % character (usually~|#|) need not be doubled. % \begin{texnote} -% \cs{use:e} the a wrapper around the primitive \tn{expanded} +% \cs{use:e} is a wrapper around the primitive \tn{expanded} % where it is available: % it requires two expansions to complete its action. +% When \tn{expanded} is not available this function is very slow. % \end{texnote} % \end{function} % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx b/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx index 22b0b8a366b..5a6eb3ba7f8 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx @@ -1,6 +1,8 @@ % \iffalse meta-comment % -%% File: l3bootstrap.dtx Copyright (C) 2011-2019 The LaTeX3 project +%% File: l3bootstrap.dtx +% +% Copyright (C) 2011-2019 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 @@ -138,7 +140,7 @@ % }^^A % } % -% \date{Released 2019-01-13} +% \date{Released 2019-01-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3box.dtx b/Master/texmf-dist/source/latex/l3kernel/l3box.dtx index 281c910e1ce..747d32fc7b3 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3box.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3box.dtx @@ -1,6 +1,8 @@ % \iffalse meta-comment % -%% File: l3box.dtx Copyright (C) 2005-2019 The LaTeX3 Project +%% File: l3box.dtx +% +% Copyright (C) 2005-2019 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,7 +43,7 @@ % }^^A % } % -% \date{Released 2019-01-13} +% \date{Released 2019-01-28} % % \maketitle % @@ -92,30 +94,6 @@ % Sets the content of \meta{box_1} equal to that of \meta{box_2}. % \end{function} % -% \begin{function} -% { -% \box_set_eq_clear:NN, \box_set_eq_clear:cN, -% \box_set_eq_clear:Nc, \box_set_eq_clear:cc -% } -% \begin{syntax} -% \cs{box_set_eq_clear:NN} \meta{box_1} \meta{box_2} -% \end{syntax} -% Sets the content of \meta{box_1} within the current \TeX{} group -% equal to that of \meta{box_2}, then clears \meta{box_2} globally. -% \end{function} -% -% \begin{function} -% { -% \box_gset_eq_clear:NN, \box_gset_eq_clear:cN, -% \box_gset_eq_clear:Nc, \box_gset_eq_clear:cc -% } -% \begin{syntax} -% \cs{box_gset_eq_clear:NN} \meta{box_1} \meta{box_2} -% \end{syntax} -% Sets the content of \meta{box_1} equal to that of \meta{box_2}, then -% clears \meta{box_2}. These assignments are global. -% \end{function} -% % \begin{function}[EXP, pTF, added=2012-03-03] % {\box_if_exist:N, \box_if_exist:c} % \begin{syntax} @@ -140,42 +118,6 @@ % \end{texnote} % \end{function} % -% \begin{function}{\box_use_drop:N, \box_use_drop:c} -% \begin{syntax} -% \cs{box_use_drop:N} \meta{box} -% \end{syntax} -% Inserts the current content of the \meta{box} onto the current -% list for typesetting. An error is raised if the variable does -% not exist or if it is invalid. -% -% The \meta{box} is then cleared at the group level the -% box was set at, \emph{i.e.}~the current content is \enquote{dropped} entirely. -% For example, with -% \begin{verbatim} -% \hbox_set:Nn \l_tmpa_box { A } -% \group_begin: -% \hbox_set:Nn \l_tmpa_box { B } -% \group_begin: -% \box_use_drop:N \l_tmpa_box -% \group_end: -% \box_show:N \l_tmpa_box -% \group_end: -% \box_show:N \l_tmpa_box -% \end{verbatim} -% the first use of \cs{box_show:N} will show an entirely cleared (void) box, and the -% second will show the letter |A| in the box. -% -% This function is useful as boxes can contain an open-ended amount of material. As -% such, they can have a significant memory impact on \TeX{}. At the same time, it is -% often the case that once a box has been inserted, it is no longer needed at all. -% Using \cs{box_use_drop:N} in these circumstances therefore offers improved memory -% use and performance. It should therefore be preferred over \cs{box_use:N} where -% it is clear that the content is no longer needed in the variable. -% \begin{texnote} -% This is the \TeX{} primitive \tn{box}. -% \end{texnote} -% \end{function} -% % \begin{function}{\box_move_right:nn, \box_move_left:nn} % \begin{syntax} % \cs{box_move_right:nn} \Arg{dimexpr} \Arg{box function} @@ -237,28 +179,40 @@ % \end{texnote} % \end{function} % -% \begin{function}[updated = 2011-10-22]{\box_set_dp:Nn, \box_set_dp:cn} +% \begin{function}[updated = 2019-01-22] +% { +% \box_set_dp:Nn, \box_set_dp:cn, +% \box_gset_dp:Nn, \box_gset_dp:cn +% } % \begin{syntax} % \cs{box_set_dp:Nn} \meta{box} \Arg{dimension expression} % \end{syntax} % Set the depth (below the baseline) of the \meta{box} to the value of -% the \Arg{dimension expression}. This is a global assignment. +% the \Arg{dimension expression}. % \end{function} % -% \begin{function}[updated = 2011-10-22]{\box_set_ht:Nn, \box_set_ht:cn} +% \begin{function}[updated = 2019-01-22] +% { +% \box_set_ht:Nn, \box_set_ht:cn, +% \box_gset_ht:Nn, \box_gset_ht:cn +% } % \begin{syntax} % \cs{box_set_ht:Nn} \meta{box} \Arg{dimension expression} % \end{syntax} % Set the height (above the baseline) of the \meta{box} to the value of -% the \Arg{dimension expression}. This is a global assignment. +% the \Arg{dimension expression}. % \end{function} % -% \begin{function}[updated = 2011-10-22]{\box_set_wd:Nn, \box_set_wd:cn} +% \begin{function}[updated = 2019-01-22] +% { +% \box_set_wd:Nn, \box_set_wd:cn, +% \box_gset_wd:Nn, \box_gset_wd:cn +% } % \begin{syntax} % \cs{box_set_wd:Nn} \meta{box} \Arg{dimension expression} % \end{syntax} % Set the width of the \meta{box} to the value of the -% \Arg{dimension expression}. This is a global assignment. +% \Arg{dimension expression}. % \end{function} % % \section{Box conditionals} @@ -475,18 +429,6 @@ % \end{texnote} % \end{function} % -% \begin{function}{\hbox_unpack_clear:N, \hbox_unpack_clear:c} -% \begin{syntax} -% \cs{hbox_unpack_clear:N} \meta{box} -% \end{syntax} -% Unpacks the content of the horizontal \meta{box}, retaining any stretching -% or shrinking applied when the \meta{box} was set. The \meta{box} is -% then cleared globally. -% \begin{texnote} -% This is the \TeX{} primitive \tn{unhbox}. -% \end{texnote} -% \end{function} -% % \section{Vertical mode boxes} % % Vertical boxes inherit their baseline from their contents. The @@ -623,13 +565,91 @@ % \end{texnote} % \end{function} % -% \begin{function}{\vbox_unpack_clear:N, \vbox_unpack_clear:c} +% \section{Using boxes efficiently} +% +% The functions above for using box contents work in exactly the same +% way as for any other \pkg{expl3} variable. However, for efficiency +% reasons, it is also useful to have functions which \emph{drop} box +% contents on use. When a box is dropped, the box becomes empty at the group +% level \emph{where the box was originally set} rather than necessarily +% \emph{at the current group level}. For example, with +% \begin{verbatim} +% \hbox_set:Nn \l_tmpa_box { A } +% \group_begin: +% \hbox_set:Nn \l_tmpa_box { B } +% \group_begin: +% \box_use_drop:N \l_tmpa_box +% \group_end: +% \box_show:N \l_tmpa_box +% \group_end: +% \box_show:N \l_tmpa_box +% \end{verbatim} +% the first use of \cs{box_show:N} will show an entirely cleared (void) box, and the +% second will show the letter |A| in the box. +% +% These functions should be preferred when the content of the box is no +% longer required after use. Note that due to the unusual scoping behaviour of +% \texttt{drop} functions they may be applied to both local and global boxes: +% the latter will naturally be set and thus cleared at a global level. +% +% \begin{function}{\box_use_drop:N, \box_use_drop:c} +% \begin{syntax} +% \cs{box_use_drop:N} \meta{box} +% \end{syntax} +% Inserts the current content of the \meta{box} onto the current +% list for typesetting then drops the box content. An error is raised if the +% variable does not exist or if it is invalid. This function may be applied to +% local or global boxes. +% \begin{texnote} +% This is the \tn{box} primitive. +% \end{texnote} +% \end{function} +% +% \begin{function}[added = 2019-01-17] +% { +% \box_set_eq_drop:NN, \box_set_eq_drop:cN, +% \box_set_eq_drop:Nc, \box_set_eq_drop:cc +% } % \begin{syntax} -% \cs{vbox_unpack:N} \meta{box} +% \cs{box_set_eq_drop:NN} \meta{box_1} \meta{box_2} +% \end{syntax} +% Sets the content of \meta{box_1} equal to that of \meta{box_2}, then +% drops \meta{box_2}. +% \end{function} +% +% \begin{function}[added = 2019-01-17] +% { +% \box_gset_eq_drop:NN, \box_gset_eq_drop:cN, +% \box_gset_eq_drop:Nc, \box_gset_eq_drop:cc +% } +% \begin{syntax} +% \cs{box_gset_eq_drop:NN} \meta{box_1} \meta{box_2} +% \end{syntax} +% Sets the content of \meta{box_1} globally equal to that of \meta{box_2}, +% then drops \meta{box_2}. +% \end{function} +% +% \begin{function}[added = 2019-01-17] +% {\hbox_unpack_drop:N, \hbox_unpack_drop:c} +% \begin{syntax} +% \cs{hbox_unpack_drop:N} \meta{box} +% \end{syntax} +% Unpacks the content of the horizontal \meta{box}, retaining any stretching +% or shrinking applied when the \meta{box} was set. The original \meta{box} +% is then dropped. +% \begin{texnote} +% This is the \TeX{} primitive \tn{unhbox}. +% \end{texnote} +% \end{function} +% +% \begin{function}[added = 2019-01-17] +% {\vbox_unpack_drop:N, \vbox_unpack_drop:c} +% \begin{syntax} +% \cs{vbox_unpack_drop:N} \meta{box} % \end{syntax} % Unpacks the content of the vertical \meta{box}, retaining any stretching -% or shrinking applied when the \meta{box} was set. The \meta{box} -% is then cleared globally. +% or shrinking applied when the \meta{box} was set. The original \meta{box} +% is then dropped. % \begin{texnote} % This is the \TeX{} primitive \tn{unvbox}. % \end{texnote} @@ -643,8 +663,11 @@ % On the other hand, rotation and resizing of boxed material can best be % handled by modifying boxes. These transformations are described here. % -% \begin{function}[added = 2017-04-04] -% {\box_autosize_to_wd_and_ht:Nnn, \box_autosize_to_wd_and_ht:cnn} +% \begin{function}[added = 2017-04-04, updated = 2019-01-22] +% { +% \box_autosize_to_wd_and_ht:Nnn, \box_autosize_to_wd_and_ht:cnn, +% \box_gautosize_to_wd_and_ht:Nnn, \box_gautosize_to_wd_and_ht:cnn, +% } % \begin{syntax} % \cs{box_autosize_to_wd_and_ht:Nnn} \meta{box} \Arg{x-size} \Arg{y-size} % \end{syntax} @@ -658,12 +681,16 @@ % sizes cause the material in the \meta{box} to be reversed in direction, % but the reference point of the \meta{box} is unchanged. Thus a negative % \meta{y-size} results in the \meta{box} having a depth dependent on the -% height of the original and \emph{vice versa}. The resizing applies within -% the current \TeX{} group level. +% height of the original and \emph{vice versa}. % \end{function} % -% \begin{function}[added = 2017-04-04] -% {\box_autosize_to_wd_and_ht_plus_dp:Nnn, \box_autosize_to_wd_and_ht_plus_dp:cnn} +% \begin{function}[added = 2017-04-04, updated = 2019-01-22] +% { +% \box_autosize_to_wd_and_ht_plus_dp:Nnn, +% \box_autosize_to_wd_and_ht_plus_dp:cnn, +% \box_gautosize_to_wd_and_ht_plus_dp:Nnn, +% \box_gautosize_to_wd_and_ht_plus_dp:cnn +% } % \begin{syntax} % \cs{box_autosize_to_wd_and_ht_plus_dp:Nnn} \meta{box} \Arg{x-size} \Arg{y-size} % \end{syntax} @@ -677,12 +704,14 @@ % sizes cause the material in the \meta{box} to be reversed in direction, % but the reference point of the \meta{box} is unchanged. Thus a negative % \meta{y-size} results in the \meta{box} having a depth dependent on the -% height of the original and \emph{vice versa}. The resizing applies within -% the current \TeX{} group level. +% height of the original and \emph{vice versa}. % \end{function} % -% \begin{function} -% {\box_resize_to_ht:Nn, \box_resize_to_ht:cn} +% \begin{function}[updated = 2019-01-22] +% { +% \box_resize_to_ht:Nn, \box_resize_to_ht:cn, +% \box_gresize_to_ht:Nn, \box_gresize_to_ht:cn +% } % \begin{syntax} % \cs{box_resize_to_ht:Nn} \meta{box} \Arg{y-size} % \end{syntax} @@ -694,12 +723,14 @@ % material in the \meta{box} to be reversed in direction, but the reference % point of the \meta{box} is unchanged. Thus a negative \meta{y-size} % results in the \meta{box} having a depth dependent on the height of the -% original and \emph{vice versa}. The resizing applies within the current -% \TeX{} group level. +% original and \emph{vice versa}. % \end{function} % -% \begin{function} -% {\box_resize_to_ht_plus_dp:Nn, \box_resize_to_ht_plus_dp:cn} +% \begin{function}[updated = 2019-01-22] +% { +% \box_resize_to_ht_plus_dp:Nn, \box_resize_to_ht_plus_dp:cn, +% \box_gresize_to_ht_plus_dp:Nn, \box_gresize_to_ht_plus_dp:cn, +% } % \begin{syntax} % \cs{box_resize_to_ht_plus_dp:Nn} \meta{box} \Arg{y-size} % \end{syntax} @@ -711,11 +742,14 @@ % the material in the \meta{box} to be reversed in direction, but the % reference point of the \meta{box} is unchanged. Thus a negative % \meta{y-size} results in the \meta{box} having a depth dependent on the -% height of the original and \emph{vice versa}. The resizing applies within -% the current \TeX{} group level. +% height of the original and \emph{vice versa}. % \end{function} % -% \begin{function}{\box_resize_to_wd:Nn, \box_resize_to_wd:cn} +% \begin{function}[updated = 2019-01-22] +% { +% \box_resize_to_wd:Nn, \box_resize_to_wd:cn, +% \box_gresize_to_wd:Nn, \box_gresize_to_wd:cn +% } % \begin{syntax} % \cs{box_resize_to_wd:Nn} \meta{box} \Arg{x-size} % \end{syntax} @@ -726,12 +760,14 @@ % material in the \meta{box} to be reversed in direction, but the reference % point of the \meta{box} is unchanged. Thus a negative \meta{x-size} % results in the \meta{box} having a depth dependent on the height of the -% original and \emph{vice versa}. The resizing applies within the current -% \TeX{} group level. +% original and \emph{vice versa}. % \end{function} % -% \begin{function}[added = 2014-07-03] -% {\box_resize_to_wd_and_ht:Nnn, \box_resize_to_wd_and_ht:cnn} +% \begin{function}[added = 2014-07-03, updated = 2019-01-22] +% { +% \box_resize_to_wd_and_ht:Nnn, \box_resize_to_wd_and_ht:cnn, +% \box_gresize_to_wd_and_ht:Nnn, \box_gresize_to_wd_and_ht:cnn +% } % \begin{syntax} % \cs{box_resize_to_wd_and_ht:Nnn} \meta{box} \Arg{x-size} \Arg{y-size} % \end{syntax} @@ -743,12 +779,16 @@ % the \meta{box} to be reversed in direction, but the reference point of the % \meta{box} is unchanged. Thus a negative \meta{y-size} results in % the \meta{box} having a depth dependent on the height of the original and -% \emph{vice versa}. The resizing applies within the current \TeX{} group -% level. +% \emph{vice versa}. % \end{function} % -% \begin{function}[added = 2017-04-06] -% {\box_resize_to_wd_and_ht_plus_dp:Nnn, \box_resize_to_wd_and_ht_plus_dp:cnn} +% \begin{function}[added = 2017-04-06, updated = 2019-01-22] +% { +% \box_resize_to_wd_and_ht_plus_dp:Nnn, +% \box_resize_to_wd_and_ht_plus_dp:cnn, +% \box_gresize_to_wd_and_ht_plus_dp:Nnn, +% \box_gresize_to_wd_and_ht_plus_dp:cnn +% } % \begin{syntax} % \cs{box_resize_to_wd_and_ht_plus_dp:Nnn} \meta{box} \Arg{x-size} \Arg{y-size} % \end{syntax} @@ -760,11 +800,14 @@ % the \meta{box} to be reversed in direction, but the reference point of the % \meta{box} is unchanged. Thus a negative \meta{y-size} results in % the \meta{box} having a depth dependent on the height of the original and -% \emph{vice versa}. The resizing applies within the current \TeX{} group -% level. +% \emph{vice versa}. % \end{function} % -% \begin{function}{\box_rotate:Nn, \box_rotate:cn} +% \begin{function}[updated = 2019-01-22] +% { +% \box_rotate:Nn, \box_rotate:cn, +% \box_grotate:Nn, \box_grotate:cn +% } % \begin{syntax} % \cs{box_rotate:Nn} \meta{box} \Arg{angle} % \end{syntax} @@ -773,10 +816,13 @@ % horizontally such that it is at the left side of the smallest rectangle % enclosing the rotated material. The updated \meta{box} is an |hbox|, % irrespective of the nature of the \meta{box} before the rotation is applied. -% The rotation applies within the current \TeX{} group level. % \end{function} % -% \begin{function}{\box_scale:Nnn, \box_scale:cnn} +% \begin{function}[updated = 2019-01-22] +% { +% \box_scale:Nnn, \box_scale:cnn, +% \box_gscale:Nnn, \box_gscale:cnn +% } % \begin{syntax} % \cs{box_scale:Nnn} \meta{box} \Arg{x-scale} \Arg{y-scale} % \end{syntax} @@ -787,8 +833,7 @@ % scalings cause the material in the \meta{box} to be reversed in % direction, but the reference point of the \meta{box} is unchanged. % Thus a negative \meta{y-scale} results in the \meta{box} having a depth -% dependent on the height of the original and \emph{vice versa}. The resizing -% applies within the current \TeX{} group level. +% dependent on the height of the original and \emph{vice versa}. % \end{function} % % \section{Primitive box conditionals} @@ -941,27 +986,25 @@ % % \begin{macro} % { -% \box_set_eq_clear:NN, \box_set_eq_clear:cN, -% \box_set_eq_clear:Nc, \box_set_eq_clear:cc +% \box_set_eq_drop:NN, \box_set_eq_drop:cN, +% \box_set_eq_drop:Nc, \box_set_eq_drop:cc % } -% \testfile* % \begin{macro} % { -% \box_gset_eq_clear:NN, \box_gset_eq_clear:cN, -% \box_gset_eq_clear:Nc, \box_gset_eq_clear:cc +% \box_gset_eq_drop:NN, \box_gset_eq_drop:cN, +% \box_gset_eq_drop:Nc, \box_gset_eq_drop:cc % } -% \testfile* -% Assigning the contents of a box to be another box. -% This clears the second box globally (that's how \TeX{} does it). +% Assigning the contents of a box to be another box, then drops the +% original box. % \begin{macrocode} \__kernel_patch:nnNNpn { \__kernel_chk_var_local:N #1 } { } -\cs_new_protected:Npn \box_set_eq_clear:NN #1#2 +\cs_new_protected:Npn \box_set_eq_drop:NN #1#2 { \tex_setbox:D #1 \tex_box:D #2 } \__kernel_patch:nnNNpn { \__kernel_chk_var_global:N #1 } { } -\cs_new_protected:Npn \box_gset_eq_clear:NN #1#2 +\cs_new_protected:Npn \box_gset_eq_drop:NN #1#2 { \tex_global:D \tex_setbox:D #1 \tex_box:D #2 } -\cs_generate_variant:Nn \box_set_eq_clear:NN { c , Nc , cc } -\cs_generate_variant:Nn \box_gset_eq_clear:NN { c , Nc , cc } +\cs_generate_variant:Nn \box_set_eq_drop:NN { c , Nc , cc } +\cs_generate_variant:Nn \box_gset_eq_drop:NN { c , Nc , cc } % \end{macrocode} % \end{macro} % \end{macro} @@ -998,20 +1041,38 @@ % \begin{macro}{\box_set_ht:Nn, \box_set_ht:cn} % \begin{macro}{\box_set_dp:Nn, \box_set_dp:cn} % \begin{macro}{\box_set_wd:Nn, \box_set_wd:cn} -% Setting the size is easy: all primitive work. These primitives are not -% expandable, so the derived functions are not either. +% Setting the size whilst respecting local scope requires copying; +% the same issue does not come up when working globally. % When debugging, the dimension expression |#2| is surrounded by % parentheses to catch early termination. % \begin{macrocode} \cs_new_protected:Npn \box_set_dp:Nn #1#2 + { + \tex_setbox:D #1 = \tex_copy:D #1 + \box_dp:N #1 \@@_dim_eval:n {#2} + } +\cs_generate_variant:Nn \box_set_dp:Nn { c } +\cs_new_protected:Npn \box_gset_dp:Nn #1#2 { \box_dp:N #1 \@@_dim_eval:n {#2} } +\cs_generate_variant:Nn \box_gset_dp:Nn { c } \cs_new_protected:Npn \box_set_ht:Nn #1#2 + { + \tex_setbox:D #1 = \tex_copy:D #1 + \box_ht:N #1 \@@_dim_eval:n {#2} + } +\cs_generate_variant:Nn \box_set_ht:Nn { c } +\cs_new_protected:Npn \box_gset_ht:Nn #1#2 { \box_ht:N #1 \@@_dim_eval:n {#2} } +\cs_generate_variant:Nn \box_gset_ht:Nn { c } \cs_new_protected:Npn \box_set_wd:Nn #1#2 - { \box_wd:N #1 \@@_dim_eval:n {#2} } -\cs_generate_variant:Nn \box_set_ht:Nn { c } -\cs_generate_variant:Nn \box_set_dp:Nn { c } + { + \tex_setbox:D #1 = \tex_copy:D #1 + \box_wd:N #1 \@@_dim_eval:n {#2} + } \cs_generate_variant:Nn \box_set_wd:Nn { c } +\cs_new_protected:Npn \box_gset_wd:Nn #1#2 + { \box_wd:N #1 \@@_dim_eval:n {#2} } +\cs_generate_variant:Nn \box_gset_wd:Nn { c } % \end{macrocode} % \end{macro} % \end{macro} @@ -1355,14 +1416,14 @@ % \end{macro} % % \begin{macro}{\hbox_unpack:N, \hbox_unpack:c} -% \begin{macro}{\hbox_unpack_clear:N, \hbox_unpack_clear:c} +% \begin{macro}{\hbox_unpack_drop:N, \hbox_unpack_drop:c} % \testfile* % Unpacking a box and if requested also clear it. % \begin{macrocode} \cs_new_eq:NN \hbox_unpack:N \tex_unhcopy:D -\cs_new_eq:NN \hbox_unpack_clear:N \tex_unhbox:D +\cs_new_eq:NN \hbox_unpack_drop:N \tex_unhbox:D \cs_generate_variant:Nn \hbox_unpack:N { c } -\cs_generate_variant:Nn \hbox_unpack_clear:N { c } +\cs_generate_variant:Nn \hbox_unpack_drop:N { c } % \end{macrocode} % \end{macro} % \end{macro} @@ -1537,14 +1598,14 @@ % \end{macro} % % \begin{macro}{\vbox_unpack:N, \vbox_unpack:c} -% \begin{macro}{\vbox_unpack_clear:N, \vbox_unpack_clear:c} +% \begin{macro}{\vbox_unpack_drop:N, \vbox_unpack_drop:c} % \testfile* % Unpacking a box and if requested also clear it. % \begin{macrocode} \cs_new_eq:NN \vbox_unpack:N \tex_unvcopy:D -\cs_new_eq:NN \vbox_unpack_clear:N \tex_unvbox:D +\cs_new_eq:NN \vbox_unpack_drop:N \tex_unvbox:D \cs_generate_variant:Nn \vbox_unpack:N { c } -\cs_generate_variant:Nn \vbox_unpack_clear:N { c } +\cs_generate_variant:Nn \vbox_unpack_drop:N { c } % \end{macrocode} % \end{macro} % \end{macro} @@ -1627,7 +1688,12 @@ % \end{macrocode} % \end{variable} % -% \begin{macro}{\box_rotate:Nn} +% \begin{macro} +% { +% \box_rotate:Nn, \box_rotate:cn, +% \box_grotate:Nn, \box_grotate:cn +% } +% \begin{macro}{\@@_rotate:NnN} % \begin{macro}{\@@_rotate:N} % \begin{macro}{\@@_rotate_xdir:nnN, \@@_rotate_ydir:nnN} % \begin{macro} @@ -1640,8 +1706,14 @@ % clearer % \begin{macrocode} \cs_new_protected:Npn \box_rotate:Nn #1#2 + { \@@_rotate:NnN #1 {#2} \hbox_set:Nn } +\cs_generate_variant:Nn \box_rotate:Nn { c } +\cs_new_protected:Npn \box_grotate:Nn #1#2 + { \@@_rotate:NnN #1 {#2} \hbox_gset:Nn } +\cs_generate_variant:Nn \box_grotate:Nn { c } +\cs_new_protected:Npn \@@_rotate:NnN #1#2#3 { - \hbox_set:Nn #1 + #3 #1 { \fp_set:Nn \l_@@_angle_fp {#2} \fp_set:Nn \l_@@_sin_fp { sind ( \l_@@_angle_fp ) } @@ -1664,7 +1736,7 @@ % The next step is to work out the $x$ and $y$ coordinates of vertices of % the rotated box in relation to its original coordinates. The box can be % visualized with vertices $B$, $C$, $D$ and $E$ is illustrated -% (Figure~\ref{fig:l3candidates:rotation}). The vertex $O$ is the reference point +% (Figure~\ref{fig:l3box:rotation}). The vertex $O$ is the reference point % on the baseline, and in this implementation is also the centre of rotation. % \begin{figure} % \centering @@ -1682,7 +1754,7 @@ % \put(21,59){O} % \end{picture} % \caption{Co-ordinates of a box prior to rotation.} -% \label{fig:l3candidates:rotation} +% \label{fig:l3box:rotation} % \end{figure} % The formulae are, for a point $P$ and angle $\alpha$: % \[ @@ -1830,6 +1902,7 @@ % \end{macrocode} % \end{macro} % \end{macro} +% \end{macro} % % \begin{variable}{\l_@@_scale_x_fp, \l_@@_scale_y_fp} % Scaling is potentially-different in the two axes. @@ -1840,7 +1913,13 @@ % \end{variable} % % \begin{macro} -% {\box_resize_to_wd_and_ht_plus_dp:Nnn, \box_resize_to_wd_and_ht_plus_dp:cnn} +% { +% \box_resize_to_wd_and_ht_plus_dp:Nnn, +% \box_resize_to_wd_and_ht_plus_dp:cnn, +% \box_gresize_to_wd_and_ht_plus_dp:Nnn, +% \box_gresize_to_wd_and_ht_plus_dp:cnn +% } +% \begin{macro}{\@@_resize_to_wd_and_ht_plus_dp:NnnN} % \begin{macro}{\@@_resize_set_corners:N} % \begin{macro}{\@@_resize:N} % \begin{macro}{\@@_resize:NNN} @@ -1849,7 +1928,19 @@ % \begin{macrocode} \cs_new_protected:Npn \box_resize_to_wd_and_ht_plus_dp:Nnn #1#2#3 { - \hbox_set:Nn #1 + \@@_resize_to_wd_and_ht_plus_dp:NnnN #1 {#2} {#3} + \hbox_set:Nn + } +\cs_generate_variant:Nn \box_resize_to_wd_and_ht_plus_dp:Nnn { c } +\cs_new_protected:Npn \box_gresize_to_wd_and_ht_plus_dp:Nnn #1#2#3 + { + \@@_resize_to_wd_and_ht_plus_dp:NnnN #1 {#2} {#3} + \hbox_gset:Nn + } +\cs_generate_variant:Nn \box_gresize_to_wd_and_ht_plus_dp:Nnn { c } +\cs_new_protected:Npn \@@_resize_to_wd_and_ht_plus_dp:NnnN #1#2#3#4 + { + #4 #1 { \@@_resize_set_corners:N #1 % \end{macrocode} @@ -1873,7 +1964,6 @@ \@@_resize:N #1 } } -\cs_generate_variant:Nn \box_resize_to_wd_and_ht_plus_dp:Nnn { c } \cs_new_protected:Npn \@@_resize_set_corners:N #1 { \dim_set:Nn \l_@@_top_dim { \box_ht:N #1 } @@ -1908,11 +1998,32 @@ % \end{macro} % \end{macro} % \end{macro} +% \end{macro} % -% \begin{macro}{\box_resize_to_ht:Nn, \box_resize_to_ht:cn} -% \begin{macro}{\box_resize_to_ht_plus_dp:Nn, \box_resize_to_ht_plus_dp:cn} -% \begin{macro}{\box_resize_to_wd:Nn, \box_resize_to_wd:cn} -% \begin{macro}{\box_resize_to_wd_and_ht:Nnn, \box_resize_to_wd_and_ht:cnn} +% \begin{macro} +% { +% \box_resize_to_ht:Nn, \box_resize_to_ht:cn, +% \box_gresize_to_ht:Nn, \box_gresize_to_ht:cn +% } +% \begin{macro}{\@@_resize_to_ht:NnN} +% \begin{macro} +% { +% \box_resize_to_ht_plus_dp:Nn, \box_resize_to_ht_plus_dp:cn, +% \box_gresize_to_ht_plus_dp:Nn, \box_gresize_to_ht_plus_dp:cn +% } +% \begin{macro}{\@@_resize_to_ht_plus_dp:NnN} +% \begin{macro} +% { +% \box_resize_to_wd:Nn, \box_resize_to_wd:cn, +% \box_gresize_to_wd:Nn, \box_gresize_to_wd:cn +% } +% \begin{macro}{\@@_resize_to_wd:NnN} +% \begin{macro} +% { +% \box_resize_to_wd_and_ht:Nnn, \box_resize_to_wd_and_ht:cnn, +% \box_gresize_to_wd_and_ht:Nnn, \box_gresize_to_wd_and_ht:cnn +% } +% \begin{macro}{\@@_resize_to_wd_ht:NnnN} % Scaling to a (total) height or to a width is a simplified version of the main % resizing operation, with the scale simply copied between the two parts. The % internal auxiliary is called using the scaling value twice, as the sign for @@ -1920,8 +2031,14 @@ % for the general case). % \begin{macrocode} \cs_new_protected:Npn \box_resize_to_ht:Nn #1#2 + { \@@_resize_to_ht:NnN #1 {#2} \hbox_set:Nn } +\cs_generate_variant:Nn \box_resize_to_ht:Nn { c } +\cs_new_protected:Npn \box_gresize_to_ht:Nn #1#2 + { \@@_resize_to_ht:NnN #1 {#2} \hbox_gset:Nn } +\cs_generate_variant:Nn \box_gresize_to_ht:Nn { c } +\cs_new_protected:Npn \@@_resize_to_ht:NnN #1#2#3 { - \hbox_set:Nn #1 + #3 #1 { \@@_resize_set_corners:N #1 \fp_set:Nn \l_@@_scale_y_fp @@ -1933,8 +2050,13 @@ \@@_resize:N #1 } } -\cs_generate_variant:Nn \box_resize_to_ht:Nn { c } \cs_new_protected:Npn \box_resize_to_ht_plus_dp:Nn #1#2 + { \@@_resize_to_ht_plus_dp:NnN #1 {#2} \hbox_set:Nn } +\cs_generate_variant:Nn \box_resize_to_ht_plus_dp:Nn { c } +\cs_new_protected:Npn \box_gresize_to_ht_plus_dp:Nn #1#2 + { \@@_resize_to_ht_plus_dp:NnN #1 {#2} \hbox_gset:Nn } +\cs_generate_variant:Nn \box_gresize_to_ht_plus_dp:Nn { c } +\cs_new_protected:Npn \@@_resize_to_ht_plus_dp:NnN #1#2#3 { \hbox_set:Nn #1 { @@ -1948,10 +2070,15 @@ \@@_resize:N #1 } } -\cs_generate_variant:Nn \box_resize_to_ht_plus_dp:Nn { c } \cs_new_protected:Npn \box_resize_to_wd:Nn #1#2 + { \@@_resize_to_wd:NnN #1 {#2} \hbox_set:Nn } +\cs_generate_variant:Nn \box_resize_to_wd:Nn { c } +\cs_new_protected:Npn \box_gresize_to_wd:Nn #1#2 + { \@@_resize_to_wd:NnN #1 {#2} \hbox_gset:Nn } +\cs_generate_variant:Nn \box_gresize_to_wd:Nn { c } +\cs_new_protected:Npn \@@_resize_to_wd:NnN #1#2#3 { - \hbox_set:Nn #1 + #3 #1 { \@@_resize_set_corners:N #1 \fp_set:Nn \l_@@_scale_x_fp @@ -1960,10 +2087,15 @@ \@@_resize:N #1 } } -\cs_generate_variant:Nn \box_resize_to_wd:Nn { c } \cs_new_protected:Npn \box_resize_to_wd_and_ht:Nnn #1#2#3 + { \@@_resize_to_wd_and_ht:NnnN #1 {#2} {#3} \hbox_set:Nn } +\cs_generate_variant:Nn \box_resize_to_wd_and_ht:Nnn { c } +\cs_new_protected:Npn \box_gresize_to_wd_and_ht:Nnn #1#2#3 + { \@@_resize_to_wd_and_ht:NnnN #1 {#2} {#3} \hbox_gset:Nn } +\cs_generate_variant:Nn \box_gresize_to_wd_and_ht:Nnn { c } +\cs_new_protected:Npn \@@_resize_to_wd_and_ht:NnnN #1#2#3#4 { - \hbox_set:Nn #1 + #4 #1 { \@@_resize_set_corners:N #1 \fp_set:Nn \l_@@_scale_x_fp @@ -1976,15 +2108,23 @@ \@@_resize:N #1 } } -\cs_generate_variant:Nn \box_resize_to_wd_and_ht:Nnn { c } % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} % -% \begin{macro}{\box_scale:Nnn, \box_scale:cnn} -% \begin{macro}{\@@_scale_aux:N} +% \begin{macro} +% { +% \box_scale:Nnn, \box_scale:cnn, +% \box_gscale:Nnn, \box_gscale:cnn +% } +% \begin{macro}{\@@_scale:NnnN} +% \begin{macro}{\@@_scale:N} % When scaling a box, setting the scaling itself is easy enough. The % new dimensions are also relatively easy to find, allowing only for % the need to keep them positive in all cases. Once that is done then @@ -1993,16 +2133,21 @@ % with the auto-resizing functions. % \begin{macrocode} \cs_new_protected:Npn \box_scale:Nnn #1#2#3 + { \@@_scale:NnnN #1 {#2} {#3} \hbox_set:Nn } +\cs_generate_variant:Nn \box_scale:Nnn { c } +\cs_new_protected:Npn \box_gscale:Nnn #1#2#3 + { \@@_scale:NnnN #1 {#2} {#3} \hbox_gset:Nn } +\cs_generate_variant:Nn \box_gscale:Nnn { c } +\cs_new_protected:Npn \@@_scale:NnnN #1#2#3#4 { - \hbox_set:Nn #1 + #4 #1 { \fp_set:Nn \l_@@_scale_x_fp {#2} \fp_set:Nn \l_@@_scale_y_fp {#3} - \@@_scale_aux:N #1 + \@@_scale:N #1 } } -\cs_generate_variant:Nn \box_scale:Nnn { c } -\cs_new_protected:Npn \@@_scale_aux:N #1 +\cs_new_protected:Npn \@@_scale:N #1 { \dim_set:Nn \l_@@_top_dim { \box_ht:N #1 } \dim_set:Nn \l_@@_bottom_dim { -\box_dp:N #1 } @@ -2019,35 +2164,52 @@ % \end{macrocode} % \end{macro} % \end{macro} +% \end{macro} % % \begin{macro} % { -% \box_autosize_to_wd_and_ht:Nnn , -% \box_autosize_to_wd_and_ht:cnn , -% \box_autosize_to_wd_and_ht_plus_dp:Nnn , -% \box_autosize_to_wd_and_ht_plus_dp:cnn +% \box_autosize_to_wd_and_ht:Nnn , +% \box_autosize_to_wd_and_ht:cnn , +% \box_gautosize_to_wd_and_ht:Nnn , +% \box_gautosize_to_wd_and_ht:cnn , +% \box_autosize_to_wd_and_ht_plus_dp:Nnn , +% \box_autosize_to_wd_and_ht_plus_dp:cnn , +% \box_gautosize_to_wd_and_ht_plus_dp:Nnn , +% \box_gautosize_to_wd_and_ht_plus_dp:cnn % } -% \begin{macro}{\@@_autosize:Nnnn} +% \begin{macro}{\@@_autosize:NnnnN} % Although autosizing a box uses dimensions, it has more in common in % implementation with scaling. As such, most of the real work here is % done elsewhere. % \begin{macrocode} \cs_new_protected:Npn \box_autosize_to_wd_and_ht:Nnn #1#2#3 - { \@@_autosize:Nnnn #1 {#2} {#3} { \box_ht:N #1 } } + { \@@_autosize:NnnnN #1 {#2} {#3} { \box_ht:N #1 } \hbox_set:Nn } +\cs_generate_variant:Nn \box_autosize_to_wd_and_ht:Nnn { c } +\cs_new_protected:Npn \box_gautosize_to_wd_and_ht:Nnn #1#2#3 + { \@@_autosize:NnnnN #1 {#2} {#3} { \box_ht:N #1 } \hbox_gset:Nn } \cs_generate_variant:Nn \box_autosize_to_wd_and_ht:Nnn { c } \cs_new_protected:Npn \box_autosize_to_wd_and_ht_plus_dp:Nnn #1#2#3 - { \@@_autosize:Nnnn #1 {#2} {#3} { \box_ht:N #1 + \box_dp:N #1 } } + { + \@@_autosize:NnnnN #1 {#2} {#3} { \box_ht:N #1 + \box_dp:N #1 } + \hbox_set:Nn + } \cs_generate_variant:Nn \box_autosize_to_wd_and_ht_plus_dp:Nnn { c } -\cs_new_protected:Npn \@@_autosize:Nnnn #1#2#3#4 +\cs_new_protected:Npn \box_gautosize_to_wd_and_ht_plus_dp:Nnn #1#2#3 { - \hbox_set:Nn #1 + \@@_autosize:NnnnN #1 {#2} {#3} { \box_ht:N #1 + \box_dp:N #1 } + \hbox_gset:Nn + } +\cs_generate_variant:Nn \box_gautosize_to_wd_and_ht_plus_dp:Nnn { c } +\cs_new_protected:Npn \@@_autosize:NnnnN #1#2#3#4#5 + { + #5 #1 { \fp_set:Nn \l_@@_scale_x_fp { ( #2 ) / \box_wd:N #1 } \fp_set:Nn \l_@@_scale_y_fp { ( #3 ) / ( #4 ) } \fp_compare:nNnTF \l_@@_scale_x_fp > \l_@@_scale_y_fp { \fp_set_eq:NN \l_@@_scale_x_fp \l_@@_scale_y_fp } { \fp_set_eq:NN \l_@@_scale_y_fp \l_@@_scale_x_fp } - \@@_scale_aux:N #1 + \@@_scale:N #1 } } % \end{macrocode} @@ -2108,6 +2270,49 @@ % \end{macrocode} % \end{macro} % +% \subsection{Deprecated functions} +% +% \begin{macro} +% { +% \box_set_eq_clear:NN, \box_set_eq_clear:cN, +% \box_set_eq_clear:Nc, \box_set_eq_clear:cc +% } +% \begin{macro} +% { +% \box_gset_eq_clear:NN, \box_gset_eq_clear:cN, +% \box_gset_eq_clear:Nc, \box_gset_eq_clear:cc +% } +% \begin{macrocode} +\__kernel_patch_deprecation:nnNNpn { 2020-12-31 } { \box_set_eq_drop:N } +\cs_new_protected:Npn \box_set_eq_clear:NN #1#2 + { \tex_setbox:D #1 \tex_box:D #2 } +\__kernel_patch_deprecation:nnNNpn { 2020-12-31 } { \box_gset_eq_drop:N } +\cs_new_protected:Npn \box_gset_eq_clear:NN #1#2 + { \tex_global:D \tex_setbox:D #1 \tex_box:D #2 } +\cs_generate_variant:Nn \box_set_eq_clear:NN { c , Nc , cc } +\cs_generate_variant:Nn \box_gset_eq_clear:NN { c , Nc , cc } +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\hbox_unpack_clear:N, \hbox_unpack_clear:c} +% \begin{macrocode} +\__kernel_patch_deprecation:nnNNpn { 2020-12-31 } { \hbox_unpack_drop:N } +\cs_new_protected:Npn \hbox_unpack_clear:N + { \hbox_unpack_drop:N } +\cs_generate_variant:Nn \hbox_unpack_clear:N { c } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\vbox_unpack_clear:N, \vbox_unpack_clear:c} +% \begin{macrocode} +\__kernel_patch_deprecation:nnNNpn { 2020-12-31 } { \vbox_unpack_drop:N } +\cs_new_protected:Npn \vbox_unpack_clear:N + { \vbox_unpack_drop:N } +\cs_generate_variant:Nn \vbox_unpack_clear:N { c } +% \end{macrocode} +% \end{macro} +% % \begin{macrocode} %</initex|package> % \end{macrocode} diff --git a/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx b/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx index 59509d55283..54892ac54e5 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx @@ -1,6 +1,8 @@ % \iffalse meta-comment % -%% File: l3candidates.dtx Copyright (C) 2012-2019 The LaTeX3 Project +%% File: l3candidates.dtx +% +% Copyright (C) 2012-2019 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 @@ -42,7 +44,7 @@ % }^^A % } % -% \date{Released 2019-01-13} +% \date{Released 2019-01-28} % % \maketitle % @@ -141,14 +143,15 @@ % % \subsection{Viewing part of a box} % -% \begin{function}{\box_clip:N, \box_clip:c} +% \begin{function}[updated = 2019-01-23] +% {\box_clip:N, \box_clip:c, \box_gclip:N, \box_gclip:c} % \begin{syntax} % \cs{box_clip:N} \meta{box} % \end{syntax} % Clips the \meta{box} in the output so that only material inside the % bounding box is displayed in the output. The updated \meta{box} is an % hbox, irrespective of the nature of the \meta{box} before the clipping is -% applied. The clipping applies within the current \TeX{} group level. +% applied. % % \textbf{These functions require the \LaTeX3 native drivers: they do % not work with the \LaTeXe{} \pkg{graphics} drivers!} @@ -161,9 +164,13 @@ % \end{texnote} % \end{function} % -% \begin{function}{\box_trim:Nnnnn, \box_trim:cnnnn} +% \begin{function}[added = 2019-01-23] +% { +% \box_set_trim:Nnnnn, \box_set_trim:cnnnn, +% \box_gset_trim:Nnnnn, \box_gset_trim:cnnnn +% } % \begin{syntax} -% \cs{box_trim:Nnnnn} \meta{box} \Arg{left} \Arg{bottom} \Arg{right} \Arg{top} +% \cs{box_set_trim:Nnnnn} \meta{box} \Arg{left} \Arg{bottom} \Arg{right} \Arg{top} % \end{syntax} % Adjusts the bounding box of the \meta{box} \meta{left} is removed from % the left-hand edge of the bounding box, \meta{right} from the right-hand @@ -172,14 +179,18 @@ % unless \cs{box_clip:N} is subsequently applied. % The updated \meta{box} is an % hbox, irrespective of the nature of the \meta{box} before the trim -% operation is applied. The adjustment applies within the current \TeX{} -% group level. The behavior of the operation where the trims requested is +% operation is applied. +% The behavior of the operation where the trims requested is % greater than the size of the box is undefined. % \end{function} % -% \begin{function}{\box_viewport:Nnnnn, \box_viewport:cnnnn} +% \begin{function}[added = 2019-01-23] +% { +% \box_set_viewport:Nnnnn, \box_set_viewport:cnnnn, +% \box_gset_viewport:Nnnnn, \box_gset_viewport:cnnnn +% } % \begin{syntax} -% \cs{box_viewport:Nnnnn} \meta{box} \Arg{llx} \Arg{lly} \Arg{urx} \Arg{ury} +% \cs{box_set_viewport:Nnnnn} \meta{box} \Arg{llx} \Arg{lly} \Arg{urx} \Arg{ury} % \end{syntax} % Adjusts the bounding box of the \meta{box} such that it has lower-left % co-ordinates (\meta{llx}, \meta{lly}) and upper-right co-ordinates @@ -189,13 +200,16 @@ % subsequently applied. % The updated \meta{box} is an % hbox, irrespective of the nature of the \meta{box} before the viewport -% operation is applied. The adjustment applies within the current \TeX{} -% group level. +% operation is applied. % \end{function} % % \section{Additions to \pkg{l3coffins}} % -% \begin{function}{\coffin_resize:Nnn, \coffin_resize:cnn} +% \begin{function}[updated = 2019-01-23] +% { +% \coffin_resize:Nnn, \coffin_resize:cnn, +% \coffin_gresize:Nnn, \coffin_gresize:cnn +% } % \begin{syntax} % \cs{coffin_resize:Nnn} \meta{coffin} \Arg{width} \Arg{total-height} % \end{syntax} @@ -203,7 +217,11 @@ % both of which should be given as dimension expressions. % \end{function} % -% \begin{function}{\coffin_rotate:Nn, \coffin_rotate:cn} +% \begin{function} +% { +% \coffin_rotate:Nn, \coffin_rotate:cn, +% \coffin_grotate:Nn, \coffin_grotate:cn +% } % \begin{syntax} % \cs{coffin_rotate:Nn} \meta{coffin} \Arg{angle} % \end{syntax} @@ -213,7 +231,11 @@ % the bounding box of the coffin growing unnecessarily. % \end{function} % -% \begin{function}{\coffin_scale:Nnn, \coffin_scale:cnn} +% \begin{function}[updated = 2019-01-23] +% { +% \coffin_scale:Nnn, \coffin_scale:cnn, +% \coffin_gscale:Nnn, \coffin_gscale:cnn +% } % \begin{syntax} % \cs{coffin_scale:Nnn} \meta{coffin} \Arg{x-scale} \Arg{y-scale} % \end{syntax} @@ -224,19 +246,6 @@ % % \section{Additions to \pkg{l3expan}} % -% \begin{function}[added = 2017-12-12]{\prg_generate_conditional_variant:Nnn} -% \begin{syntax} -% \cs{prg_generate_conditional_variant:Nnn} \cs[no-index]{\meta{name}:\meta{arg spec}} \Arg{variant argument specifiers} \Arg{condition specifiers} -% \end{syntax} -% Defines argument-specifier variants of conditionals. This is -% equivalent to running \cs{cs_generate_variant:Nn} \meta{conditional} -% \Arg{variant argument specifiers} on each \meta{conditional} -% described by the \meta{condition specifiers}. These base-form -% \meta{conditionals} are obtained from the \meta{name} and \meta{arg -% spec} as described for \cs{prg_new_conditional:Npnn}, and they -% should be defined. -% \end{function} -% % \begin{function}[added = 2018-04-04]{\exp_args_generate:n} % \begin{syntax} % \cs{exp_args_generate:n} \Arg{variant argument specifiers} @@ -863,6 +872,25 @@ % % \section{Additions to \pkg{l3sys}} % +% \begin{function}[added = 2019-01-16]{\sys_shell_get:nnN} +% \begin{function}[TF,added = 2019-01-16]{\sys_shell_get:nnN} +% \begin{syntax} +% \cs{sys_shell_get:nnN} \Arg{shell~command} \Arg{setup} \meta{tl~var} +% \cs{sys_shell_get:nnNTF} \Arg{shell~command} \Arg{setup} \meta{tl~var} \Arg{true code} \Arg{false code} +% \end{syntax} +% Defines \meta{tl} to the text returned by the \meta{shell command}. +% The \meta{shell command} is converted to a string using +% \cs{tl_to_str:n}. Category codes may need to be set appropriately +% via the \meta{setup} argument, which is run just before running the +% \meta{shell command} (in a group). +% If shell escape is disabled, the \meta{tl~var} will be empty. +% Note that quote characters (|"|) \emph{cannot} be used inside the +% \meta{shell command}. The \cs{sys_shell_get:nnNTF} conditional +% returns \texttt{true} if the shell is available and no quote is +% detected, and \texttt{false} otherwise. +% \end{function} +% \end{function} +% % \begin{variable}[added = 2018-05-02]{\c_sys_engine_version_str} % The version string of the current engine, in the same form as % given in the banner issued when running a job. For \pdfTeX{} @@ -1231,48 +1259,6 @@ % to add these to the kernel where they are well-documented % (\emph{e.g.}~in Unicode Consortium or relevant government publications). % -% \begin{function}[added = 2014-06-25] -% { -% \tl_set_from_file:Nnn, \tl_set_from_file:cnn, -% \tl_gset_from_file:Nnn, \tl_gset_from_file:cnn -% } -% \begin{syntax} -% \cs{tl_set_from_file:Nnn} \meta{tl} \Arg{setup} \Arg{filename} -% \end{syntax} -% Defines \meta{tl} to the contents of \meta{filename}. -% Category codes may need to be set appropriately via the \meta{setup} -% argument. -% \end{function} -% -% \begin{function}[added = 2014-06-25] -% { -% \tl_set_from_file_x:Nnn, \tl_set_from_file_x:cnn, -% \tl_gset_from_file_x:Nnn, \tl_gset_from_file_x:cnn -% } -% \begin{syntax} -% \cs{tl_set_from_file_x:Nnn} \meta{tl} \Arg{setup} \Arg{filename} -% \end{syntax} -% Defines \meta{tl} to the contents of \meta{filename}, expanding -% the contents of the file as it is read. Category codes and other -% definitions may need to be set appropriately via the \meta{setup} -% argument. -% \end{function} -% -% \begin{function}[added = 2018-07-23] -% { -% \tl_set_from_shell:Nnn, \tl_set_from_shell:cnn, -% \tl_gset_from_shell:Nnn, \tl_gset_from_shell:cnn -% } -% \begin{syntax} -% \cs{tl_set_from_shell:Nnn} \meta{tl~var} \Arg{setup} \Arg{shell~command} -% \end{syntax} -% Defines \meta{tl} to the text returned by the \meta{shell command}. -% Category codes may need to be set appropriately via the \meta{setup} -% argument. If shell escape is disabled, the \meta{tl~var} will be empty. -% Note that quote characters (|"|) \emph{cannot} be used inside the -% \meta{shell command}. -% \end{function} -% % \begin{function}[EXP, added = 2017-07-15] % { % \tl_range_braced:Nnn, \tl_range_braced:cnn, \tl_range_braced:nnn, @@ -1521,20 +1507,34 @@ % % \subsubsection{Viewing part of a box} % -% \begin{macro}{\box_clip:N, \box_clip:c} +% \begin{macro}{\box_clip:N, \box_clip:c, \box_gclip:N, \box_gclip:c} % A wrapper around the driver-dependent code. % \begin{macrocode} \cs_new_protected:Npn \box_clip:N #1 { \hbox_set:Nn #1 { \driver_box_use_clip:N #1 } } \cs_generate_variant:Nn \box_clip:N { c } +\cs_new_protected:Npn \box_gclip:N #1 + { \hbox_gset:Nn #1 { \driver_box_use_clip:N #1 } } +\cs_generate_variant:Nn \box_gclip:N { c } % \end{macrocode} % \end{macro} % -% \begin{macro}{\box_trim:Nnnnn, \box_trim:cnnnn} +% \begin{macro} +% { +% \box_set_trim:Nnnnn, \box_set_trim:cnnnn, +% \box_gset_trim:Nnnnn, \box_gset_trim:cnnnn +% } +% \begin{macro}{\@@_set_trim:NnnnnN} % Trimming from the left- and right-hand edges of the box is easy: kern the % appropriate parts off each side. % \begin{macrocode} -\cs_new_protected:Npn \box_trim:Nnnnn #1#2#3#4#5 +\cs_new_protected:Npn \box_set_trim:Nnnnn #1#2#3#4#5 + { \@@_set_trim:NnnnnN #1 {#2} {#3} {#4} {#5} \box_set_eq:NN } +\cs_generate_variant:Nn \box_set_trim:Nnnnn { c } +\cs_new_protected:Npn \box_gset_trim:Nnnnn #1#2#3#4#5 + { \@@_set_trim:NnnnnN #1 {#2} {#3} {#4} {#5} \box_gset_eq:NN } +\cs_generate_variant:Nn \box_gset_trim:Nnnnn { c } +\cs_new_protected:Npn \@@_set_trim:NnnnnN #1#2#3#4#5#6 { \hbox_set:Nn \l_@@_internal_box { @@ -1556,7 +1556,7 @@ \hbox_set:Nn \l_@@_internal_box { \box_move_down:nn \c_zero_dim - { \box_use:N \l_@@_internal_box } + { \box_use_drop:N \l_@@_internal_box } } \box_set_dp:Nn \l_@@_internal_box { \box_dp:N #1 - (#3) } } @@ -1564,7 +1564,7 @@ \hbox_set:Nn \l_@@_internal_box { \box_move_down:nn { (#3) - \box_dp:N #1 } - { \box_use:N \l_@@_internal_box } + { \box_use_drop:N \l_@@_internal_box } } \box_set_dp:Nn \l_@@_internal_box \c_zero_dim } @@ -1576,7 +1576,7 @@ \hbox_set:Nn \l_@@_internal_box { \box_move_up:nn \c_zero_dim - { \box_use:N \l_@@_internal_box } + { \box_use_drop:N \l_@@_internal_box } } \box_set_ht:Nn \l_@@_internal_box { \box_ht:N \l_@@_internal_box - (#5) } @@ -1585,22 +1585,33 @@ \hbox_set:Nn \l_@@_internal_box { \box_move_up:nn { (#5) - \box_ht:N \l_@@_internal_box } - { \box_use:N \l_@@_internal_box } + { \box_use_drop:N \l_@@_internal_box } } \box_set_ht:Nn \l_@@_internal_box \c_zero_dim } - \box_set_eq:NN #1 \l_@@_internal_box + #6 #1 \l_@@_internal_box } -\cs_generate_variant:Nn \box_trim:Nnnnn { c } % \end{macrocode} % \end{macro} +% \end{macro} % -% \begin{macro}{\box_viewport:Nnnnn, \box_viewport:cnnnn} +% \begin{macro} +% { +% \box_set_viewport:Nnnnn, \box_set_viewport:cnnnn, +% \box_gset_viewport:Nnnnn, \box_gset_viewport:cnnnn +% } +% \begin{macro}{\@@_viewport:NnnnnN} % The same general logic as for the trim operation, but with absolute % dimensions. As a result, there are some things to watch out for in the % vertical direction. % \begin{macrocode} -\cs_new_protected:Npn \box_viewport:Nnnnn #1#2#3#4#5 +\cs_new_protected:Npn \box_set_viewport:Nnnnn #1#2#3#4#5 + { \@@_set_viewport:NnnnnN #1 {#2} {#3} {#4} {#5} \box_set_eq:NN } +\cs_generate_variant:Nn \box_set_viewport:Nnnnn { c } +\cs_new_protected:Npn \box_gset_viewport:Nnnnn #1#2#3#4#5 + { \@@_set_viewport:NnnnnN #1 {#2} {#3} {#4} {#5} \box_gset_eq:NN } +\cs_generate_variant:Nn \box_gset_viewport:Nnnnn { c } +\cs_new_protected:Npn \@@_set_viewport:NnnnnN #1#2#3#4#5#6 { \hbox_set:Nn \l_@@_internal_box { @@ -1613,13 +1624,13 @@ \hbox_set:Nn \l_@@_internal_box { \box_move_down:nn \c_zero_dim - { \box_use:N \l_@@_internal_box } + { \box_use_drop:N \l_@@_internal_box } } \box_set_dp:Nn \l_@@_internal_box { - \@@_dim_eval:n {#3} } } { \hbox_set:Nn \l_@@_internal_box - { \box_move_down:nn {#3} { \box_use:N \l_@@_internal_box } } + { \box_move_down:nn {#3} { \box_use_drop:N \l_@@_internal_box } } \box_set_dp:Nn \l_@@_internal_box \c_zero_dim } \dim_compare:nNnTF {#5} > \c_zero_dim @@ -1627,7 +1638,7 @@ \hbox_set:Nn \l_@@_internal_box { \box_move_up:nn \c_zero_dim - { \box_use:N \l_@@_internal_box } + { \box_use_drop:N \l_@@_internal_box } } \box_set_ht:Nn \l_@@_internal_box { @@ -1640,15 +1651,15 @@ \hbox_set:Nn \l_@@_internal_box { \box_move_up:nn { - \@@_dim_eval:n {#5} } - { \box_use:N \l_@@_internal_box } + { \box_use_drop:N \l_@@_internal_box } } \box_set_ht:Nn \l_@@_internal_box \c_zero_dim } - \box_set_eq:NN #1 \l_@@_internal_box + #6 #1 \l_@@_internal_box } -\cs_generate_variant:Nn \box_viewport:Nnnnn { c } % \end{macrocode} % \end{macro} +% \end{macro} % % \subsection{Additions to \pkg{l3coffins}} % @@ -1676,6 +1687,14 @@ % \end{macrocode} % \end{variable} % +% \begin{variable}{\l_@@_corners_prop, \l_@@_poles_prop} +% Used to avoid needing to track scope for intermediate steps. +% \begin{macrocode} +\prop_new:N \l_@@_corners_prop +\prop_new:N \l_@@_poles_prop +% \end{macrocode} +% \end{variable} +% % \begin{variable}{\l_@@_bounding_shift_dim} % The shift of the bounding box of a coffin from the real content. % \begin{macrocode} @@ -1700,7 +1719,12 @@ % \end{variable} % \end{variable} % -% \begin{macro}{\coffin_rotate:Nn, \coffin_rotate:cn} +% \begin{macro} +% { +% \coffin_rotate:Nn, \coffin_rotate:cn, +% \coffin_grotate:Nn, \coffin_grotate:cn +% } +% \begin{macro}{\@@_rotate:NnNN} % Rotating a coffin requires several steps which can be conveniently % run together. The sine and cosine of the angle in degrees are % computed. This is then used to set \cs{l_@@_sin_fp} and @@ -1708,16 +1732,28 @@ % of the procedure. % \begin{macrocode} \cs_new_protected:Npn \coffin_rotate:Nn #1#2 + { \@@_rotate:NnNN #1 {#2} \box_rotate:Nn \prop_set_eq:cN } +\cs_new_protected:Npn \coffin_grotate:Nn #1#2 + { \@@_rotate:NnNN #1 {#2} \box_grotate:Nn \prop_gset_eq:cN } +\cs_new_protected:Npn \@@_rotate:NnNN #1#2#3#4 { \fp_set:Nn \l_@@_sin_fp { sind ( #2 ) } \fp_set:Nn \l_@@_cos_fp { cosd ( #2 ) } % \end{macrocode} +% Use a local copy of the property lists to avoid needing to pass the +% name and scope around. +% \begin{macrocode} + \prop_set_eq:Nc \l_@@_corners_prop + { coffin ~ \@@_to_value:N #1 ~ corners } + \prop_set_eq:Nc \l_@@_poles_prop + { coffin ~ \@@_to_value:N #1 ~ poles } +% \end{macrocode} % The corners and poles of the coffin can now be rotated around the % origin. This is best achieved using mapping functions. % \begin{macrocode} - \prop_map_inline:cn { l_@@_corners_ \@@_to_value:N #1 _prop } + \prop_map_inline:Nn \l_@@_corners_prop { \@@_rotate_corner:Nnnn #1 {##1} ##2 } - \prop_map_inline:cn { l_@@_poles_ \@@_to_value:N #1 _prop } + \prop_map_inline:Nn \l_@@_poles_prop { \@@_rotate_pole:Nnnnnn #1 {##1} ##2 } % \end{macrocode} % The bounding box of the coffin needs to be rotated, and to do this @@ -1733,7 +1769,7 @@ % \begin{macrocode} \@@_find_corner_maxima:N #1 \@@_find_bounding_shift: - \box_rotate:Nn #1 {#2} + #3 #1 {#2} % \end{macrocode} % The correction of the box position itself takes place here. The idea % is that the bounding box for a coffin is tight up to the content, and @@ -1765,19 +1801,27 @@ \box_set_dp:Nn \l_@@_internal_box { 0 pt } \box_set_wd:Nn \l_@@_internal_box { \l_@@_right_corner_dim - \l_@@_left_corner_dim } - \hbox_set:Nn #1 { \box_use:N \l_@@_internal_box } + \hbox_set:Nn #1 { \box_use_drop:N \l_@@_internal_box } % \end{macrocode} % The final task is to move the poles and corners such that they are % back in alignment with the box reference point. % \begin{macrocode} - \prop_map_inline:cn { l_@@_corners_ \@@_to_value:N #1 _prop } + \prop_map_inline:Nn \l_@@_corners_prop { \@@_shift_corner:Nnnn #1 {##1} ##2 } - \prop_map_inline:cn { l_@@_poles_ \@@_to_value:N #1 _prop } + \prop_map_inline:Nn \l_@@_poles_prop { \@@_shift_pole:Nnnnnn #1 {##1} ##2 } +% \end{macrocode} +% Update the coffin data. +% \begin{macrocode} + #4 { coffin ~ \@@_to_value:N #1 ~ corners } + \l_@@_corners_prop + #4 { coffin ~ \@@_to_value:N #1 ~ poles } + \l_@@_poles_prop } \cs_generate_variant:Nn \coffin_rotate:Nn { c } % \end{macrocode} % \end{macro} +% \end{macro} % % \begin{macro}{\@@_set_bounding:N} % The bounding box corners for a coffin are easy enough to find: this @@ -1821,7 +1865,7 @@ \cs_new_protected:Npn \@@_rotate_corner:Nnnn #1#2#3#4 { \@@_rotate_vector:nnNN {#3} {#4} \l_@@_x_dim \l_@@_y_dim - \prop_put:cnx { l_@@_corners_ \@@_to_value:N #1 _prop } {#2} + \prop_put:Nnx \l_@@_corners_prop {#2} { { \dim_use:N \l_@@_x_dim } { \dim_use:N \l_@@_y_dim } } } % \end{macrocode} @@ -1838,7 +1882,7 @@ \@@_rotate_vector:nnNN {#3} {#4} \l_@@_x_dim \l_@@_y_dim \@@_rotate_vector:nnNN {#5} {#6} \l_@@_x_prime_dim \l_@@_y_prime_dim - \@@_set_pole:Nnx #1 {#2} + \prop_put:Nnx \l_@@_poles_prop {#2} { { \dim_use:N \l_@@_x_dim } { \dim_use:N \l_@@_y_dim } { \dim_use:N \l_@@_x_prime_dim } @@ -1892,7 +1936,7 @@ \dim_set:Nn \l_@@_right_corner_dim { -\c_max_dim } \dim_set:Nn \l_@@_bottom_corner_dim { \c_max_dim } \dim_set:Nn \l_@@_left_corner_dim { \c_max_dim } - \prop_map_inline:cn { l_@@_corners_ \@@_to_value:N #1 _prop } + \prop_map_inline:Nn \l_@@_corners_prop { \@@_find_corner_maxima_aux:nn ##2 } } \cs_new_protected:Npn \@@_find_corner_maxima_aux:nn #1#2 @@ -1939,7 +1983,7 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_shift_corner:Nnnn #1#2#3#4 { - \prop_put:cnx { l_@@_corners_ \@@_to_value:N #1 _ prop } {#2} + \prop_put:Nnx \l_@@_corners_prop {#2} { { \dim_eval:n { #3 - \l_@@_left_corner_dim } } { \dim_eval:n { #4 - \l_@@_bottom_corner_dim } } @@ -1947,7 +1991,7 @@ } \cs_new_protected:Npn \@@_shift_pole:Nnnnnn #1#2#3#4#5#6 { - \prop_put:cnx { l_@@_poles_ \@@_to_value:N #1 _ prop } {#2} + \prop_put:Nnx \l_@@_poles_prop {#2} { { \dim_eval:n { #3 - \l_@@_left_corner_dim } } { \dim_eval:n { #4 - \l_@@_bottom_corner_dim } } @@ -1980,7 +2024,12 @@ % \end{variable} % \end{variable} % -% \begin{macro}{\coffin_resize:Nnn, \coffin_resize:cnn} +% \begin{macro} +% { +% \coffin_resize:Nnn, \coffin_resize:cnn, +% \coffin_gresize:Nnn, \coffin_gresize:cnn +% } +% \begin{macro}{\@@_resize:NnnNN} % Resizing a coffin begins by setting up the user-friendly names for % the dimensions of the coffin box. The new sizes are then turned into % scale factor. This is the same operation as takes place for the @@ -1989,6 +2038,20 @@ % \begin{macrocode} \cs_new_protected:Npn \coffin_resize:Nnn #1#2#3 { + \@@_resize:NnnNN #1 {#2} {#3} + \box_resize_to_wd_and_ht_plus_dp:Nnn + \prop_set_eq:cN + } +\cs_generate_variant:Nn \coffin_resize:Nnn { c } +\cs_new_protected:Npn \coffin_gresize:Nnn #1#2#3 + { + \@@_resize:NnnNN #1 {#2} {#3} + \box_gresize_to_wd_and_ht_plus_dp:Nnn + \prop_gset_eq:cN + } +\cs_generate_variant:Nn \coffin_gresize:Nnn { c } +\cs_new_protected:Npn \@@_resize:NnnNN #1#2#3#4#5 + { \fp_set:Nn \l_@@_scale_x_fp { \dim_to_fp:n {#2} / \dim_to_fp:n { \coffin_wd:N #1 } } \fp_set:Nn \l_@@_scale_y_fp @@ -1996,22 +2059,26 @@ \dim_to_fp:n {#3} / \dim_to_fp:n { \coffin_ht:N #1 + \coffin_dp:N #1 } } - \box_resize_to_wd_and_ht_plus_dp:Nnn #1 {#2} {#3} - \@@_resize_common:Nnn #1 {#2} {#3} + #4 #1 {#2} {#3} + \@@_resize_common:NnnN #1 {#2} {#3} #5 } -\cs_generate_variant:Nn \coffin_resize:Nnn { c } % \end{macrocode} % \end{macro} +% \end{macro} % -% \begin{macro}{\@@_resize_common:Nnn} +% \begin{macro}{\@@_resize_common:NnnN} % The poles and corners of the coffin are scaled to the appropriate % places before actually resizing the underlying box. % \begin{macrocode} -\cs_new_protected:Npn \@@_resize_common:Nnn #1#2#3 +\cs_new_protected:Npn \@@_resize_common:NnnN #1#2#3#4 { - \prop_map_inline:cn { l_@@_corners_ \@@_to_value:N #1 _prop } + \prop_set_eq:Nc \l_@@_corners_prop + { coffin ~ \@@_to_value:N #1 ~ corners } + \prop_set_eq:Nc \l_@@_poles_prop + { coffin ~ \@@_to_value:N #1 ~ poles } + \prop_map_inline:Nn \l_@@_corners_prop { \@@_scale_corner:Nnnn #1 {##1} ##2 } - \prop_map_inline:cn { l_@@_poles_ \@@_to_value:N #1 _prop } + \prop_map_inline:Nn \l_@@_poles_prop { \@@_scale_pole:Nnnnnn #1 {##1} ##2 } % \end{macrocode} % Negative $x$-scaling values place the poles in the wrong @@ -2019,18 +2086,25 @@ % \begin{macrocode} \fp_compare:nNnT \l_@@_scale_x_fp < \c_zero_fp { - \prop_map_inline:cn - { l_@@_corners_ \@@_to_value:N #1 _prop } + \prop_map_inline:Nn \l_@@_corners_prop { \@@_x_shift_corner:Nnnn #1 {##1} ##2 } - \prop_map_inline:cn - { l_@@_poles_ \@@_to_value:N #1 _prop } + \prop_map_inline:Nn \l_@@_poles_prop { \@@_x_shift_pole:Nnnnnn #1 {##1} ##2 } } + #4 { coffin ~ \@@_to_value:N #1 ~ corners } + \l_@@_corners_prop + #4 { coffin ~ \@@_to_value:N #1 ~ poles } + \l_@@_poles_prop } % \end{macrocode} % \end{macro} % -% \begin{macro}{\coffin_scale:Nnn, \coffin_scale:cnn} +% \begin{macro} +% { +% \coffin_scale:Nnn, \coffin_scale:cnn, +% \coffin_gscale:Nnn, \coffin_gscale:cnn +% } +% \begin{macro}{\coffin_scale:NnnNN} % For scaling, the opposite calculation is done to find the new % dimensions for the coffin. Only the total height is needed, as this % is the shift required for corners and poles. The scaling is done @@ -2038,22 +2112,29 @@ % without needing to use the \texttt{fp} module. % \begin{macrocode} \cs_new_protected:Npn \coffin_scale:Nnn #1#2#3 + { \@@_scale:NnnNN #1 {#2} {#3} \box_scale:Nnn \prop_set_eq:cN } +\cs_generate_variant:Nn \coffin_scale:Nnn { c } +\cs_new_protected:Npn \coffin_gscale:Nnn #1#2#3 + { \@@_scale:NnnNN #1 {#2} {#3} \box_gscale:Nnn \prop_gset_eq:cN } +\cs_generate_variant:Nn \coffin_gscale:Nnn { c } +\cs_new_protected:Npn \@@_scale:NnnNN #1#2#3#4#5 { \fp_set:Nn \l_@@_scale_x_fp {#2} \fp_set:Nn \l_@@_scale_y_fp {#3} - \box_scale:Nnn #1 { \l_@@_scale_x_fp } { \l_@@_scale_y_fp } + #4 #1 { \l_@@_scale_x_fp } { \l_@@_scale_y_fp } \dim_set:Nn \l_@@_internal_dim { \coffin_ht:N #1 + \coffin_dp:N #1 } \dim_set:Nn \l_@@_scaled_total_height_dim { \fp_abs:n { \l_@@_scale_y_fp } \l_@@_internal_dim } \dim_set:Nn \l_@@_scaled_width_dim { -\fp_abs:n { \l_@@_scale_x_fp } \coffin_wd:N #1 } - \@@_resize_common:Nnn #1 + \@@_resize_common:NnnN #1 { \l_@@_scaled_width_dim } { \l_@@_scaled_total_height_dim } + #5 } -\cs_generate_variant:Nn \coffin_scale:Nnn { c } % \end{macrocode} % \end{macro} +% \end{macro} % % \begin{macro}{\@@_scale_vector:nnNN} % This functions scales a vector from the origin using the pre-set scale @@ -2078,13 +2159,13 @@ \cs_new_protected:Npn \@@_scale_corner:Nnnn #1#2#3#4 { \@@_scale_vector:nnNN {#3} {#4} \l_@@_x_dim \l_@@_y_dim - \prop_put:cnx { l_@@_corners_ \@@_to_value:N #1 _prop } {#2} + \prop_put:Nnx \l_@@_corners_prop {#2} { { \dim_use:N \l_@@_x_dim } { \dim_use:N \l_@@_y_dim } } } \cs_new_protected:Npn \@@_scale_pole:Nnnnnn #1#2#3#4#5#6 { \@@_scale_vector:nnNN {#3} {#4} \l_@@_x_dim \l_@@_y_dim - \@@_set_pole:Nnx #1 {#2} + \prop_put:Nnx \l_@@_poles_prop {#2} { { \dim_use:N \l_@@_x_dim } { \dim_use:N \l_@@_y_dim } {#5} {#6} @@ -2101,14 +2182,14 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_x_shift_corner:Nnnn #1#2#3#4 { - \prop_put:cnx { l_@@_corners_ \@@_to_value:N #1 _prop } {#2} + \prop_put:Nnx \l_@@_corners_prop {#2} { { \dim_eval:n { #3 + \box_wd:N #1 } } {#4} } } \cs_new_protected:Npn \@@_x_shift_pole:Nnnnnn #1#2#3#4#5#6 { - \prop_put:cnx { l_@@_poles_ \@@_to_value:N #1 _prop } {#2} + \prop_put:Nnx \l_@@_poles_prop {#2} { { \dim_eval:n { #3 + \box_wd:N #1 } } {#4} {#5} {#6} @@ -2942,6 +3023,71 @@ % \end{macrocode} % \end{variable} % +% \begin{variable}{\l_@@_internal_tl} +% \begin{macrocode} +\tl_new:N \l_@@_internal_tl +% \end{macrocode} +% \end{variable} +% +% \begin{variable}{\c_@@_marker_tl} +% The same idea as the marker for rescanning token lists. +% \begin{macrocode} +\tl_const:Nx \c_@@_marker_tl { : \token_to_str:N : } +% \end{macrocode} +% \end{variable} +% +% \begin{macro}[TF]{\sys_shell_get:nnN} +% \begin{macro}{\sys_shell_get:nnN,\@@_get:nnN,\@@_get_do:Nw} +% Setting using a shell is at this level just a slightly specialised file +% operation, with an additional check for quotes, as these are not supported. +% \begin{macrocode} +\cs_new_protected:Npn \sys_shell_get:nnN #1#2#3 + { + \sys_shell_get:nnNF {#1} {#2} #3 + { \tl_clear:N #3 } + } +\prg_new_protected_conditional:Npnn \sys_shell_get:nnN #1#2#3 { T , F , TF } + { + \sys_if_shell:TF + { \exp_args:No \@@_get:nnN { \tl_to_str:n {#1} } {#2} #3 } + { \prg_return_false: } + } +\cs_new_protected:Npn \@@_get:nnN #1#2#3 + { + \tl_if_in:nnTF {#1} { " } + { + \__kernel_msg_error:nnx + { kernel } { quote-in-shell } {#1} + \prg_return_false: + } + { + \if_false: { \fi: + \group_begin: + \int_set_eq:NN \tex_tracingnesting:D \c_zero_int + \exp_args:No \tex_everyeof:D { \c_@@_marker_tl } + #2 \scan_stop: + \exp_after:wN \@@_get_do:Nw + \exp_after:wN #3 + \exp_after:wN \prg_do_nothing: + \tex_input:D | "#1" \scan_stop: + \if_false: } \fi: + \prg_return_true: + } + } +\exp_args:Nno \use:nn + { \cs_new_protected:Npn \@@_get_do:Nw #1#2 } + { \c_@@_marker_tl } + { + \group_end: + \tl_set:No #1 {#2} + } +\__kernel_msg_new:nnnn { kernel } { quote-in-shell } + { Quotes~in~shell~command~'#1'. } + { Shell~commands~cannot~contain~quotes~("). } +% \end{macrocode} +% \end{macro} +% \end{macro} +% % \begin{variable}{\c_sys_platform_str} % Detecting the platform on \LuaTeX{} is easy: for other engines, we use % the fact that the two common cases have special null files. It is possible @@ -3144,136 +3290,52 @@ % \end{macro} % \end{macro} % -% \begin{macro} +% \subsubsection{Deprecated functions} +% +% \begin{macro}[deprecated = 2020-12-31] % { -% \tl_set_from_file:Nnn, \tl_set_from_file:cnn, -% \tl_gset_from_file:Nnn, \tl_gset_from_file:cnn +% \tl_set_from_file:Nnn, \tl_set_from_file:cnn, +% \tl_gset_from_file:Nnn, \tl_gset_from_file:cnn, +% \tl_set_from_file_x:Nnn, \tl_set_from_file_x:cnn, +% \tl_gset_from_file_x:Nnn, \tl_gset_from_file_x:cnn % } -% \begin{macro}{\@@_set_from_file:NNnn} -% \begin{macro}{\@@_from_file_do:w} -% \begin{macro}{\@@_set_from:nNNn} -% The approach here is similar to that for doing a rescan, and so the same -% internals can be reused. Thus the plan is to insert a pair of tokens of -% the same charcode but different catcodes after the file has been read. -% This plus \cs{exp_not:N} allows the primitive to be used to carry out -% a set operation. -% \begin{macrocode} -\cs_new_protected:Npn \tl_set_from_file:Nnn - { \@@_set_from_file:NNnn \tl_set:Nn } -\cs_new_protected:Npn \tl_gset_from_file:Nnn - { \@@_set_from_file:NNnn \tl_gset:Nn } -\cs_generate_variant:Nn \tl_set_from_file:Nnn { c } -\cs_generate_variant:Nn \tl_gset_from_file:Nnn { c } -\cs_new_protected:Npn \@@_set_from_file:NNnn #1#2#3#4 +% \begin{macrocode} +\__kernel_patch_deprecation:nnNNpn { 2020-12-31 } { \file_get:nnN } +\cs_new_protected:Npn \tl_set_from_file:Nnn #1#2#3 + { \file_get:nnN {#2} {#3} #1 } +\cs_generate_variant:Nn \tl_set_from_file:Nnn { c } +\__kernel_patch_deprecation:nnNNpn { 2020-12-31 } { \file_get:nnN } +\cs_new_protected:Npn \tl_gset_from_file:Nnn #1#2#3 { - \file_get_full_name:nN {#4} \l_@@_file_name_str - \str_if_empty:NTF \l_@@_file_name_str - { \__kernel_file_missing:n {#4} } - { - \exp_args:NV \@@_set_from:nNNn - \l_@@_file_name_str - #1 #2 {#3} - } + \group_begin: + \file_get:nnN {#3} {#2} \l_@@_internal_a_tl + \tl_gset_eq:NN #1 \l_@@_internal_a_tl + \group_end: } -\exp_args:Nno \use:nn - { \cs_new_protected:Npn \@@_from_file_do:w #1 } - { \c_@@_rescan_marker_tl } - { \tl_set:No \l_@@_internal_a_tl {#1} } -\cs_new_protected:Npn \@@_set_from:nNNn #1#2#3#4 +\cs_generate_variant:Nn \tl_gset_from_file:Nnn { c } +\__kernel_patch_deprecation:nnNNpn { 2020-12-31 } { \file_get:nnN } +\cs_new_protected:Npn \tl_set_from_file_x:Nnn #1#2#3 { \group_begin: - \exp_args:No \tex_everyeof:D - { \c_@@_rescan_marker_tl \exp_not:N } - #4 \scan_stop: - \exp_after:wN \@@_from_file_do:w - \exp_after:wN \prg_do_nothing: - \tex_input:D #1 \scan_stop: + \file_get:nnN {#3} {#2} \l_@@_internal_a_tl + #2 \scan_stop: + \tl_set:Nx \l_@@_internal_a_tl { \l_@@_internal_a_tl } \exp_args:NNNo \group_end: - #2 #3 \l_@@_internal_a_tl + \tl_set:Nn #1 \l_@@_internal_a_tl } -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \begin{macro} -% { -% \tl_set_from_file_x:Nnn, \tl_set_from_file_x:cnn, -% \tl_gset_from_file_x:Nnn, \tl_gset_from_file_x:cnn -% } -% \begin{macro}{\@@_set_from_file_x:NNnn} -% When reading a file and allowing expansion of the content, the set up -% only needs to prevent \TeX{} complaining about the end of the file. That -% is done simply, with a group then used to trap the definition needed. -% Once the business is done using some scratch space, the tokens can be -% transferred to the real target. -% \begin{macrocode} -\cs_new_protected:Npn \tl_set_from_file_x:Nnn - { \@@_set_from_file_x:NNnn \tl_set:Nn } -\cs_new_protected:Npn \tl_gset_from_file_x:Nnn - { \@@_set_from_file_x:NNnn \tl_gset:Nn } -\cs_generate_variant:Nn \tl_set_from_file_x:Nnn { c } -\cs_generate_variant:Nn \tl_gset_from_file_x:Nnn { c } -\cs_new_protected:Npn \@@_set_from_file_x:NNnn #1#2#3#4 +\cs_generate_variant:Nn \tl_set_from_file_x:Nnn { c } +\__kernel_patch_deprecation:nnNNpn { 2020-12-31 } { \file_get:nnN } +\cs_new_protected:Npn \tl_gset_from_file_x:Nnn #1#2#3 { - \file_get_full_name:nN {#4} \l_@@_file_name_str - \str_if_empty:NTF \l_@@_file_name_str - { \__kernel_file_missing:n {#4} } - { - \group_begin: - \tex_everyeof:D { \exp_not:N } - #3 \scan_stop: - \tl_set:Nx \l_@@_internal_a_tl - { \tex_input:D \l_@@_file_name_str \c_space_token } - \exp_args:NNNo \group_end: - #1 #2 \l_@@_internal_a_tl - } - } -% \end{macrocode} -% \end{macro} -% \end{macro} -% \begin{variable}{\l_@@_file_name_str} -% \begin{macrocode} -\str_new:N \l_@@_file_name_str -% \end{macrocode} -% \end{variable} -% -% \begin{macro} -% { -% \tl_set_from_shell:Nnn, \tl_set_from_shell:cnn, -% \tl_gset_from_shell:Nnn, \tl_gset_from_shell:cnn -% } -% \begin{macro}{\@@_set_from_shell:NNnn} -% Setting using a shell is at this level just a slightly specialised file -% operation. -% \begin{macrocode} -\cs_new_protected:Npn \tl_set_from_shell:Nnn - { \@@_set_from_shell:NNnn \tl_set:Nn } -\cs_generate_variant:Nn \tl_set_from_shell:Nnn { c } -\cs_new_protected:Npn \tl_gset_from_shell:Nnn - { \@@_set_from_shell:NNnn \tl_gset:Nn } -\cs_generate_variant:Nn \tl_gset_from_shell:Nnn { c } -\cs_new_protected:Npn \@@_set_from_shell:NNnn #1#2#3#4 - { - \sys_if_shell:TF - { - \tl_set:Nn \l_@@_internal_a_tl {#4} - \tl_if_in:NnTF \l_@@_internal_a_tl { " } - { - \__kernel_msg_error:nnx - { kernel } { quote-in-shell } {#4} - } - { \@@_set_from:nNNn { | " #4 " } #1 #2 {#3} } - } - { #1 #2 { } } + \group_begin: + \file_get:nnN {#3} {#2} \l_@@_internal_a_tl + #2 \scan_stop: + \tl_gset:Nx #1 { \l_@@_internal_a_tl } + \group_end: } -\__kernel_msg_new:nnnn { kernel } { quote-in-shell } - { Quotes~in~shell~command~'#1'. } - { Shell~commands~cannot~contain~quotes~("). } +\cs_generate_variant:Nn \tl_gset_from_file_x:Nnn { c } % \end{macrocode} % \end{macro} -% \end{macro} % % \subsubsection{Unicode case changing} % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx b/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx index c069b5cb9da..6a74eb43eb4 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx @@ -1,8 +1,9 @@ % \iffalse meta-comment % -%% File: l3clist.dtx Copyright (C) 2004-2011,2019 Frank Mittelbach, -%% The LaTeX3 project -%% (C) 2012-2019 The LaTeX3 Project +%% File: l3clist.dtx +% +% Copyright (C) 2004-2011 Frank Mittelbach, The LaTeX3 Project +% (C) 2012-2019 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 @@ -43,7 +44,7 @@ % }^^A % } % -% \date{Released 2019-01-13} +% \date{Released 2019-01-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx b/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx index 83fbbc8f593..38f13a49dcb 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx @@ -1,6 +1,8 @@ % \iffalse meta-comment % -%% File: l3coffins.dtx Copyright (C) 2010-2019 The LaTeX3 Project +%% File: l3coffins.dtx +% +% Copyright (C) 2010-2019 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,7 +43,7 @@ % }^^A % } % -% \date{Released 2019-01-13} +% \date{Released 2019-01-28} % % \maketitle % @@ -62,21 +64,29 @@ % initially empty. % \end{function} % -% \begin{function}[added = 2011-08-17]{\coffin_clear:N, \coffin_clear:c} +% \begin{function}[added = 2011-08-17, updated = 2019-01-21] +% { +% \coffin_clear:N, \coffin_clear:c, +% \coffin_gclear:N, \coffin_gclear:c +% } % \begin{syntax} % \cs{coffin_clear:N} \meta{coffin} % \end{syntax} -% Clears the content of the \meta{coffin} within the current \TeX{} -% group level. +% Clears the content of the \meta{coffin}. % \end{function} % -% \begin{function}[added = 2011-08-17] -% {\coffin_set_eq:NN, \coffin_set_eq:Nc, \coffin_set_eq:cN, \coffin_set_eq:cc} +% \begin{function}[added = 2011-08-17, updated = 2019-01-21] +% { +% \coffin_set_eq:NN, \coffin_set_eq:Nc, +% \coffin_set_eq:cN, \coffin_set_eq:cc +% \coffin_gset_eq:NN, \coffin_gset_eq:Nc, +% \coffin_gset_eq:cN, \coffin_gset_eq:cc +% } % \begin{syntax} % \cs{coffin_set_eq:NN} \meta{coffin_1} \meta{coffin_2} % \end{syntax} % Sets both the content and poles of \meta{coffin_1} equal to those -% of \meta{coffin_2} within the current \TeX\ group level. +% of \meta{coffin_2}. % \end{function} % % \begin{function}[EXP, pTF, added = 2012-06-20] @@ -94,7 +104,10 @@ % current \TeX\ group level. % % \begin{function}[added = 2011-08-17, updated = 2011-09-03] -% {\hcoffin_set:Nn, \hcoffin_set:cn} +% { +% \hcoffin_set:Nn, \hcoffin_set:cn, +% \hcoffin_gset:Nn, \hcoffin_gset:cn +% } % \begin{syntax} % \cs{hcoffin_set:Nn} \meta{coffin} \Arg{material} % \end{syntax} @@ -103,8 +116,11 @@ % then set up based on the size of the typeset material. % \end{function} % -% \begin{function}[added = 2011-09-10] -% {\hcoffin_set:Nw, \hcoffin_set:cw, \hcoffin_set_end:} +% \begin{function}[added = 2011-09-10, updated = 2019-01-21] +% { +% \hcoffin_set:Nw, \hcoffin_set:cw, \hcoffin_set_end:, +% \hcoffin_gset:Nw, \hcoffin_gset:cw, \hcoffin_gset_end: +% } % \begin{syntax} % \cs{hcoffin_set:Nw} \meta{coffin} \meta{material} \cs{hcoffin_set_end:} % \end{syntax} @@ -115,8 +131,11 @@ % environment in a coffin. % \end{function} % -% \begin{function}[added = 2011-08-17, updated = 2012-05-22] -% {\vcoffin_set:Nnn, \vcoffin_set:cnn} +% \begin{function}[added = 2011-08-17, updated = 2019-01-21] +% { +% \vcoffin_set:Nnn, \vcoffin_set:cnn, +% \vcoffin_gset:Nnn, \vcoffin_gset:cnn +% } % \begin{syntax} % \cs{vcoffin_set:Nnn} \meta{coffin} \Arg{width} \Arg{material} % \end{syntax} @@ -126,8 +145,11 @@ % size of the typeset material. % \end{function} % -% \begin{function}[added = 2011-09-10, updated = 2012-05-22] -% {\vcoffin_set:Nnw, \vcoffin_set:cnw, \vcoffin_set_end:} +% \begin{function}[added = 2011-09-10, updated = 2019-01-21] +% { +% \vcoffin_set:Nnw, \vcoffin_set:cnw, \vcoffin_set_end:, +% \vcoffin_gset:Nnw, \vcoffin_gset:cnw, \vcoffin_gset_end: +% } % \begin{syntax} % \cs{vcoffin_set:Nnw} \meta{coffin} \Arg{width} \meta{material} \cs{vcoffin_set_end:} % \end{syntax} @@ -139,8 +161,11 @@ % environment in a coffin. % \end{function} % -% \begin{function}[added = 2012-07-20] -% {\coffin_set_horizontal_pole:Nnn, \coffin_set_horizontal_pole:cnn} +% \begin{function}[added = 2012-07-20, updated = 2019-01-21] +% { +% \coffin_set_horizontal_pole:Nnn, \coffin_set_horizontal_pole:cnn, +% \coffin_gset_horizontal_pole:Nnn, \coffin_gset_horizontal_pole:cnn +% } % \begin{syntax} % \cs{coffin_set_horizontal_pole:Nnn} \meta{coffin} % ~~\Arg{pole} \Arg{offset} @@ -151,8 +176,11 @@ % \meta{offset} should be given as a dimension expression. % \end{function} % -% \begin{function}[added = 2012-07-20] -% {\coffin_set_vertical_pole:Nnn, \coffin_set_vertical_pole:cnn} +% \begin{function}[added = 2012-07-20, updated = 2019-01-21] +% { +% \coffin_set_vertical_pole:Nnn, \coffin_set_vertical_pole:cnn, +% \coffin_gset_vertical_pole:Nnn, \coffin_gset_vertical_pole:cnn +% } % \begin{syntax} % \cs{coffin_set_vertical_pole:Nnn} \meta{coffin} \Arg{pole} \Arg{offset} % \end{syntax} @@ -164,10 +192,12 @@ % % \section{Joining and using coffins} % -% \begin{function} +% \begin{function}[updated = 2019-01-22] % { % \coffin_attach:NnnNnnnn, \coffin_attach:cnnNnnnn, -% \coffin_attach:Nnncnnnn, \coffin_attach:cnncnnnn +% \coffin_attach:Nnncnnnn, \coffin_attach:cnncnnnn, +% \coffin_gattach:NnnNnnnn, \coffin_gattach:cnnNnnnn, +% \coffin_gattach:Nnncnnnn, \coffin_gattach:cnncnnnn % } % \begin{syntax} % \cs{coffin_attach:NnnNnnnn} @@ -188,10 +218,12 @@ % expressions. % \end{function} % -% \begin{function} +% \begin{function}[updated = 2019-01-22] % { % \coffin_join:NnnNnnnn, \coffin_join:cnnNnnnn, -% \coffin_join:Nnncnnnn, \coffin_join:cnncnnnn +% \coffin_join:Nnncnnnn, \coffin_join:cnncnnnn, +% \coffin_gjoin:NnnNnnnn, \coffin_gjoin:cnnNnnnn, +% \coffin_gjoin:Nnncnnnn, \coffin_gjoin:cnncnnnn % } % \begin{syntax} % \cs{coffin_join:NnnNnnnn} @@ -324,6 +356,13 @@ % code and so should only be used for short-term storage. % \end{variable} % +% \begin{variable}[added = 2019-01-24]{\g_tmpa_coffin, \g_tmpb_coffin} +% Scratch coffins for global assignment. These are never used by +% the kernel code, and so are safe for use with any \LaTeX3-defined +% function. However, they may be overwritten by other non-kernel +% code and so should only be used for short-term storage. +% \end{variable} +% % \end{documentation} % % \begin{implementation} @@ -468,7 +507,7 @@ { \cs_if_exist:NTF #1 { - \cs_if_exist:cTF { l_@@_poles_ \@@_to_value:N #1 _prop } + \cs_if_exist:cTF { coffin ~ \@@_to_value:N #1 ~ poles } { \prg_return_true: } { \prg_return_false: } } @@ -496,7 +535,11 @@ % \end{macrocode} % \end{macro} % -% \begin{macro}{\coffin_clear:N, \coffin_clear:c} +% \begin{macro} +% { +% \coffin_clear:N, \coffin_clear:c, +% \coffin_gclear:N, \coffin_gclear:c +% } % Clearing coffins means emptying the box and resetting all of the % structures. % \begin{macrocode} @@ -509,28 +552,33 @@ } } \cs_generate_variant:Nn \coffin_clear:N { c } +\cs_new_protected:Npn \coffin_gclear:N #1 + { + \@@_if_exist:NT #1 + { + \box_gclear:N #1 + \@@_greset_structure:N #1 + } + } +\cs_generate_variant:Nn \coffin_gclear:N { c } % \end{macrocode} % \end{macro} % % \begin{macro}{\coffin_new:N, \coffin_new:c} % Creating a new coffin means making the underlying box and adding the -% data structures. These are created globally, as there is a need to -% avoid any strange effects if the coffin is created inside a group. -% This means that the usual rule about \cs[no-index]{l_\ldots} -% variables has to be broken. The \cs{debug_suspend:} and -% \cs{debug_resume:} functions prevent these checks. They also -% prevent \cs{prop_clear_new:c} from writing useless information to +% data structures. The \cs{debug_suspend:} and \cs{debug_resume:} functions +% prevent \cs{prop_gclear_new:c} from writing useless information to % the log file. % \begin{macrocode} \cs_new_protected:Npn \coffin_new:N #1 { \box_new:N #1 \debug_suspend: - \prop_clear_new:c { l_@@_corners_ \@@_to_value:N #1 _prop } - \prop_clear_new:c { l_@@_poles_ \@@_to_value:N #1 _prop } - \prop_gset_eq:cN { l_@@_corners_ \@@_to_value:N #1 _prop } + \prop_gclear_new:c { coffin ~ \@@_to_value:N #1 ~ corners } + \prop_gclear_new:c { coffin ~ \@@_to_value:N #1 ~ poles } + \prop_gset_eq:cN { coffin ~ \@@_to_value:N #1 ~ corners } \c_@@_corners_prop - \prop_gset_eq:cN { l_@@_poles_ \@@_to_value:N #1 _prop } + \prop_gset_eq:cN { coffin ~ \@@_to_value:N #1 ~ poles } \c_@@_poles_prop \debug_resume: } @@ -538,7 +586,11 @@ % \end{macrocode} % \end{macro} % -% \begin{macro}{\hcoffin_set:Nn, \hcoffin_set:cn} +% \begin{macro} +% { +% \hcoffin_set:Nn, \hcoffin_set:cn, +% \hcoffin_gset:Nn, \hcoffin_gset:cn +% } % Horizontal coffins are relatively easy: set the appropriate box, % reset the structures then update the handle positions. % \begin{macrocode} @@ -551,16 +603,32 @@ \color_ensure_current: #2 } - \@@_reset_structure:N #1 - \@@_update_poles:N #1 - \@@_update_corners:N #1 + \@@_update:N #1 } } \cs_generate_variant:Nn \hcoffin_set:Nn { c } +\cs_new_protected:Npn \hcoffin_gset:Nn #1#2 + { + \@@_if_exist:NT #1 + { + \hbox_gset:Nn #1 + { + \color_ensure_current: + #2 + } + \@@_gupdate:N #1 + } + } +\cs_generate_variant:Nn \hcoffin_gset:Nn { c } % \end{macrocode} % \end{macro} % -% \begin{macro}{\vcoffin_set:Nnn, \vcoffin_set:cnn} +% \begin{macro} +% { +% \vcoffin_set:Nnn, \vcoffin_set:cnn, +% \vcoffin_gset:Nnn, \vcoffin_gset:cnn +% } +% \begin{macro}{\@@_set_vertical:NnnNN} % Setting vertical coffins is more complex. First, the material is % typeset with a given width. The default handles and poles are set as % for a horizontal coffin, before finding the top baseline using a @@ -571,9 +639,21 @@ % \begin{macrocode} \cs_new_protected:Npn \vcoffin_set:Nnn #1#2#3 { + \@@_set_vertical:NnnNN #1 {#2} {#3} + \vbox_set:Nn \@@_update:N + } +\cs_generate_variant:Nn \vcoffin_set:Nnn { c } +\cs_new_protected:Npn \vcoffin_gset:Nnn #1#2#3 + { + \@@_set_vertical:NnnNN #1 {#2} {#3} + \vbox_gset:Nn \@@_gupdate:N + } +\cs_generate_variant:Nn \vcoffin_gset:Nnn { c } +\cs_new_protected:Npn \@@_set_vertical:NnnNN #1#2#3#4#5 + { \@@_if_exist:NT #1 { - \vbox_set:Nn #1 + #4 #1 { \dim_set:Nn \tex_hsize:D {#2} %<*package> @@ -582,9 +662,7 @@ %</package> #3 } - \@@_reset_structure:N #1 - \@@_update_poles:N #1 - \@@_update_corners:N #1 + #5 #1 \vbox_set_top:Nn \l_@@_internal_box { \vbox_unpack:N #1 } \@@_set_pole:Nnx #1 { T } { @@ -599,12 +677,13 @@ \box_clear:N \l_@@_internal_box } } -\cs_generate_variant:Nn \vcoffin_set:Nnn { c } % \end{macrocode} % \end{macro} +% \end{macro} % -% \begin{macro}{\hcoffin_set:Nw, \hcoffin_set:cw} -% \begin{macro}{\hcoffin_set_end:} +% \begin{macro} +% {\hcoffin_set:Nw, \hcoffin_set:cw, \hcoffin_gset:Nw, \hcoffin_gset:cw} +% \begin{macro}{\hcoffin_set_end:, \hcoffin_gset_end:} % These are the \enquote{begin}/\enquote{end} versions of the above: % watch the grouping! % \begin{macrocode} @@ -616,38 +695,64 @@ \cs_set_protected:Npn \hcoffin_set_end: { \hbox_set_end: - \@@_reset_structure:N #1 - \@@_update_poles:N #1 - \@@_update_corners:N #1 + \@@_update:N #1 } } } -\cs_new_protected:Npn \hcoffin_set_end: { } \cs_generate_variant:Nn \hcoffin_set:Nw { c } +\cs_new_protected:Npn \hcoffin_gset:Nw #1 + { + \@@_if_exist:NT #1 + { + \hbox_gset:Nw #1 \color_ensure_current: + \cs_set_protected:Npn \hcoffin_gset_end: + { + \hbox_gset_end: + \@@_gupdate:N #1 + } + } + } +\cs_generate_variant:Nn \hcoffin_gset:Nw { c } +\cs_new_protected:Npn \hcoffin_set_end: { } +\cs_new_protected:Npn \hcoffin_gset_end: { } % \end{macrocode} +% \end{macro} +% \end{macro} % -% \end{macro}\end{macro} -% -% \begin{macro}{\vcoffin_set:Nnw, \vcoffin_set:cnw} -% \begin{macro}{\vcoffin_set_end:} +% \begin{macro} +% {\vcoffin_set:Nnw, \vcoffin_set:cnw, \vcoffin_gset:Nnw, \vcoffin_gset:cnw} +% \begin{macro}{\@@_set_vertical:NnNNNNw} +% \begin{macro}{\vcoffin_set_end:, \vcoffin_gset_end:} % The same for vertical coffins. % \begin{macrocode} \cs_new_protected:Npn \vcoffin_set:Nnw #1#2 { + \@@_set_vertical:NnNNNNw #1 {#2} \vbox_set:Nw + \vcoffin_set_end: + \vbox_set_end: \@@_update:N + } +\cs_generate_variant:Nn \vcoffin_set:Nnw { c } +\cs_new_protected:Npn \vcoffin_gset:Nnw #1#2 + { + \@@_set_vertical:NnNNNNw #1 {#2} \vbox_gset:Nw + \vcoffin_gset_end: + \vbox_gset_end: \@@_gupdate:N + } +\cs_generate_variant:Nn \vcoffin_gset:Nnw { c } +\cs_new_protected:Npn \@@_set_vertical:NnNNNNw #1#2#3#4#5#6 + { \@@_if_exist:NT #1 { - \vbox_set:Nw #1 + #3 #1 \dim_set:Nn \tex_hsize:D {#2} %<*package> \dim_set_eq:NN \linewidth \tex_hsize:D \dim_set_eq:NN \columnwidth \tex_hsize:D %</package> - \cs_set_protected:Npn \vcoffin_set_end: + \cs_set_protected:Npn #4 { - \vbox_set_end: - \@@_reset_structure:N #1 - \@@_update_poles:N #1 - \@@_update_corners:N #1 + #5 + #6 #1 \vbox_set_top:Nn \l_@@_internal_box { \vbox_unpack:N #1 } \@@_set_pole:Nnx #1 { T } { @@ -664,15 +769,16 @@ } } \cs_new_protected:Npn \vcoffin_set_end: { } -\cs_generate_variant:Nn \vcoffin_set:Nnw { c } +\cs_new_protected:Npn \vcoffin_gset_end: { } % \end{macrocode} % \end{macro} % \end{macro} +% \end{macro} % % \begin{macro} % { % \coffin_set_eq:NN, \coffin_set_eq:Nc, -% \coffin_set_eq:cN, \coffin_set_eq:cc +% \coffin_gset_eq:cN, \coffin_gset_eq:cc % } % Setting two coffins equal is just a wrapper around other functions. % \begin{macrocode} @@ -681,10 +787,25 @@ \@@_if_exist:NT #1 { \box_set_eq:NN #1 #2 - \@@_set_eq_structure:NN #1 #2 + \prop_set_eq:cc { coffin ~ \@@_to_value:N #1 ~ corners } + { coffin ~ \@@_to_value:N #2 ~ corners } + \prop_set_eq:cc { coffin ~ \@@_to_value:N #1 ~ poles } + { coffin ~ \@@_to_value:N #2 ~ poles } } } \cs_generate_variant:Nn \coffin_set_eq:NN { c , Nc , cc } +\cs_new_protected:Npn \coffin_gset_eq:NN #1#2 + { + \@@_if_exist:NT #1 + { + \box_gset_eq:NN #1 #2 + \prop_gset_eq:cc { coffin ~ \@@_to_value:N #1 ~ corners } + { coffin ~ \@@_to_value:N #2 ~ corners } + \prop_gset_eq:cc { coffin ~ \@@_to_value:N #1 ~ poles } + { coffin ~ \@@_to_value:N #2 ~ poles } + } + } +\cs_generate_variant:Nn \coffin_gset_eq:NN { c , Nc , cc } % \end{macrocode} % \end{macro} % @@ -698,7 +819,6 @@ % yet. % \begin{macrocode} \coffin_new:N \c_empty_coffin -\tex_setbox:D \c_empty_coffin = \tex_hbox:D { } \coffin_new:N \l_@@_aligned_coffin \coffin_new:N \l_@@_aligned_internal_coffin % \end{macrocode} @@ -706,11 +826,14 @@ % \end{variable} % \end{variable} % -% \begin{variable}{\l_tmpa_coffin, \l_tmpb_coffin} +% \begin{variable} +% {\l_tmpa_coffin, \l_tmpb_coffin, \g_tmpa_coffin, \g_tmpb_coffin} % The usual scratch space. % \begin{macrocode} \coffin_new:N \l_tmpa_coffin \coffin_new:N \l_tmpb_coffin +\coffin_new:N \g_tmpa_coffin +\coffin_new:N \g_tmpb_coffin % \end{macrocode} % \end{variable} % @@ -742,7 +865,7 @@ \cs_new_protected:Npn \@@_get_pole:NnN #1#2#3 { \prop_get:cnNF - { l_@@_poles_ \@@_to_value:N #1 _prop } {#2} #3 + { coffin ~ \@@_to_value:N #1 ~ poles } {#2} #3 { \__kernel_msg_error:nnxx { kernel } { unknown-coffin-pole } { \exp_not:n {#2} } { \token_to_str:N #1 } @@ -752,43 +875,38 @@ % \end{macrocode} % \end{macro} % -% \begin{macro}{\@@_reset_structure:N} +% \begin{macro}{\@@_reset_structure:N, \@@_greset_structure:N} % Resetting the structure is a simple copy job. % \begin{macrocode} \cs_new_protected:Npn \@@_reset_structure:N #1 { - \prop_set_eq:cN { l_@@_corners_ \@@_to_value:N #1 _prop } + \prop_set_eq:cN { coffin ~ \@@_to_value:N #1 ~ corners } \c_@@_corners_prop - \prop_set_eq:cN { l_@@_poles_ \@@_to_value:N #1 _prop } + \prop_set_eq:cN { coffin ~ \@@_to_value:N #1 ~ poles } \c_@@_poles_prop } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_set_eq_structure:NN, \@@_gset_eq_structure:NN} -% Setting coffin structures equal simply means copying the property -% list. -% \begin{macrocode} -\cs_new_protected:Npn \@@_set_eq_structure:NN #1#2 +\cs_new_protected:Npn \@@_greset_structure:N #1 { - \prop_set_eq:cc { l_@@_corners_ \@@_to_value:N #1 _prop } - { l_@@_corners_ \@@_to_value:N #2 _prop } - \prop_set_eq:cc { l_@@_poles_ \@@_to_value:N #1 _prop } - { l_@@_poles_ \@@_to_value:N #2 _prop } - } -\cs_new_protected:Npn \@@_gset_eq_structure:NN #1#2 - { - \prop_gset_eq:cc { l_@@_corners_ \@@_to_value:N #1 _prop } - { l_@@_corners_ \@@_to_value:N #2 _prop } - \prop_gset_eq:cc { l_@@_poles_ \@@_to_value:N #1 _prop } - { l_@@_poles_ \@@_to_value:N #2 _prop } + \prop_gset_eq:cN { coffin ~ \@@_to_value:N #1 ~ corners } + \c_@@_corners_prop + \prop_gset_eq:cN { coffin ~ \@@_to_value:N #1 ~ poles } + \c_@@_poles_prop } % \end{macrocode} % \end{macro} % % \begin{macro} -% {\coffin_set_horizontal_pole:Nnn, \coffin_set_horizontal_pole:cnn} -% \begin{macro}{\coffin_set_vertical_pole:Nnn, \coffin_set_vertical_pole:cnn} +% { +% \coffin_set_horizontal_pole:Nnn, \coffin_set_horizontal_pole:cnn, +% \coffin_gset_horizontal_pole:Nnn, \coffin_gset_horizontal_pole:cnn +% } +% \begin{macro}{\@@_set_horizontal_pole:NnnN} +% \begin{macro} +% { +% \coffin_set_vertical_pole:Nnn, \coffin_set_vertical_pole:cnn, +% \coffin_gset_vertical_pole:Nnn, \coffin_gset_vertical_pole:cnn +% } +% \begin{macro}{\@@_set_vertical_pole:NnnN} % \begin{macro}{\@@_set_pole:Nnn, \@@_set_pole:Nnx} % Setting the pole of a coffin at the user/designer level requires a % bit more care. The idea here is to provide a reasonable interface to @@ -796,10 +914,17 @@ % three-argument version is used internally to do a direct setting. % \begin{macrocode} \cs_new_protected:Npn \coffin_set_horizontal_pole:Nnn #1#2#3 + { \@@_set_horizontal_pole:NnnN #1 {#2} {#3} \prop_put:cnx } +\cs_generate_variant:Nn \coffin_set_horizontal_pole:Nnn { c } +\cs_new_protected:Npn \coffin_gset_horizontal_pole:Nnn #1#2#3 + { \@@_set_horizontal_pole:NnnN #1 {#2} {#3} \prop_gput:cnx } +\cs_generate_variant:Nn \coffin_gset_horizontal_pole:Nnn { c } +\cs_new_protected:Npn \@@_set_horizontal_pole:NnnN #1#2#3#4 { \@@_if_exist:NT #1 { - \@@_set_pole:Nnx #1 {#2} + #4 { coffin ~ \@@_to_value:N #1 ~ poles } + {#2} { { 0pt } { \dim_eval:n {#3} } { 1000pt } { 0pt } @@ -807,10 +932,17 @@ } } \cs_new_protected:Npn \coffin_set_vertical_pole:Nnn #1#2#3 + { \@@_set_vertical_pole:NnnN #1 {#2} {#3} \prop_put:cnx } +\cs_generate_variant:Nn \coffin_set_vertical_pole:Nnn { c } +\cs_new_protected:Npn \coffin_gset_vertical_pole:Nnn #1#2#3 + { \@@_set_vertical_pole:NnnN #1 {#2} {#3} \prop_gput:cnx } + \cs_generate_variant:Nn \coffin_gset_vertical_pole:Nnn { c } +\cs_new_protected:Npn \@@_set_vertical_pole:NnnN #1#2#3#4 { \@@_if_exist:NT #1 { - \@@_set_pole:Nnx #1 {#2} + #4 { coffin ~ \@@_to_value:N #1 ~ poles } + {#2} { { \dim_eval:n {#3} } { 0pt } { 0pt } { 1000pt } @@ -819,47 +951,81 @@ } \cs_new_protected:Npn \@@_set_pole:Nnn #1#2#3 { - \prop_put:cnn { l_@@_poles_ \@@_to_value:N #1 _prop } + \prop_put:cnn { coffin ~ \@@_to_value:N #1 ~ poles } {#2} {#3} } -\cs_generate_variant:Nn \coffin_set_horizontal_pole:Nnn { c } -\cs_generate_variant:Nn \coffin_set_vertical_pole:Nnn { c } \cs_generate_variant:Nn \@@_set_pole:Nnn { Nnx } % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\@@_update:N, \@@_gupdate:N} +% Simple shortcuts. +% \begin{macrocode} +\cs_new_protected:Npn \@@_update:N #1 + { + \@@_reset_structure:N #1 + \@@_update_corners:N #1 + \@@_update_poles:N #1 + } +\cs_new_protected:Npn \@@_gupdate:N #1 + { + \@@_greset_structure:N #1 + \@@_gupdate_corners:N #1 + \@@_gupdate_poles:N #1 + } +% \end{macrocode} +% \end{macro} % -% \begin{macro}{\@@_update_corners:N} +% \begin{macro}{\@@_update_corners:N, \@@_gupdate_corners:N} +% \begin{macro}{\@@_update_corners:NN} +% \begin{macro}{\@@_update_corners:NNN} % Updating the corners of a coffin is straight-forward as at this stage % there can be no rotation. So the corners of the content are just those % of the underlying \TeX{} box. % \begin{macrocode} \cs_new_protected:Npn \@@_update_corners:N #1 + { \@@_update_corners:NN #1 \prop_put:Nnx } +\cs_new_protected:Npn \@@_gupdate_corners:N #1 + { \@@_update_corners:NN #1 \prop_gput:Nnx } +\cs_new_protected:Npn \@@_update_corners:NN #1#2 + { + \exp_args:Nc \@@_update_corners:NNN + { coffin ~ \@@_to_value:N #1 ~ corners } + #1 #2 + } +\cs_new_protected:Npn \@@_update_corners:NNN #1#2#3 { - \prop_put:cnx { l_@@_corners_ \@@_to_value:N #1 _prop } + #3 #1 { tl } - { { 0pt } { \dim_eval:n { \box_ht:N #1 } } } - \prop_put:cnx { l_@@_corners_ \@@_to_value:N #1 _prop } + { { 0pt } { \dim_eval:n { \box_ht:N #2 } } } + #3 #1 { tr } { - { \dim_eval:n { \box_wd:N #1 } } - { \dim_eval:n { \box_ht:N #1 } } + { \dim_eval:n { \box_wd:N #2 } } + { \dim_eval:n { \box_ht:N #2 } } } - \prop_put:cnx { l_@@_corners_ \@@_to_value:N #1 _prop } + #3 #1 { bl } - { { 0pt } { \dim_eval:n { -\box_dp:N #1 } } } - \prop_put:cnx { l_@@_corners_ \@@_to_value:N #1 _prop } + { { 0pt } { \dim_eval:n { -\box_dp:N #2 } } } + #3 #1 { br } { - { \dim_eval:n { \box_wd:N #1 } } - { \dim_eval:n { -\box_dp:N #1 } } + { \dim_eval:n { \box_wd:N #2 } } + { \dim_eval:n { -\box_dp:N #2 } } } } % \end{macrocode} % \end{macro} +% \end{macro} +% \end{macro} % -% \begin{macro}{\@@_update_poles:N} +% \begin{macro}{\@@_update_poles:N, \@@_gupdate_poles:N} +% \begin{macro}{\@@_update_poles:NN} +% \begin{macro}{\@@_update_poles:NNN} % This function is called when a coffin is set, and updates the poles to % reflect the nature of size of the box. Thus this function only alters % poles where the default position is dependent on the size of the box. @@ -867,41 +1033,53 @@ % coffins. % \begin{macrocode} \cs_new_protected:Npn \@@_update_poles:N #1 + { \@@_update_poles:NN #1 \prop_put:Nnx } +\cs_new_protected:Npn \@@_gupdate_poles:N #1 + { \@@_update_poles:NN #1 \prop_gput:Nnx } +\cs_new_protected:Npn \@@_update_poles:NN #1#2 + { + \exp_args:Nc \@@_update_poles:NNN + { coffin ~ \@@_to_value:N #1 ~ poles } + #1 #2 + } +\cs_new_protected:Npn \@@_update_poles:NNN #1#2#3 { - \prop_put:cnx { l_@@_poles_ \@@_to_value:N #1 _prop } { hc } + #3 #1 { hc } { - { \dim_eval:n { 0.5 \box_wd:N #1 } } + { \dim_eval:n { 0.5 \box_wd:N #2 } } { 0pt } { 0pt } { 1000pt } } - \prop_put:cnx { l_@@_poles_ \@@_to_value:N #1 _prop } { r } + #3 #1 { r } { - { \dim_eval:n { \box_wd:N #1 } } + { \dim_eval:n { \box_wd:N #2 } } { 0pt } { 0pt } { 1000pt } } - \prop_put:cnx { l_@@_poles_ \@@_to_value:N #1 _prop } { vc } + #3 #1 { vc } { { 0pt } - { \dim_eval:n { ( \box_ht:N #1 - \box_dp:N #1 ) / 2 } } + { \dim_eval:n { ( \box_ht:N #2 - \box_dp:N #2 ) / 2 } } { 1000pt } { 0pt } } - \prop_put:cnx { l_@@_poles_ \@@_to_value:N #1 _prop } { t } + #3 #1 { t } { { 0pt } - { \dim_eval:n { \box_ht:N #1 } } + { \dim_eval:n { \box_ht:N #2 } } { 1000pt } { 0pt } } - \prop_put:cnx { l_@@_poles_ \@@_to_value:N #1 _prop } { b } + #3 #1 { b } { { 0pt } - { \dim_eval:n { -\box_dp:N #1 } } + { \dim_eval:n { -\box_dp:N #2 } } { 1000pt } { 0pt } } } % \end{macrocode} % \end{macro} +% \end{macro} +% \end{macro} % % \subsection{Coffins: calculation of pole intersections} % @@ -1107,8 +1285,11 @@ % \begin{macro} % { % \coffin_join:NnnNnnnn, \coffin_join:cnnNnnnn, -% \coffin_join:Nnncnnnn , \coffin_join:cnncnnnn +% \coffin_join:Nnncnnnn, \coffin_join:cnncnnnn, +% \coffin_gjoin:NnnNnnnn, \coffin_gjoin:cnnNnnnn, +% \coffin_gjoin:Nnncnnnn, \coffin_gjoin:cnncnnnn % } +% \begin{macro}{\@@_join:NnnNnnnnN} % This command joins two coffins, using a horizontal and vertical pole % from each coffin and making an offset between the two. The result % is stored as the as a third coffin, which has all of its handles @@ -1117,6 +1298,18 @@ % \begin{macrocode} \cs_new_protected:Npn \coffin_join:NnnNnnnn #1#2#3#4#5#6#7#8 { + \@@_join:NnnNnnnnN #1 {#2} {#3} #4 {#5} {#6} {#7} {#8} + \coffin_set_eq:NN + } +\cs_generate_variant:Nn \coffin_join:NnnNnnnn { c , Nnnc , cnnc } +\cs_new_protected:Npn \coffin_gjoin:NnnNnnnn #1#2#3#4#5#6#7#8 + { + \@@_join:NnnNnnnnN #1 {#2} {#3} #4 {#5} {#6} {#7} {#8} + \coffin_gset_eq:NN + } +\cs_generate_variant:Nn \coffin_gjoin:NnnNnnnn { c , Nnnc , cnnc } +\cs_new_protected:Npn \@@_join:NnnNnnnnN #1#2#3#4#5#6#7#8#9 + { \@@_align:NnnNnnnnN #1 {#2} {#3} #4 {#5} {#6} {#7} {#8} \l_@@_aligned_coffin % \end{macrocode} @@ -1144,9 +1337,8 @@ \@@_reset_structure:N \l_@@_aligned_coffin \prop_clear:c { - l_@@_corners_ - \@@_to_value:N \l_@@_aligned_coffin - _prop + coffin ~ \@@_to_value:N \l_@@_aligned_coffin + \c_space_tl corners } \@@_update_poles:N \l_@@_aligned_coffin % \end{macrocode} @@ -1170,18 +1362,21 @@ { \l_@@_offset_x_dim } { \l_@@_offset_y_dim } } \@@_update_vertical_poles:NNN #1 #4 \l_@@_aligned_coffin - \coffin_set_eq:NN #1 \l_@@_aligned_coffin + #9 #1 \l_@@_aligned_coffin } -\cs_generate_variant:Nn \coffin_join:NnnNnnnn { c , Nnnc , cnnc } % \end{macrocode} % \end{macro} +% \end{macro} % % \begin{macro} % { % \coffin_attach:NnnNnnnn, \coffin_attach:cnnNnnnn, -% \coffin_attach:Nnncnnnn, \coffin_attach:cnncnnnn +% \coffin_attach:Nnncnnnn, \coffin_attach:cnncnnnn, +% \coffin_gattach:NnnNnnnn, \coffin_gattach:cnnNnnnn, +% \coffin_gattach:Nnncnnnn, \coffin_gattach:cnncnnnn % } -% \begin{macro}{\coffin_attach_mark:NnnNnnnn} +% \begin{macro}{\@@_attach:NnnNnnnnN} +% \begin{macro}{\@@_attach_mark:NnnNnnnn} % A more simple version of the above, as it simply uses the size of the % first coffin for the new one. This means that the work here is rather % simplified compared to the above code. The function used when marking @@ -1190,6 +1385,18 @@ % \begin{macrocode} \cs_new_protected:Npn \coffin_attach:NnnNnnnn #1#2#3#4#5#6#7#8 { + \@@_attach:NnnNnnnnN #1 {#2} {#3} #4 {#5} {#6} {#7} {#8} + \coffin_set_eq:NN + } +\cs_generate_variant:Nn \coffin_attach:NnnNnnnn { c , Nnnc , cnnc } +\cs_new_protected:Npn \coffin_gattach:NnnNnnnn #1#2#3#4#5#6#7#8 + { + \@@_gattach:NnnNnnnnN #1 {#2} {#3} #4 {#5} {#6} {#7} {#8} + \coffin_gset_eq:NN + } +\cs_generate_variant:Nn \coffin_gattach:NnnNnnnn { c , Nnnc , cnnc } +\cs_new_protected:Npn \@@_attach:NnnNnnnnN #1#2#3#4#5#6#7#8#9 + { \@@_align:NnnNnnnnN #1 {#2} {#3} #4 {#5} {#6} {#7} {#8} \l_@@_aligned_coffin \box_set_ht:Nn \l_@@_aligned_coffin { \box_ht:N #1 } @@ -1198,10 +1405,10 @@ \@@_reset_structure:N \l_@@_aligned_coffin \prop_set_eq:cc { - l_@@_corners_ - \@@_to_value:N \l_@@_aligned_coffin _prop + coffin ~ \@@_to_value:N \l_@@_aligned_coffin + \c_space_tl corners } - { l_@@_corners_ \@@_to_value:N #1 _prop } + { coffin ~ \@@_to_value:N #1 ~ corners } \@@_update_poles:N \l_@@_aligned_coffin \@@_offset_poles:Nnn #1 { 0pt } { 0pt } \@@_offset_poles:Nnn #4 @@ -1209,7 +1416,7 @@ \@@_update_vertical_poles:NNN #1 #4 \l_@@_aligned_coffin \coffin_set_eq:NN #1 \l_@@_aligned_coffin } -\cs_new_protected:Npn \coffin_attach_mark:NnnNnnnn #1#2#3#4#5#6#7#8 +\cs_new_protected:Npn \@@_attach_mark:NnnNnnnn #1#2#3#4#5#6#7#8 { \@@_align:NnnNnnnnN #1 {#2} {#3} #4 {#5} {#6} {#7} {#8} \l_@@_aligned_coffin @@ -1218,10 +1425,10 @@ \box_set_wd:Nn \l_@@_aligned_coffin { \box_wd:N #1 } \box_set_eq:NN #1 \l_@@_aligned_coffin } -\cs_generate_variant:Nn \coffin_attach:NnnNnnnn { c , Nnnc , cnnc } % \end{macrocode} % \end{macro} % \end{macro} +% \end{macro} % % \begin{macro}{\@@_align:NnnNnnnnN} % The internal function aligns the two coffins into a third one, but @@ -1270,7 +1477,7 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_offset_poles:Nnn #1#2#3 { - \prop_map_inline:cn { l_@@_poles_ \@@_to_value:N #1 _prop } + \prop_map_inline:cn { coffin ~ \@@_to_value:N #1 ~ poles } { \@@_offset_pole:Nnnnnnn #1 {##1} ##2 {#2} {#3} } } \cs_new_protected:Npn \@@_offset_pole:Nnnnnnn #1#2#3#4#5#6#7#8 @@ -1299,15 +1506,15 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_offset_corners:Nnn #1#2#3 { - \prop_map_inline:cn { l_@@_corners_ \@@_to_value:N #1 _prop } + \prop_map_inline:cn { coffin ~ \@@_to_value:N #1 ~ corners } { \@@_offset_corner:Nnnnn #1 {##1} ##2 {#2} {#3} } } \cs_new_protected:Npn \@@_offset_corner:Nnnnn #1#2#3#4#5#6 { \prop_put:cnx { - l_@@_corners_ - \@@_to_value:N \l_@@_aligned_coffin _prop + coffin ~ \@@_to_value:N \l_@@_aligned_coffin + \c_space_tl corners } { #1 - #2 } { @@ -1367,6 +1574,14 @@ % \end{macro} % \end{macro} % +% \begin{variable}{\c_@@_empty_coffin} +% An empty-but-horizontal coffin. +% \begin{macrocode} +\coffin_new:N \c_@@_empty_coffin +\tex_setbox:D \c_@@_empty_coffin = \tex_hbox:D { } +% \end{macrocode} +% \end{variable} +% % \begin{macro}{\coffin_typeset:Nnnnn, \coffin_typeset:cnnnn} % Typesetting a coffin means aligning it with the current position, % which is done using a coffin with no content at all. As well as aligning to @@ -1375,7 +1590,7 @@ \cs_new_protected:Npn \coffin_typeset:Nnnnn #1#2#3#4#5 { \mode_leave_vertical: - \@@_align:NnnNnnnnN \c_empty_coffin { H } { l } + \@@_align:NnnNnnnnN \c_@@_empty_coffin { H } { l } #1 {#2} {#3} {#4} {#5} \l_@@_aligned_coffin \box_use_drop:N \l_@@_aligned_coffin } @@ -1506,7 +1721,7 @@ \rule { 1pt } { 1pt } %</package> } - \coffin_attach_mark:NnnNnnnn #1 {#2} {#3} + \@@_attach_mark:NnnNnnnn #1 {#2} {#3} \l_@@_display_pole_coffin { hc } { vc } { 0pt } { 0pt } \hcoffin_set:Nn \l_@@_display_coord_coffin { @@ -1527,7 +1742,7 @@ { #3 #2 } \l_@@_internal_tl \quark_if_no_value:NTF \l_@@_internal_tl { - \coffin_attach_mark:NnnNnnnn #1 {#2} {#3} + \@@_attach_mark:NnnNnnnn #1 {#2} {#3} \l_@@_display_coord_coffin { l } { vc } { 1pt } { 0pt } } @@ -1543,7 +1758,7 @@ } \cs_new_protected:Npn \@@_mark_handle_aux:nnnnNnn #1#2#3#4#5#6#7 { - \coffin_attach_mark:NnnNnnnn #5 {#6} {#7} + \@@_attach_mark:NnnNnnnn #5 {#6} {#7} \l_@@_display_coord_coffin {#1} {#2} { #3 \l_@@_display_offset_dim } { #4 \l_@@_display_offset_dim } @@ -1576,7 +1791,7 @@ %</package> } \prop_set_eq:Nc \l_@@_display_poles_prop - { l_@@_poles_ \@@_to_value:N #1 _prop } + { coffin ~ \@@_to_value:N #1 ~ poles } \@@_get_pole:NnN #1 { H } \l_@@_pole_a_tl \@@_get_pole:NnN #1 { T } \l_@@_pole_b_tl \tl_if_eq:NNT \l_@@_pole_a_tl \l_@@_pole_b_tl @@ -1720,7 +1935,7 @@ } { \prop_map_function:cN - { l_@@_poles_ \@@_to_value:N #2 _prop } + { coffin ~ \@@_to_value:N #2 ~ poles } \msg_show_item_unbraced:nn } { } diff --git a/Master/texmf-dist/source/latex/l3kernel/l3color-base.dtx b/Master/texmf-dist/source/latex/l3kernel/l3color-base.dtx index 6611138e8ff..99cb6c24eec 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3color-base.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3color-base.dtx @@ -1,6 +1,8 @@ % \iffalse meta-comment % -%% File: l3color-base.dtx Copyright (C) 2011,2012,2014,2016-2019 The LaTeX3 Project +%% File: l3color-base.dtx +% +% Copyright (C) 2011,2012,2014,2016-2019 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,7 +43,7 @@ % }^^A % } % -% \date{Released 2019-01-13} +% \date{Released 2019-01-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx b/Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx index 0f0b345b67a..bfbdb25504c 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx @@ -1,6 +1,8 @@ % \iffalse meta-comment % -%% File: l3deprecation.dtx (C) Copyright 2017-2019 The LaTeX3 Project +%% File: l3deprecation.dtx +% +% Copyright (C) 2017-2019 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,7 +43,7 @@ % }^^A % } % -% \date{Released 2019-01-13} +% \date{Released 2019-01-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx b/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx index d33b28c5860..38c0c4cd8d5 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx @@ -1,6 +1,8 @@ % \iffalse meta-comment % -%% File: l3doc.dtx Copyright (C) 1990-2019 The LaTeX3 project +%% File: l3doc.dtx +% +% Copyright (C) 1990-2019 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 @@ -77,7 +79,7 @@ and all files in that bundle must be distributed together. % % \title{The \cls{l3doc} class} % \author{\Team} -% \date{Released 2019-01-13} +% \date{Released 2019-01-28} % \maketitle % \tableofcontents % @@ -2984,10 +2986,10 @@ and all files in that bundle must be distributed together. { \llap { - \hbox_unpack_clear:N \l_@@_macro_index_box + \hbox_unpack_drop:N \l_@@_macro_index_box \vtop to \baselineskip { - \vbox_unpack_clear:N \l_@@_macro_box + \vbox_unpack_drop:N \l_@@_macro_box \vss } } @@ -3050,7 +3052,7 @@ and all files in that bundle must be distributed together. \@@_if_macro_internal:nF {#1} { \seq_gput_right:Nn \g_doc_macros_seq {#1} } \hbox_set:Nw \l_@@_macro_index_box - \hbox_unpack_clear:N \l_@@_macro_index_box + \hbox_unpack_drop:N \l_@@_macro_index_box \int_gincr:N \c@CodelineNo \@@_special_index:nn {#1} { main } \int_gdecr:N \c@CodelineNo @@ -3073,7 +3075,7 @@ and all files in that bundle must be distributed together. { \vbox_set:Nn \l_@@_macro_box { - \vbox_unpack_clear:N \l_@@_macro_box + \vbox_unpack_drop:N \l_@@_macro_box \hbox { \llap { \@@_print_macroname:nN {#1} #2 \ } } } \int_incr:N \l_@@_macro_int diff --git a/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx b/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx index 4dffd5e6fcb..5db66040359 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx @@ -1,6 +1,8 @@ % \iffalse % -%% File l3dosctrip.dtx Copyright (C) 2012,2014-2019 The LaTeX3 Project +%% File l3dosctrip.dtx +% +% Copyright (C) 2012,2014-2019 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 @@ -61,7 +63,7 @@ % }^^A % } % -% \date{Released 2019-01-13} +% \date{Released 2019-01-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3drivers.dtx b/Master/texmf-dist/source/latex/l3kernel/l3drivers.dtx index 41628e06ebb..fe7ad30190f 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3drivers.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3drivers.dtx @@ -1,6 +1,8 @@ % \iffalse meta-comment % -%% File: l3drivers.dtx Copyright (C) 2011-2019 The LaTeX3 Project +%% File: l3drivers.dtx +% +% Copyright (C) 2011-2019 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,7 +43,7 @@ % }^^A % } % -% \date{Released 2019-01-13} +% \date{Released 2019-01-28} % % \maketitle % @@ -554,23 +556,23 @@ %<*package> \ProvidesExplFile %<*dvipdfmx> - {l3dvidpfmx.def}{2019-01-13}{} + {l3dvipdfmx.def}{2019-01-28}{} {L3 Experimental driver: dvipdfmx} %</dvipdfmx> %<*dvips> - {l3dvips.def}{2019-01-13}{} + {l3dvips.def}{2019-01-28}{} {L3 Experimental driver: dvips} %</dvips> %<*dvisvgm> - {l3dvisvgm.def}{2019-01-13}{} + {l3dvisvgm.def}{2019-01-28}{} {L3 Experimental driver: dvisvgm} %</dvisvgm> %<*pdfmode> - {l3pdfmode.def}{2019-01-13}{} + {l3pdfmode.def}{2019-01-28}{} {L3 Experimental driver: PDF mode} %</pdfmode> %<*xdvipdfmx> - {l3xdvidpfmx.def}{2019-01-13}{} + {l3xdvipdfmx.def}{2019-01-28}{} {L3 Experimental driver: xdvipdfmx} %</xdvipdfmx> %</package> diff --git a/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx b/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx index fce3c20242e..4204f1550cd 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx @@ -1,6 +1,8 @@ % \iffalse meta-comment % -%% File: l3expan.dtx Copyright (C) 1990-2019 The LaTeX3 project +%% File: l3expan.dtx +% +% Copyright (C) 1990-2019 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,7 +43,7 @@ % }^^A % } % -% \date{Released 2019-01-13} +% \date{Released 2019-01-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3file.dtx b/Master/texmf-dist/source/latex/l3kernel/l3file.dtx index 75130a10858..1fc35e1cd1b 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3file.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3file.dtx @@ -1,6 +1,8 @@ % \iffalse meta-comment % -%% File: l3file.dtx Copyright (C) 1990-2019 The LaTeX3 Project +%% File: l3file.dtx +% +% Copyright (C) 1990-2019 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 @@ -42,7 +44,7 @@ % }^^A % } % -% \date{Released 2019-01-13} +% \date{Released 2019-01-28} % % \maketitle % @@ -590,6 +592,21 @@ % \cs{l_file_search_path_seq}. % \end{function} % +% \begin{function}[added = 2019-01-16]{\file_get:nnN} +% \begin{function}[TF, added = 2019-01-16]{\file_get:nnN} +% \begin{syntax} +% \cs{file_get:nnN} \Arg{filename} \Arg{setup} \meta{tl} +% \cs{file_get:nnNTF} \Arg{filename} \Arg{setup} \meta{tl} \Arg{true code} \Arg{false code} +% \end{syntax} +% Defines \meta{tl} to the contents of \meta{filename}. +% Category codes may need to be set appropriately via the \meta{setup} +% argument. +% While \cs{file_get:nnN} produces an error if the file is not found, +% \cs{file_get:nnNTF} runs the \meta{true code} (after the assignment +% to \meta{tl}) if the file is found and \meta{false code} otherwise. +% \end{function} +% \end{function} +% % \begin{function}[updated = 2017-06-26] % {\file_get_full_name:nN, \file_get_full_name:VN} % \begin{syntax} @@ -2152,6 +2169,65 @@ % \end{macro} % \end{macro} % +% \begin{variable}{\c_@@_marker_tl} +% The same idea as the marker for rescanning token lists: this pair of +% tokens cannot appear in a file that is being input. +% \begin{macrocode} +\tl_const:Nx \c_@@_marker_tl { : \token_to_str:N : } +% \end{macrocode} +% \end{variable} +% +% \begin{macro}[TF]{\file_get:nnN} +% \begin{macro}{\file_get:nnN,\@@_get_aux:nnN,\@@_get_do:Nw} +% The approach here is similar to that for \cs{tl_set_rescan:Nnn}. +% The file contents are grabbed as an argument delimited by +% \cs{c_@@_marker_tl}. A few subtleties: braces in \cs{if_false:} +% \ldots{} \cs{fi:} to deal with possible alignment tabs, +% \tn{tracingnesting} to avoid a warning about a group being closed +% inside the \tn{scantokens}, and \cs{prg_return_true:} is placed +% after the end-of-file marker. +% \begin{macrocode} +\cs_new_protected:Npn \file_get:nnN #1#2#3 + { + \file_get:nnNF {#1} {#2} #3 + { \__kernel_file_missing:n {#1} } + } +\prg_new_protected_conditional:Npnn \file_get:nnN #1#2#3 { T , F , TF } + { + \file_get_full_name:nN {#1} \l_@@_full_name_str + \str_if_empty:NTF \l_@@_full_name_str + { \prg_return_false: } + { + \exp_args:NV \@@_get_aux:nnN + \l_@@_full_name_str + {#2} #3 + \prg_return_true: + } + } +\cs_new_protected:Npn \@@_get_aux:nnN #1#2#3 + { + \if_false: { \fi: + \group_begin: + \int_set_eq:NN \tex_tracingnesting:D \c_zero_int + \exp_args:No \tex_everyeof:D { \c_@@_marker_tl } + #2 \scan_stop: + \exp_after:wN \@@_get_do:Nw + \exp_after:wN #3 + \exp_after:wN \prg_do_nothing: + \tex_input:D #1 \scan_stop: + \if_false: } \fi: + } +\exp_args:Nno \use:nn + { \cs_new_protected:Npn \@@_get_do:Nw #1#2 } + { \c_@@_marker_tl } + { + \group_end: + \tl_set:No #1 {#2} + } +% \end{macrocode} +% \end{macro} +% \end{macro} +% % \begin{macro}{\file_get_full_name:nN, \file_get_full_name:VN} % \begin{macro}{\@@_get_full_name_search:nN} % The way to test if a file exists is to try to open it: if it does diff --git a/Master/texmf-dist/source/latex/l3kernel/l3final.dtx b/Master/texmf-dist/source/latex/l3kernel/l3final.dtx index dfdd9fa3d65..e4b3dde8316 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3final.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3final.dtx @@ -1,6 +1,8 @@ % \iffalse meta-comment % -%% File: l3final.dtx Copyright (C) 1990-2019 The LaTeX3 Project +%% File: l3final.dtx +% +% Copyright (C) 1990-2019 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,7 +43,7 @@ % }^^A % } % -% \date{Released 2019-01-13} +% \date{Released 2019-01-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3flag.dtx b/Master/texmf-dist/source/latex/l3kernel/l3flag.dtx index a927922da8e..92a45411152 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3flag.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3flag.dtx @@ -1,6 +1,8 @@ % \iffalse meta-comment % -%% File: l3flag.dtx Copyright (C) 2011-2019 The LaTeX3 Project +%% File: l3flag.dtx +% +% Copyright (C) 2011-2019 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,7 +43,7 @@ % }^^A % } % -% \date{Released 2019-01-13} +% \date{Released 2019-01-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3format.ins b/Master/texmf-dist/source/latex/l3kernel/l3format.ins index 7953e36624c..1af3587b031 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3format.ins +++ b/Master/texmf-dist/source/latex/l3kernel/l3format.ins @@ -1,6 +1,8 @@ \iffalse meta-comment -File l3format.ins Copyright (C) 2011,2012,2014-2018 The LaTeX3 Project +File l3format.ins + +Copyright (C) 2011,2012,2014-2018 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 @@ -33,7 +35,7 @@ license information is placed in the derived files. \preamble -Copyright (C) 1990-2018 The LaTeX3 Project +Copyright (C) 1990-2019 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 diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx index a215a574742..2c413701ff2 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx @@ -1,6 +1,8 @@ % \iffalse meta-comment % -%% File: l3fp-assign.dtx Copyright (C) 2011-2019 The LaTeX3 project +%% File: l3fp-assign.dtx +% +% Copyright (C) 2011-2019 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 +40,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2019-01-13} +% \date{Released 2019-01-28} % \maketitle % % \begin{documentation} diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx index 51440d490a9..f5ec47bbcf0 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx @@ -1,6 +1,8 @@ % \iffalse meta-comment % -%% File: l3fp-aux.dtx Copyright (C) 2011-2019 The LaTeX3 Project +%% File: l3fp-aux.dtx +% +% Copyright (C) 2011-2019 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,7 +43,7 @@ % }^^A % } % -% \date{Released 2019-01-13} +% \date{Released 2019-01-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx index 56b66cc108a..03532ae67a4 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx @@ -1,6 +1,8 @@ % \iffalse meta-comment % -%% File: l3fp-basics.dtx Copyright (C) 2011-2014,2016-2019 The LaTeX3 Project +%% File: l3fp-basics.dtx +% +% Copyright (C) 2011-2014,2016-2019 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 +40,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2019-01-13} +% \date{Released 2019-01-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx index 78a2edd6dbd..02e606b3918 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx @@ -1,6 +1,8 @@ % \iffalse meta-comment % -%% File: l3fp-convert.dtx Copyright (C) 2011-2019 The LaTeX3 Project +%% File: l3fp-convert.dtx +% +% Copyright (C) 2011-2019 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,7 +43,7 @@ % }^^A % } % -% \date{Released 2019-01-13} +% \date{Released 2019-01-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx index b1e0634f82b..a16a429fb15 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx @@ -1,6 +1,8 @@ % \iffalse meta-comment % -%% File: l3fp-expo.dtx Copyright (C) 2011-2019 The LaTeX3 Project +%% File: l3fp-expo.dtx +% +% Copyright (C) 2011-2019 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 +40,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2019-01-13} +% \date{Released 2019-01-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx index 996574dcd6f..b34abc8ec6e 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx @@ -1,6 +1,8 @@ % \iffalse meta-comment % -%% File: l3fp-extended.dtx Copyright (C) 2011-2019 The LaTeX3 Project +%% File: l3fp-extended.dtx +% +% Copyright (C) 2011-2019 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 +40,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2019-01-13} +% \date{Released 2019-01-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx index 86e20b1c863..becc0e704cf 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx @@ -1,6 +1,8 @@ % \iffalse meta-comment % -%% File: l3fp-logic.dtx Copyright (C) 2011-2019 The LaTeX3 Project +%% File: l3fp-logic.dtx +% +% Copyright (C) 2011-2019 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 +40,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2019-01-13} +% \date{Released 2019-01-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx index b6c51c5ba64..547cd0c73dc 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx @@ -1,6 +1,8 @@ % \iffalse meta-comment % -%% File: l3fp-parse.dtx Copyright (C) 2011-2019 The LaTeX3 Project +%% File: l3fp-parse.dtx +% +% Copyright (C) 2011-2019 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 +40,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2019-01-13} +% \date{Released 2019-01-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx index c352dce9ded..4ee82b86820 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx @@ -1,6 +1,8 @@ % \iffalse meta-comment % -%% File: l3fp-random.dtx Copyright (C) 2016-2019 The LaTeX3 Project +%% File: l3fp-random.dtx +% +% Copyright (C) 2016-2019 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 +40,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2019-01-13} +% \date{Released 2019-01-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx index fcff6062512..1e70adf9a74 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx @@ -1,6 +1,8 @@ % \iffalse meta-comment % -%% File: l3fp-round.dtx Copyright (C) 2011-2019 The LaTeX3 Project +%% File: l3fp-round.dtx +% +% Copyright (C) 2011-2019 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,7 +43,7 @@ % }^^A % } % -% \date{Released 2019-01-13} +% \date{Released 2019-01-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx index 18c72878f56..1d24bb9969a 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx @@ -1,6 +1,8 @@ % \iffalse meta-comment % -%% File: l3fp-traps.dtx Copyright (C) 2011-2014,2016-2019 The LaTeX3 Project +%% File: l3fp-traps.dtx +% +% Copyright (C) 2011-2014,2016-2019 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 +40,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2019-01-13} +% \date{Released 2019-01-28} % \maketitle % % \begin{documentation} diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-trig.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-trig.dtx index a174ea0369e..8f88bb22468 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-trig.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-trig.dtx @@ -1,6 +1,8 @@ % \iffalse meta-comment % -%% File: l3fp-trig.dtx Copyright (C) 2011-2019 The LaTeX3 Project +%% File: l3fp-trig.dtx +% +% Copyright (C) 2011-2019 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 +40,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2019-01-13} +% \date{Released 2019-01-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx index add8932dab5..0790877d877 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx @@ -1,6 +1,8 @@ % \iffalse meta-comment % -%% File: l3fp.dtx Copyright (C) 2011-2019 The LaTeX3 Project +%% File: l3fp.dtx +% +% Copyright (C) 2011-2019 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,7 +49,7 @@ % }^^A % } % -% \date{Released 2019-01-13} +% \date{Released 2019-01-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx index 702c67415c2..db31916ae19 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx @@ -1,6 +1,8 @@ % \iffalse meta-comment % -%% File: l3fparray.dtx Copyright (C) 2018-2019 The LaTeX3 Project +%% File: l3fparray.dtx +% +% Copyright (C) 2018-2019 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 @@ -42,7 +44,7 @@ % }^^A % } % -% \date{Released 2019-01-13} +% \date{Released 2019-01-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3int.dtx b/Master/texmf-dist/source/latex/l3kernel/l3int.dtx index cf431631a52..7814b278243 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3int.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3int.dtx @@ -1,6 +1,8 @@ % \iffalse meta-comment % -%% File: l3int.dtx Copyright (C) 1990-2019 The LaTeX3 Project +%% File: l3int.dtx +% +% Copyright (C) 1990-2019 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,7 +43,7 @@ % }^^A % } % -% \date{Released 2019-01-13} +% \date{Released 2019-01-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx b/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx index ec1413b5f13..81c3ec6251e 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx @@ -1,6 +1,8 @@ % \iffalse meta-comment % -%% File: l3intarray.dtx Copyright (C) 2017-2019 The LaTeX3 Project +%% File: l3intarray.dtx +% +% Copyright (C) 2017-2019 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 @@ -42,7 +44,7 @@ % }^^A % } % -% \date{Released 2019-01-13} +% \date{Released 2019-01-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx b/Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx index c5bf6831f8a..a2e12741b58 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx @@ -1,6 +1,8 @@ % \iffalse meta-comment % -%% File: l3kernel-functions.dtx Copyright (C) 2018-2019 The LaTeX3 project +%% File: l3kernel-functions.dtx +% +% Copyright (C) 2018-2019 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,7 +43,7 @@ % }^^A % } % -% \date{Released 2019-01-13} +% \date{Released 2019-01-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx b/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx index 714981e3690..9fdcda9e6aa 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx @@ -1,6 +1,8 @@ % \iffalse meta-comment % -%% File: l3keys.dtx Copyright (C) 2006-2019 The LaTeX3 Project +%% File: l3keys.dtx +% +% Copyright (C) 2006-2019 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,7 +43,7 @@ % }^^A % } % -% \date{Released 2019-01-13} +% \date{Released 2019-01-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx b/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx index 69b5259d2af..7c371f2e616 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx @@ -1,6 +1,8 @@ % \iffalse meta-comment % -%% File: l3luatex.dtx Copyright (C) 2010-2019 The LaTeX3 Project +%% File: l3luatex.dtx +% +% Copyright (C) 2010-2019 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,7 +43,7 @@ % }^^A % } % -% \date{Released 2019-01-13} +% \date{Released 2019-01-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx b/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx index 19e088591d0..fe4010b94aa 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx @@ -1,6 +1,8 @@ % \iffalse meta-comment % -%% File: l3msg.dtx Copyright (C) 2009-2019 The LaTeX3 Project +%% File: l3msg.dtx +% +% Copyright (C) 2009-2019 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,7 +43,7 @@ % }^^A % } % -% \date{Released 2019-01-13} +% \date{Released 2019-01-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3names.dtx b/Master/texmf-dist/source/latex/l3kernel/l3names.dtx index cdb4b644cf4..6ea1dc27c8f 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3names.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3names.dtx @@ -1,6 +1,8 @@ % \iffalse meta-comment % -%% File: l3names.dtx Copyright (C) 1990-2019 The LaTeX3 project +%% File: l3names.dtx +% +% Copyright (C) 1990-2019 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,7 +43,7 @@ % }^^A % } % -% \date{Released 2019-01-13} +% \date{Released 2019-01-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx b/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx index cc8a354b139..c6135bc2728 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx @@ -1,6 +1,8 @@ % \iffalse meta-comment % -%% File: l3prg.dtx Copyright (C) 2005-2019 The LaTeX3 Project +%% File: l3prg.dtx +% +% Copyright (C) 2005-2019 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,7 +43,7 @@ % }^^A % } % -% \date{Released 2019-01-13} +% \date{Released 2019-01-28} % % \maketitle % @@ -200,6 +202,19 @@ % the expansion of the conditional code. This includes other instances of either of these functions. % \end{function} % +% \begin{function}[added = 2017-12-12]{\prg_generate_conditional_variant:Nnn} +% \begin{syntax} +% \cs{prg_generate_conditional_variant:Nnn} \cs[no-index]{\meta{name}:\meta{arg spec}} \Arg{variant argument specifiers} \Arg{condition specifiers} +% \end{syntax} +% Defines argument-specifier variants of conditionals. This is +% equivalent to running \cs{cs_generate_variant:Nn} \meta{conditional} +% \Arg{variant argument specifiers} on each \meta{conditional} +% described by the \meta{condition specifiers}. These base-form +% \meta{conditionals} are obtained from the \meta{name} and \meta{arg +% spec} as described for \cs{prg_new_conditional:Npnn}, and they +% should be defined. +% \end{function} +% % \section{The boolean data type} % % This section describes a boolean data type which is closely diff --git a/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx b/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx index a838f63da53..86e901ddb51 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx @@ -1,6 +1,8 @@ % \iffalse meta-comment % -%% File: l3prop.dtx Copyright (C) 1990-2019 The LaTeX3 Project +%% File: l3prop.dtx +% +% Copyright (C) 1990-2019 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,7 +43,7 @@ % }^^A % } % -% \date{Released 2019-01-13} +% \date{Released 2019-01-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx b/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx index 1e914178aeb..3e98198cce3 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx @@ -1,6 +1,8 @@ % \iffalse meta-comment % -%% File: l3quark.dtx Copyright (C) 1990-2019 The LaTeX3 Project +%% File: l3quark.dtx +% +% Copyright (C) 1990-2019 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,7 +43,7 @@ % }^^A % } % -% \date{Released 2019-01-13} +% \date{Released 2019-01-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3regex.dtx b/Master/texmf-dist/source/latex/l3kernel/l3regex.dtx index e0590775beb..b5d27a75f3d 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3regex.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3regex.dtx @@ -1,6 +1,8 @@ % \iffalse meta-comment % -%% File: l3regex.dtx Copyright (C) 2011-2019 The LaTeX3 Project +%% File: l3regex.dtx +% +% Copyright (C) 2011-2019 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,7 +43,7 @@ % }^^A % } % -% \date{Released 2019-01-13} +% \date{Released 2019-01-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx b/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx index d3d84605e69..77fb5b94654 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx @@ -1,6 +1,8 @@ % \iffalse meta-comment % -%% File: l3seq.dtx Copyright (C) 1990-2019 The LaTeX3 Project +%% File: l3seq.dtx +% +% Copyright (C) 1990-2019 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,7 +43,7 @@ % }^^A % } % -% \date{Released 2019-01-13} +% \date{Released 2019-01-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx b/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx index ba43b3423a1..31a92b553d9 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx @@ -1,7 +1,9 @@ % \iffalse meta-comment % -%% File: l3skip.dtx Copyright (C) 2004-2011,2019 Frank Mittelbach, The LaTeX3 Project -%% (C) 2012-2019 The LaTeX3 Project +%% File: l3skip.dtx +% +% Copyright (C) 2004-2011 Frank Mittelbach, The LaTeX3 Project +% (C) 2012-2019 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 @@ -42,7 +44,7 @@ % }^^A % } % -% \date{Released 2019-01-13} +% \date{Released 2019-01-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3sort.dtx b/Master/texmf-dist/source/latex/l3kernel/l3sort.dtx index 9eb3205101c..aa3d23116aa 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3sort.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3sort.dtx @@ -1,6 +1,8 @@ % \iffalse % -%% File l3sort.dtx (C) Copyright 2012-2019 The LaTeX3 Project +%% File l3sort.dtx +% +% Copyright (C) 2012-2019 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,7 +43,7 @@ % }^^A % } % -% \date{Released 2019-01-13} +% \date{Released 2019-01-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3str.dtx b/Master/texmf-dist/source/latex/l3kernel/l3str.dtx index e880e334980..5d3cb07f29e 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3str.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3str.dtx @@ -1,6 +1,8 @@ % \iffalse meta-comment % -%% File: l3str.dtx Copyright (C) 2011-2019 The LaTeX3 Project +%% File: l3str.dtx +% +% Copyright (C) 2011-2019 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,7 +43,7 @@ % }^^A % } % -% \date{Released 2019-01-13} +% \date{Released 2019-01-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3sys.dtx b/Master/texmf-dist/source/latex/l3kernel/l3sys.dtx index f9186c2e376..ffd7594fc27 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3sys.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3sys.dtx @@ -1,6 +1,8 @@ % \iffalse meta-comment % -%% File: l3sys.dtx Copyright (C) 2015-2019 The LaTeX3 Project +%% File: l3sys.dtx +% +% Copyright (C) 2015-2019 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,7 +43,7 @@ % }^^A % } % -% \date{Released 2019-01-13} +% \date{Released 2019-01-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx b/Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx index b02fa0654af..29c9ce4f67c 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx @@ -1,6 +1,8 @@ % \iffalse meta-comment % -%% File: l3tl-analysis.dtx Copyright (C) 2011-2019 The LaTeX3 Project +%% File: l3tl-analysis.dtx +% +% Copyright (C) 2011-2019 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 @@ -42,7 +44,7 @@ % }^^A % } % -% \date{Released 2019-01-13} +% \date{Released 2019-01-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx b/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx index e8aee01c660..f10e5b74fdf 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx @@ -1,6 +1,8 @@ % \iffalse meta-comment % -%% File: l3tl.dtx Copyright (C) 1990-2019 The LaTeX3 Project +%% File: l3tl.dtx +% +% Copyright (C) 1990-2019 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,7 +43,7 @@ % }^^A % } % -% \date{Released 2019-01-13} +% \date{Released 2019-01-28} % % \maketitle % @@ -283,7 +285,7 @@ % supported, it is often preferable to find alternative approaches % to achieving outcomes rather than rescanning tokens (for example % construction of token lists token-by-token with intervening category -% code changes). +% code changes or using \cs{char_generate:nn}). % % \begin{function}[updated = 2015-08-11] % { @@ -1532,16 +1534,16 @@ % \tl_gset_rescan:cnn, \tl_gset_rescan:cno, \tl_gset_rescan:cnx % } % \begin{macro}{\tl_rescan:nn} -% \begin{macro}{\@@_set_rescan:NNnn, \@@_set_rescan_multi:n} -% \begin{macro}[EXP]{\@@_rescan:w} -% These functions use a common auxiliary. After some initial setup -% explained below, and the user setup |#3| (followed by -% \cs{scan_stop:} to be safe), the tokens are rescanned by -% \cs{@@_set_rescan:n} and stored into \cs{l_@@_internal_a_tl}, then -% passed to |#1#2| outside the group after expansion. The auxiliary -% \cs{@@_set_rescan:n} is defined later: in the simplest case, this -% auxiliary calls \cs{@@_set_rescan_multi:n}, whose code is included -% here to help understand the approach. +% \begin{macro}{\@@_set_rescan:NNnn, \@@_set_rescan_multi:nNN} +% \begin{macro}[EXP]{\@@_rescan:NNw} +% In a group, after some initial setup explained below and the user +% setup~|#3| (followed by \cs{scan_stop:} to be safe), there is a call +% to \cs{@@_set_rescan:nNN}. This shared auxiliary distinguishes +% single-line and multi-line files as explained below. In the +% simplest case of multi-line files it calls (with the same arguments) +% \cs{@@_set_rescan_multi:nNN}, whose code is included here to help +% understand the approach: it rescans its argument |#1|, closes the +% group, and performs the assignment. % % One difficulty when rescanning is that \tn{scantokens} treats the % argument as a file, and without the correct settings a \TeX{} error @@ -1549,60 +1551,64 @@ % \begin{verbatim} % ! File ended while scanning definition of ... % \end{verbatim} -% The standard solution is to use an \texttt{x}-expanding assignment -% and set \tn{everyeof} to \cs{exp_not:N} to suppress the error at -% the end of the file. Since the rescanned tokens should not be -% expanded, they are taken as a delimited argument of an -% auxiliary which wraps them in \cs{exp_not:n} (in fact -% \cs{exp_not:o}, as there is a \cs{prg_do_nothing:} to avoid losing -% braces). The delimiter cannot appear within the rescanned token -% list because it contains twice the same character, with different -% catcodes. -% -% The difference between single-line and multiple-line files -% complicates the story, as explained below. +% A related minor issue is a warning due to opening a group before the +% \tn{scantokens} and closing it inside that temporary file; we avoid +% that by setting \tn{tracingnesting}. The standard solution to the +% ``File ended'' error is to grab the rescanned tokens as a delimited +% argument of an auxiliary, here \cs{@@_set_rescan:NNw}, that performs +% the assignment, then let \TeX{} ``execute'' the end of file marker. +% As usual in delimited arguments we use \cs{prg_do_nothing:} to avoid +% stripping an outer set braces: this is removed by using +% \texttt{o}-expanding assignments. The delimiter cannot appear +% within the rescanned token list because it contains twice the same +% character, with different catcodes. +% +% For \cs{tl_rescan:nn} we cannot simply call \cs{@@_set_rescan:NNnn} +% \cs{prg_do_nothing:} \cs{use:n} because that would leave the +% end-of-file marker \emph{after} the result of rescanning. If that +% rescanned result is code that looks further in the input stream for +% arguments, it would break. +% +% The two \cs{if_false:} \ldots{} \cs{fi:} are there to prevent +% alignment tabs to cause a change of tabular cell while rescanning. % \begin{macrocode} \cs_new_protected:Npn \tl_set_rescan:Nnn - { \@@_set_rescan:NNnn \tl_set:Nn } + { \@@_set_rescan:NNnn \tl_set:No } \cs_new_protected:Npn \tl_gset_rescan:Nnn - { \@@_set_rescan:NNnn \tl_gset:Nn } -\cs_new_protected:Npn \tl_rescan:nn - { \@@_set_rescan:NNnn \prg_do_nothing: \use:n } + { \@@_set_rescan:NNnn \tl_gset:No } +\cs_new_protected:Npn \tl_rescan:nn #1#2 + { + \tl_set_rescan:Nnn \l_@@_internal_a_tl {#1} {#2} + \exp_after:wN \tl_clear:N \exp_after:wN \l_@@_internal_a_tl + \l_@@_internal_a_tl + } \cs_new_protected:Npn \@@_set_rescan:NNnn #1#2#3#4 { - \tl_if_empty:nTF {#4} - { - \group_begin: - #3 - \group_end: - #1 #2 { } - } - { - \group_begin: - \exp_args:No \tex_everyeof:D - { \c_@@_rescan_marker_tl \exp_not:N } - \int_compare:nNnT \tex_endlinechar:D = { 32 } - { \int_set:Nn \tex_endlinechar:D { -1 } } - \tex_newlinechar:D \tex_endlinechar:D - #3 \scan_stop: - \exp_args:No \@@_set_rescan:n { \tl_to_str:n {#4} } - \exp_args:NNNo - \group_end: - #1 #2 \l_@@_internal_a_tl - } + \if_false: { \fi: + \group_begin: + \int_set_eq:NN \tex_tracingnesting:D \c_zero_int + \exp_args:No \tex_everyeof:D { \c_@@_rescan_marker_tl } + \int_compare:nNnT \tex_endlinechar:D = { 32 } + { \int_set:Nn \tex_endlinechar:D { -1 } } + \int_set_eq:NN \tex_newlinechar:D \tex_endlinechar:D + #3 \scan_stop: + \exp_args:No \@@_set_rescan:nNN { \tl_to_str:n {#4} } #1 #2 + \if_false: } \fi: } -\cs_new_protected:Npn \@@_set_rescan_multi:n #1 +\cs_new_protected:Npn \@@_set_rescan_multi:nNN #1#2#3 { - \tl_set:Nx \l_@@_internal_a_tl - { - \exp_after:wN \@@_rescan:w - \exp_after:wN \prg_do_nothing: - \tex_scantokens:D {#1} - } + \exp_after:wN \@@_rescan:NNw + \exp_after:wN #2 + \exp_after:wN #3 + \exp_after:wN \prg_do_nothing: + \tex_scantokens:D {#1} } \exp_args:Nno \use:nn - { \cs_new:Npn \@@_rescan:w #1 } \c_@@_rescan_marker_tl - { \exp_not:o {#1} } + { \cs_new:Npn \@@_rescan:NNw #1#2#3 } \c_@@_rescan_marker_tl + { + \group_end: + #1 #2 {#3} + } \cs_generate_variant:Nn \tl_set_rescan:Nnn { Nno , Nnx } \cs_generate_variant:Nn \tl_set_rescan:Nnn { c , cno , cnx } \cs_generate_variant:Nn \tl_gset_rescan:Nnn { Nno , Nnx } @@ -1614,10 +1620,10 @@ % \end{macro} % \end{macro} % -% \begin{macro}{\@@_set_rescan:n, \@@_set_rescan:NnTF} -% \begin{macro}{\@@_set_rescan_single:nn, \@@_set_rescan_single_aux:nn} -% This function calls \cs{@@_set_rescan_multiple:n} or -% \cs{@@_set_rescan_single:nn} |{ ' }| depending on whether its +% \begin{macro}{\@@_set_rescan:nNN} +% \begin{macro}{\@@_set_rescan_single:nnNN, \@@_set_rescan_single_aux:nnNN} +% This function calls \cs{@@_set_rescan_multi:nNN} or +% \cs{@@_set_rescan_single:nnNN} |{ ' }| depending on whether its % argument is a single-line fragment of code/data or is made of % multiple lines by testing for the presence of a \tn{newlinechar} % character. If \tn{newlinechar} is out of range, the argument is @@ -1639,12 +1645,11 @@ % % For a single line, no \tn{endlinechar} should be added, so it is % set to $-1$, and spaces should not be removed. -% % Trailing spaces and tabs are a difficult matter, as \TeX{} removes % these at a very low level. The only way to preserve them is to % rescan not the argument but the argument followed by a character -% with a reasonable category code. Here, $11$ (letter), $12$ (other) -% and $13$ (active) are accepted, as these are suitable for +% with a reasonable category code. Here, $11$ (letter) and $12$ (other) +% are accepted, as these are convenient, suitable for % delimiting an argument, and it is very unlikely that none of the % ASCII characters are in one of these categories. To avoid % selecting one particular character to put at the end, whose @@ -1654,86 +1659,59 @@ % range of characters whose standard category is letter or other, % thus minimizing the number of steps needed by the loop (most often % just a single one). Once a valid character is found, run some code -% very similar to \cs{@@_set_rescan_multi:n}, except that -% \cs{@@_rescan:w} must be redefined to also remove the additional -% character (with the appropriate catcode). Getting the delimiter -% with the right catcode requires using \tn{scantokens} inside an -% \texttt{x}-expansion, hence using the previous definition of -% \cs{@@_rescan:w} as well. The odd \cs{exp_not:N} \cs{use:n} -% ensures that the trailing \cs{exp_not:N} in \tn{everyeof} does -% not prevent the expansion of \cs{c_@@_rescan_marker_tl}, but -% rather of a closing brace (this does nothing). -% If no valid character is found, similar code is ran, -% and the only difference is that trailing spaces are not preserved -% (bear in mind that this only happens if no character between $39$ -% and $127$ has catcode letter, other or active). -% -% There is also some work to preserve leading spaces: test whether -% the first character (given by \cs{str_head:n}, with an extra space -% to circumvent a limitation of \texttt{f}-expansion) has catcode -% $10$ and add what \TeX{} would add in the middle of a line for any -% sequence of such characters: a single space with catcode $10$ and -% character code $32$. +% very similar to \cs{@@_set_rescan_multi:nNN} but with that character +% put at the start and end. The auxiliary \cs{@@_rescan:NNw} must be +% redefined to also remove the additional character (with the +% appropriate catcode thanks to \cs{char_generate:nn}). If no valid +% character is found (very rare), fall-back on +% \cs{@@_set_rescan_multi:nNN}. % \begin{macrocode} -\group_begin: - \tex_catcode:D `\^^@ = 12 \scan_stop: - \cs_new_protected:Npn \@@_set_rescan:n #1 - { - \int_compare:nNnTF \tex_newlinechar:D < 0 - { \use_ii:nn } - { - \char_set_lccode:nn { 0 } { \tex_newlinechar:D } - \tex_lowercase:D { \@@_set_rescan:NnTF ^^@ } {#1} - } - { \@@_set_rescan_multi:n } - { \@@_set_rescan_single:nn { ' } } - {#1} - } - \cs_new_protected:Npn \@@_set_rescan:NnTF #1#2 - { \tl_if_in:nnTF {#2} {#1} } - \cs_new_protected:Npn \@@_set_rescan_single:nn #1 - { - \int_compare:nNnTF - { \char_value_catcode:n { `#1 } / 3 } = 4 - { \@@_set_rescan_single_aux:nn {#1} } - { - \int_compare:nNnTF { `#1 } < { `\~ } - { - \char_set_lccode:nn { 0 } { `#1 + 1 } - \tex_lowercase:D { \@@_set_rescan_single:nn { ^^@ } } - } - { \@@_set_rescan_single_aux:nn { } } - } - } - \cs_new_protected:Npn \@@_set_rescan_single_aux:nn #1#2 - { - \int_set:Nn \tex_endlinechar:D { -1 } - \use:x - { - \exp_not:N \use:n - { - \exp_not:n { \cs_set:Npn \@@_rescan:w ##1 } - \exp_after:wN \@@_rescan:w - \exp_after:wN \prg_do_nothing: - \tex_scantokens:D {#1} - } - \c_@@_rescan_marker_tl - } - { \exp_not:o {##1} } - \tl_set:Nx \l_@@_internal_a_tl +\cs_new_protected:Npn \@@_set_rescan:nNN #1 + { + \int_compare:nNnTF \tex_newlinechar:D < 0 + { \use_ii:nn } + { + \exp_args:Nnf \tl_if_in:nnTF {#1} + { \char_generate:nn { \tex_newlinechar:D } { 12 } } + } + { \@@_set_rescan_multi:nNN } { - \int_compare:nNnT - { - \char_value_catcode:n - { \exp_last_unbraced:Nf ` { \str_head:n {#2} } ~ } - } - = { 10 } { ~ } - \exp_after:wN \@@_rescan:w - \exp_after:wN \prg_do_nothing: - \tex_scantokens:D { #2 #1 } + \int_set:Nn \tex_endlinechar:D { -1 } + \@@_set_rescan_single:nnNN { `' } } - } -\group_end: + {#1} + } +\cs_new_protected:Npn \@@_set_rescan_single:nnNN #1 + { + \int_compare:nNnTF + { \char_value_catcode:n {#1} / 2 } = 6 + { + \exp_args:Nf \@@_set_rescan_single_aux:nnNN + { \char_generate:nn {#1} { \char_value_catcode:n {#1} } } + } + { + \int_compare:nNnTF {#1} < { `\~ } + { + \exp_args:Nf \@@_set_rescan_single:nnNN + { \int_eval:n { #1 + 1 } } + } + { \@@_set_rescan_multi:nNN } + } + } +\cs_new_protected:Npn \@@_set_rescan_single_aux:nnNN #1#2#3#4 + { + \exp_args:Nno \use:nn + { \cs_set:Npn \@@_rescan:NNw ##1##2##3 #1 } + \c_@@_rescan_marker_tl + { + \group_end: + ##1 ##2 { \use_none:n ##3 } + } + \exp_after:wN \@@_rescan:NNw + \exp_after:wN #3 + \exp_after:wN #4 + \tex_scantokens:D { #1 #2 #1 } + } % \end{macrocode} % \end{macro} % \end{macro} diff --git a/Master/texmf-dist/source/latex/l3kernel/l3token.dtx b/Master/texmf-dist/source/latex/l3kernel/l3token.dtx index d94b08dc5a4..3725929968d 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3token.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3token.dtx @@ -1,6 +1,8 @@ % \iffalse meta-comment % -%% File: l3token.dtx Copyright (C) 2005-2019 The LaTeX3 Project +%% File: l3token.dtx +% +% Copyright (C) 2005-2019 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,7 +43,7 @@ % }^^A % } % -% \date{Released 2019-01-13} +% \date{Released 2019-01-28} % % \maketitle % @@ -121,7 +123,7 @@ % be an active character. % \end{function} % -% \begin{function}[EXP, added = 2015-09-09, updated = 2018-04-19] +% \begin{function}[EXP, added = 2015-09-09, updated = 2019-01-16] % {\char_generate:nn} % \begin{syntax} % \cs{char_generate:nn} \Arg{charcode} \Arg{catcode} @@ -144,6 +146,9 @@ % and other values raise an error. The \meta{charcode} may be any one valid % for the engine in use. % Active characters cannot be generated in older versions of \XeTeX{}. +% \begin{texnote} +% Exactly two expansions are needed to produce the character. +% \end{texnote} % \end{function} % % \begin{variable}[added = 2011-09-05]{\c_catcode_other_space_tl} @@ -1415,7 +1420,9 @@ % Engine-dependent definitions are now needed for the implementation. For % \LuaTeX{} and \XeTeX{} there is engine-level support. % They can do cases that macro emulation can't. All of those are filtered -% out here using a primitive-based boolean expression for speed. +% out here using a primitive-based boolean expression to avoid fixing +% the category code of the null character used in the false branch +% (for 8-bit engines). % The final level is the basic definition at the engine level: the arguments % here are integers so there is no need to worry about them too much. % Older versions of \XeTeX{} cannot generate active characters so we filter @@ -1465,7 +1472,7 @@ } \else: % \end{macrocode} -% For engines where \tn{Ucharcat} isn't available (or emulated) then we have +% For engines where \tn{Ucharcat} isn't available or emulated, we have % to work in macros, and cover only the $8$-bit range. The first stage is % to build up a |tl| containing |^^@| with each category code that can % be accessed in this way, with an error set up for the other cases. This @@ -1483,21 +1490,8 @@ \tl_set:Nx \l_@@_tmp_tl { \l_@@_tmp_tl } \char_set_catcode_math_toggle:n { 0 } \tl_put_right:Nn \l_@@_tmp_tl { \or: ^^@ } -% \end{macrocode} -% As \TeX{} is very unhappy if if finds an alignment character inside -% a primitive \tn{halign} even when skipping false branches, some precautions -% are required. \TeX{} is happy if the token is hidden inside -% \tn{unexpanded} (which needs to be the primitive). The expansion chain here -% is required so that the conditional gets cleaned up correctly (other code -% assumes there is exactly one token to skip during the clean-up). -% \begin{macrocode} \char_set_catcode_alignment:n { 0 } - \tl_put_right:Nn \l_@@_tmp_tl - { - \or: - \__kernel_exp_not:w \exp_after:wN - { \exp_after:wN ^^@ \exp_after:wN } - } + \tl_put_right:Nn \l_@@_tmp_tl { \or: ^^@ } \tl_put_right:Nn \l_@@_tmp_tl { \or: } \char_set_catcode_parameter:n { 0 } \tl_put_right:Nn \l_@@_tmp_tl { \or: ^^@ } @@ -1550,15 +1544,23 @@ %<*initex> \int_step_function:nnN { 0 } { 255 } \@@_tmp:n %</initex> +% \end{macrocode} +% As \TeX{} is very unhappy if if finds an alignment character inside +% a primitive \tn{halign} even when skipping false branches, some +% precautions are required. \TeX{} is happy if the token is hidden +% between braces within \cs{if_false:} \dots{} \cs{fi:}. +% \begin{macrocode} \cs_new:Npn \@@_generate_aux:nnw #1#2#3 \exp_end: { #3 + \if_false: { \fi: \exp_after:wN \exp_after:wN \exp_after:wN \exp_end: \exp_after:wN \exp_after:wN \if_case:w #2 \exp_last_unbraced:Nv \exp_stop_f: { c_@@_ \@@_int_to_roman:w #1 _tl } + \or: } \fi: } \fi: diff --git a/Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx b/Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx index bb483438469..e7f145d469b 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx @@ -1,6 +1,8 @@ % \iffalse meta-comment % -%% File: l3unicode.dtx Copyright (C) 2018-2019 The LaTeX3 Project +%% File: l3unicode.dtx +% +% Copyright (C) 2018-2019 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,7 +43,7 @@ % }^^A % } % -% \date{Released 2019-01-13} +% \date{Released 2019-01-28} % % \maketitle % diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3benchmark/l3benchmark.sty b/Master/texmf-dist/tex/latex/l3experimental/l3benchmark/l3benchmark.sty index 87c8790e3d3..ce3c1e0bd07 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3benchmark/l3benchmark.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/l3benchmark/l3benchmark.sty @@ -6,7 +6,7 @@ %% %% l3benchmark.dtx (with options: `package') %% -%% Copyright (C) 2018 The LaTeX3 Project +%% Copyright (C) 2018,2019 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 @@ -18,9 +18,9 @@ %% This file is part of the "l3experimental bundle" (The Work in LPPL) %% and all files in that bundle must be distributed together. %% -%% File: l3benchmark.dtx Copyright (C) 2011,2012,2014-2018 The LaTeX3 Project +%% File: l3benchmark.dtx \RequirePackage{expl3} -\ProvidesExplPackage{l3benchmark}{2018-11-19}{} +\ProvidesExplPackage{l3benchmark}{2019-01-28}{} {L3 Experimental benchmarking} \sys_if_engine_luatex:TF { diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3cctab/l3cctab.sty b/Master/texmf-dist/tex/latex/l3experimental/l3cctab/l3cctab.sty index b94484a9d1a..246a3d4f508 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3cctab/l3cctab.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/l3cctab/l3cctab.sty @@ -6,7 +6,7 @@ %% %% l3cctab.dtx (with options: `package') %% -%% Copyright (C) 2018 The LaTeX3 Project +%% Copyright (C) 2018,2019 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 @@ -18,9 +18,9 @@ %% This file is part of the "l3experimental bundle" (The Work in LPPL) %% and all files in that bundle must be distributed together. %% -%% File: l3cctab.dtx Copyright (C) 2018 The LaTeX3 Project +%% File: l3cctab.dtx \RequirePackage{expl3} -\ProvidesExplPackage{l3cctab}{2018-11-19}{} +\ProvidesExplPackage{l3cctab}{2019-01-28}{} {L3 Experimental category code tables} \int_new:N \g__cctab_allocate_int \int_gset:Nn \g__cctab_allocate_int { -1 } diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3color/l3color.sty b/Master/texmf-dist/tex/latex/l3experimental/l3color/l3color.sty index 5caa1a16b60..ed1644c6a95 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3color/l3color.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/l3color/l3color.sty @@ -6,7 +6,7 @@ %% %% l3color.dtx (with options: `package') %% -%% Copyright (C) 2017-2018 The LaTeX3 Project +%% Copyright (C) 2017-2019 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 @@ -18,9 +18,9 @@ %% This file is part of the "l3experimental bundle" (The Work in LPPL) %% and all files in that bundle must be distributed together. %% -%% File: l3color.dtx Copyright(C) 2017-2018 The LaTeX3 Project +%% File: l3color.dtx \RequirePackage{expl3} -\ProvidesExplPackage{l3color}{2018-11-19}{} +\ProvidesExplPackage{l3color}{2019-01-28}{} {L3 Experimental color support} \tl_new:N \l__color_tmp_tl \prg_new_conditional:Npnn \__color_if_defined:n #1 { T, F, TF } diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3draw/l3draw.sty b/Master/texmf-dist/tex/latex/l3experimental/l3draw/l3draw.sty index 7568542ba7c..484f1ac6dc6 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3draw/l3draw.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/l3draw/l3draw.sty @@ -13,7 +13,7 @@ %% l3draw-state.dtx (with options: `package') %% l3draw-transforms.dtx (with options: `package') %% -%% Copyright (C) 2018 The LaTeX3 Project +%% Copyright (C) 2018,2019 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 @@ -25,12 +25,12 @@ %% This file is part of the "l3experimental bundle" (The Work in LPPL) %% and all files in that bundle must be distributed together. %% -%% File: l3draw.dtx Copyright(C) 2018 The LaTeX3 Project +%% File: l3draw.dtx \RequirePackage{expl3} -\ProvidesExplPackage{l3draw}{2018-11-19}{} +\ProvidesExplPackage{l3draw}{2019-01-28}{} {L3 Experimental core drawing support} \RequirePackage { l3color } -%% File: l3draw-boxes.dtx Copyright(C) 2018 The LaTeX3 Project +%% File: l3draw-boxes.dtx \box_new:N \l__draw_tmp_box \cs_new_protected:Npn \draw_box_use:N #1 { @@ -90,7 +90,7 @@ { \box_ht:N \l__draw_tmp_box } \group_end: } -%% File: l3draw-paths.dtx Copyright(C) 2018 The LaTeX3 Project +%% File: l3draw-paths.dtx \tl_new:N \l__draw_path_tmp_tl \fp_new:N \l__draw_path_tmpa_fp \fp_new:N \l__draw_path_tmpb_fp @@ -703,7 +703,7 @@ \dim_gset_eq:NN \g__draw_path_lasty_dim \l__draw_path_lasty_dim \group_end: } -%% File: l3draw-points.dtx Copyright(C) 2018 The LaTeX3 Project +%% File: l3draw-points.dtx \cs_new:Npn \__draw_point_process:nn #1#2 { \__draw_point_process_auxi:fn @@ -1088,7 +1088,7 @@ } { \__draw_point_to_dim:n { (#1, #2) } } } -%% File: l3draw-scopes.dtx Copyright(C) 2018 The LaTeX3 Project +%% File: l3draw-scopes.dtx \dim_new:N \g__draw_xmax_dim \dim_new:N \g__draw_xmin_dim \dim_new:N \g__draw_ymax_dim @@ -1199,7 +1199,7 @@ \draw_path_scope_end: \__draw_scope_bb_end: } -%% File: l3draw-softpath.dtx Copyright(C) 2018 The LaTeX3 Project +%% File: l3draw-softpath.dtx \tl_new:N \g__draw_softpath_main_tl \tl_new:N \l__draw_softpath_internal_tl \bool_new:N \g__draw_softpath_corners_bool @@ -1523,7 +1523,7 @@ \tl_build_gclear:N \g__draw_softpath_main_tl \__draw_softpath_add:o \l__draw_softpath_main_tl } -%% File: l3draw-state.dtx Copyright(C) 2018 The LaTeX3 Project +%% File: l3draw-state.dtx \dim_new:N \g__draw_linewidth_dim \dim_new:N \l_draw_default_linewidth_dim \dim_set:Nn \l_draw_default_linewidth_dim { 0.4pt } @@ -1581,7 +1581,7 @@ { \use:c { driver_draw_color_ #1 _rgb:nnn } {#2} {#3} {#4} } \cs_new_protected:Npn \__draw_color_spot:nw #1#2 ~ #3 \q_stop { \use:c { driver_draw_color_ #1 _spot:nn } {#2} {#3} } -%% File: l3draw-transforms.dtx Copyright(C) 2018 The LaTeX3 Project +%% File: l3draw-transforms.dtx \bool_new:N \l__draw_matrix_active_bool \fp_new:N \l__draw_matrix_a_fp \fp_new:N \l__draw_matrix_b_fp diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-convert.sty b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-convert.sty index bba4a7b3ffa..aee9f535e4d 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-convert.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-convert.sty @@ -6,7 +6,7 @@ %% %% l3str-convert.dtx (with options: `package') %% -%% Copyright (C) 2011-2017 The LaTeX3 Project +%% Copyright (C) 2011-2019 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 @@ -18,9 +18,9 @@ %% This file is part of the "l3experimental bundle" (The Work in LPPL) %% and all files in that bundle must be distributed together. %% -%% File: l3str-convert.dtx Copyright (C) 2013-2018 The LaTeX3 Project +%% File: l3str-convert.dtx Copyright (C) 2013-2019 The LaTeX3 Project \RequirePackage{expl3} -\ProvidesExplPackage{l3str-convert}{2018-11-19}{} +\ProvidesExplPackage{l3str-convert}{2019-01-28}{} {L3 Experimental string encoding conversions} \cs_if_exist:NF \use_ii_i:nn { \cs_new:Npn \use_ii_i:nn #1#2 { #2 #1 } } diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88591.def b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88591.def index 844fb028955..7d880561227 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88591.def +++ b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88591.def @@ -6,7 +6,7 @@ %% %% l3str-convert.dtx (with options: `iso88591') %% -%% Copyright (C) 2011-2017 The LaTeX3 Project +%% Copyright (C) 2011-2019 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 @@ -18,7 +18,7 @@ %% This file is part of the "l3experimental bundle" (The Work in LPPL) %% and all files in that bundle must be distributed together. %% -%% File: l3str-convert.dtx Copyright (C) 2013-2018 The LaTeX3 Project +%% File: l3str-convert.dtx Copyright (C) 2013-2019 The LaTeX3 Project \__str_declare_eight_bit_encoding:nnn { iso88591 } { } diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885910.def b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885910.def index 81b47155a32..7f838672207 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885910.def +++ b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885910.def @@ -6,7 +6,7 @@ %% %% l3str-convert.dtx (with options: `iso885910') %% -%% Copyright (C) 2011-2017 The LaTeX3 Project +%% Copyright (C) 2011-2019 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 @@ -18,7 +18,7 @@ %% This file is part of the "l3experimental bundle" (The Work in LPPL) %% and all files in that bundle must be distributed together. %% -%% File: l3str-convert.dtx Copyright (C) 2013-2018 The LaTeX3 Project +%% File: l3str-convert.dtx Copyright (C) 2013-2019 The LaTeX3 Project \__str_declare_eight_bit_encoding:nnn { iso885910 } { { A1 } { 0104 } diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885911.def b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885911.def index 68b46305ae7..6b271131cc1 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885911.def +++ b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885911.def @@ -6,7 +6,7 @@ %% %% l3str-convert.dtx (with options: `iso885911') %% -%% Copyright (C) 2011-2017 The LaTeX3 Project +%% Copyright (C) 2011-2019 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 @@ -18,7 +18,7 @@ %% This file is part of the "l3experimental bundle" (The Work in LPPL) %% and all files in that bundle must be distributed together. %% -%% File: l3str-convert.dtx Copyright (C) 2013-2018 The LaTeX3 Project +%% File: l3str-convert.dtx Copyright (C) 2013-2019 The LaTeX3 Project \__str_declare_eight_bit_encoding:nnn { iso885911 } { { A1 } { 0E01 } diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885913.def b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885913.def index 9dc2da1d44a..4f95aec07a7 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885913.def +++ b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885913.def @@ -6,7 +6,7 @@ %% %% l3str-convert.dtx (with options: `iso885913') %% -%% Copyright (C) 2011-2017 The LaTeX3 Project +%% Copyright (C) 2011-2019 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 @@ -18,7 +18,7 @@ %% This file is part of the "l3experimental bundle" (The Work in LPPL) %% and all files in that bundle must be distributed together. %% -%% File: l3str-convert.dtx Copyright (C) 2013-2018 The LaTeX3 Project +%% File: l3str-convert.dtx Copyright (C) 2013-2019 The LaTeX3 Project \__str_declare_eight_bit_encoding:nnn { iso885913 } { { A1 } { 201D } diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885914.def b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885914.def index 5f4000f9d43..7925d571336 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885914.def +++ b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885914.def @@ -6,7 +6,7 @@ %% %% l3str-convert.dtx (with options: `iso885914') %% -%% Copyright (C) 2011-2017 The LaTeX3 Project +%% Copyright (C) 2011-2019 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 @@ -18,7 +18,7 @@ %% This file is part of the "l3experimental bundle" (The Work in LPPL) %% and all files in that bundle must be distributed together. %% -%% File: l3str-convert.dtx Copyright (C) 2013-2018 The LaTeX3 Project +%% File: l3str-convert.dtx Copyright (C) 2013-2019 The LaTeX3 Project \__str_declare_eight_bit_encoding:nnn { iso885914 } { { A1 } { 1E02 } diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885915.def b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885915.def index d903dd492d8..da46de43466 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885915.def +++ b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885915.def @@ -6,7 +6,7 @@ %% %% l3str-convert.dtx (with options: `iso885915') %% -%% Copyright (C) 2011-2017 The LaTeX3 Project +%% Copyright (C) 2011-2019 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 @@ -18,7 +18,7 @@ %% This file is part of the "l3experimental bundle" (The Work in LPPL) %% and all files in that bundle must be distributed together. %% -%% File: l3str-convert.dtx Copyright (C) 2013-2018 The LaTeX3 Project +%% File: l3str-convert.dtx Copyright (C) 2013-2019 The LaTeX3 Project \__str_declare_eight_bit_encoding:nnn { iso885915 } { { A4 } { 20AC } diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885916.def b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885916.def index 094b24b1aac..b0083c8050c 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885916.def +++ b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885916.def @@ -6,7 +6,7 @@ %% %% l3str-convert.dtx (with options: `iso885916') %% -%% Copyright (C) 2011-2017 The LaTeX3 Project +%% Copyright (C) 2011-2019 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 @@ -18,7 +18,7 @@ %% This file is part of the "l3experimental bundle" (The Work in LPPL) %% and all files in that bundle must be distributed together. %% -%% File: l3str-convert.dtx Copyright (C) 2013-2018 The LaTeX3 Project +%% File: l3str-convert.dtx Copyright (C) 2013-2019 The LaTeX3 Project \__str_declare_eight_bit_encoding:nnn { iso885916 } { { A1 } { 0104 } diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88592.def b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88592.def index a5f331647aa..42519770cce 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88592.def +++ b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88592.def @@ -6,7 +6,7 @@ %% %% l3str-convert.dtx (with options: `iso88592') %% -%% Copyright (C) 2011-2017 The LaTeX3 Project +%% Copyright (C) 2011-2019 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 @@ -18,7 +18,7 @@ %% This file is part of the "l3experimental bundle" (The Work in LPPL) %% and all files in that bundle must be distributed together. %% -%% File: l3str-convert.dtx Copyright (C) 2013-2018 The LaTeX3 Project +%% File: l3str-convert.dtx Copyright (C) 2013-2019 The LaTeX3 Project \__str_declare_eight_bit_encoding:nnn { iso88592 } { { A1 } { 0104 } diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88593.def b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88593.def index 2fa465e0b21..7d5d80d61cc 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88593.def +++ b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88593.def @@ -6,7 +6,7 @@ %% %% l3str-convert.dtx (with options: `iso88593') %% -%% Copyright (C) 2011-2017 The LaTeX3 Project +%% Copyright (C) 2011-2019 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 @@ -18,7 +18,7 @@ %% This file is part of the "l3experimental bundle" (The Work in LPPL) %% and all files in that bundle must be distributed together. %% -%% File: l3str-convert.dtx Copyright (C) 2013-2018 The LaTeX3 Project +%% File: l3str-convert.dtx Copyright (C) 2013-2019 The LaTeX3 Project \__str_declare_eight_bit_encoding:nnn { iso88593 } { { A1 } { 0126 } diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88594.def b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88594.def index 9b75283b92a..10491b14483 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88594.def +++ b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88594.def @@ -6,7 +6,7 @@ %% %% l3str-convert.dtx (with options: `iso88594') %% -%% Copyright (C) 2011-2017 The LaTeX3 Project +%% Copyright (C) 2011-2019 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 @@ -18,7 +18,7 @@ %% This file is part of the "l3experimental bundle" (The Work in LPPL) %% and all files in that bundle must be distributed together. %% -%% File: l3str-convert.dtx Copyright (C) 2013-2018 The LaTeX3 Project +%% File: l3str-convert.dtx Copyright (C) 2013-2019 The LaTeX3 Project \__str_declare_eight_bit_encoding:nnn { iso88594 } { { A1 } { 0104 } diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88595.def b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88595.def index 6576297ed22..1166a482191 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88595.def +++ b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88595.def @@ -6,7 +6,7 @@ %% %% l3str-convert.dtx (with options: `iso88595') %% -%% Copyright (C) 2011-2017 The LaTeX3 Project +%% Copyright (C) 2011-2019 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 @@ -18,7 +18,7 @@ %% This file is part of the "l3experimental bundle" (The Work in LPPL) %% and all files in that bundle must be distributed together. %% -%% File: l3str-convert.dtx Copyright (C) 2013-2018 The LaTeX3 Project +%% File: l3str-convert.dtx Copyright (C) 2013-2019 The LaTeX3 Project \__str_declare_eight_bit_encoding:nnn { iso88595 } { { A1 } { 0401 } diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88596.def b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88596.def index fcfd76af39e..92438f3aea6 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88596.def +++ b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88596.def @@ -6,7 +6,7 @@ %% %% l3str-convert.dtx (with options: `iso88596') %% -%% Copyright (C) 2011-2017 The LaTeX3 Project +%% Copyright (C) 2011-2019 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 @@ -18,7 +18,7 @@ %% This file is part of the "l3experimental bundle" (The Work in LPPL) %% and all files in that bundle must be distributed together. %% -%% File: l3str-convert.dtx Copyright (C) 2013-2018 The LaTeX3 Project +%% File: l3str-convert.dtx Copyright (C) 2013-2019 The LaTeX3 Project \__str_declare_eight_bit_encoding:nnn { iso88596 } { { AC } { 060C } diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88597.def b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88597.def index b555c1cba02..2c0c5e7760e 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88597.def +++ b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88597.def @@ -6,7 +6,7 @@ %% %% l3str-convert.dtx (with options: `iso88597') %% -%% Copyright (C) 2011-2017 The LaTeX3 Project +%% Copyright (C) 2011-2019 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 @@ -18,7 +18,7 @@ %% This file is part of the "l3experimental bundle" (The Work in LPPL) %% and all files in that bundle must be distributed together. %% -%% File: l3str-convert.dtx Copyright (C) 2013-2018 The LaTeX3 Project +%% File: l3str-convert.dtx Copyright (C) 2013-2019 The LaTeX3 Project \__str_declare_eight_bit_encoding:nnn { iso88597 } { { A1 } { 2018 } diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88598.def b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88598.def index f6f79b7e4a3..50615dfc038 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88598.def +++ b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88598.def @@ -6,7 +6,7 @@ %% %% l3str-convert.dtx (with options: `iso88598') %% -%% Copyright (C) 2011-2017 The LaTeX3 Project +%% Copyright (C) 2011-2019 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 @@ -18,7 +18,7 @@ %% This file is part of the "l3experimental bundle" (The Work in LPPL) %% and all files in that bundle must be distributed together. %% -%% File: l3str-convert.dtx Copyright (C) 2013-2018 The LaTeX3 Project +%% File: l3str-convert.dtx Copyright (C) 2013-2019 The LaTeX3 Project \__str_declare_eight_bit_encoding:nnn { iso88598 } { { AA } { 00D7 } diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88599.def b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88599.def index 85cb0026d4b..3d421b2a6c9 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88599.def +++ b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88599.def @@ -6,7 +6,7 @@ %% %% l3str-convert.dtx (with options: `iso88599') %% -%% Copyright (C) 2011-2017 The LaTeX3 Project +%% Copyright (C) 2011-2019 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 @@ -18,7 +18,7 @@ %% This file is part of the "l3experimental bundle" (The Work in LPPL) %% and all files in that bundle must be distributed together. %% -%% File: l3str-convert.dtx Copyright (C) 2013-2018 The LaTeX3 Project +%% File: l3str-convert.dtx Copyright (C) 2013-2019 The LaTeX3 Project \__str_declare_eight_bit_encoding:nnn { iso88599 } { { D0 } { 011E } diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-utf16.def b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-utf16.def index a6d0b4297cd..2ae9485ab91 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-utf16.def +++ b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-utf16.def @@ -6,7 +6,7 @@ %% %% l3str-convert.dtx (with options: `utf16') %% -%% Copyright (C) 2011-2017 The LaTeX3 Project +%% Copyright (C) 2011-2019 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 @@ -18,7 +18,7 @@ %% This file is part of the "l3experimental bundle" (The Work in LPPL) %% and all files in that bundle must be distributed together. %% -%% File: l3str-convert.dtx Copyright (C) 2013-2018 The LaTeX3 Project +%% File: l3str-convert.dtx Copyright (C) 2013-2019 The LaTeX3 Project \group_begin: \char_set_catcode_other:N \^^fe \char_set_catcode_other:N \^^ff diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-utf32.def b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-utf32.def index ee3840d6686..76ded8b28d6 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-utf32.def +++ b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-utf32.def @@ -6,7 +6,7 @@ %% %% l3str-convert.dtx (with options: `utf32') %% -%% Copyright (C) 2011-2017 The LaTeX3 Project +%% Copyright (C) 2011-2019 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 @@ -18,7 +18,7 @@ %% This file is part of the "l3experimental bundle" (The Work in LPPL) %% and all files in that bundle must be distributed together. %% -%% File: l3str-convert.dtx Copyright (C) 2013-2018 The LaTeX3 Project +%% File: l3str-convert.dtx Copyright (C) 2013-2019 The LaTeX3 Project \group_begin: \char_set_catcode_other:N \^^00 \char_set_catcode_other:N \^^fe diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-utf8.def b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-utf8.def index ac07909cf81..10b3902661a 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-utf8.def +++ b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-utf8.def @@ -6,7 +6,7 @@ %% %% l3str-convert.dtx (with options: `utf8') %% -%% Copyright (C) 2011-2017 The LaTeX3 Project +%% Copyright (C) 2011-2019 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 @@ -18,7 +18,7 @@ %% This file is part of the "l3experimental bundle" (The Work in LPPL) %% and all files in that bundle must be distributed together. %% -%% File: l3str-convert.dtx Copyright (C) 2013-2018 The LaTeX3 Project +%% File: l3str-convert.dtx Copyright (C) 2013-2019 The LaTeX3 Project \cs_new_protected:cpn { __str_convert_encode_utf8: } { \__str_convert_gmap_internal:N \__str_encode_utf_viii_char:n } \cs_new:Npn \__str_encode_utf_viii_char:n #1 diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-esc-hex.def b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-esc-hex.def index 5d8c5972cd5..e4cb1e9a2c6 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-esc-hex.def +++ b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-esc-hex.def @@ -6,7 +6,7 @@ %% %% l3str-convert.dtx (with options: `hex') %% -%% Copyright (C) 2011-2017 The LaTeX3 Project +%% Copyright (C) 2011-2019 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 @@ -18,7 +18,7 @@ %% This file is part of the "l3experimental bundle" (The Work in LPPL) %% and all files in that bundle must be distributed together. %% -%% File: l3str-convert.dtx Copyright (C) 2013-2018 The LaTeX3 Project +%% File: l3str-convert.dtx Copyright (C) 2013-2019 The LaTeX3 Project \cs_new_protected:Npn \__str_convert_unescape_hex: { \group_begin: diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-esc-name.def b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-esc-name.def index 625bcdc4feb..926b3ef9e75 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-esc-name.def +++ b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-esc-name.def @@ -6,7 +6,7 @@ %% %% l3str-convert.dtx (with options: `name') %% -%% Copyright (C) 2011-2017 The LaTeX3 Project +%% Copyright (C) 2011-2019 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 @@ -18,7 +18,7 @@ %% This file is part of the "l3experimental bundle" (The Work in LPPL) %% and all files in that bundle must be distributed together. %% -%% File: l3str-convert.dtx Copyright (C) 2013-2018 The LaTeX3 Project +%% File: l3str-convert.dtx Copyright (C) 2013-2019 The LaTeX3 Project \cs_set_protected:Npn \__str_tmp:w #1#2#3 { \cs_new_protected:cpn { __str_convert_unescape_#2: } diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-esc-string.def b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-esc-string.def index d5397540d78..68c16ea5db7 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-esc-string.def +++ b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-esc-string.def @@ -6,7 +6,7 @@ %% %% l3str-convert.dtx (with options: `string') %% -%% Copyright (C) 2011-2017 The LaTeX3 Project +%% Copyright (C) 2011-2019 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 @@ -18,7 +18,7 @@ %% This file is part of the "l3experimental bundle" (The Work in LPPL) %% and all files in that bundle must be distributed together. %% -%% File: l3str-convert.dtx Copyright (C) 2013-2018 The LaTeX3 Project +%% File: l3str-convert.dtx Copyright (C) 2013-2019 The LaTeX3 Project \group_begin: \char_set_catcode_other:N \^^J \char_set_catcode_other:N \^^M diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-esc-url.def b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-esc-url.def index 94db0c22f09..ebc2dc2548a 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-esc-url.def +++ b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-esc-url.def @@ -6,7 +6,7 @@ %% %% l3str-convert.dtx (with options: `url') %% -%% Copyright (C) 2011-2017 The LaTeX3 Project +%% Copyright (C) 2011-2019 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 @@ -18,7 +18,7 @@ %% This file is part of the "l3experimental bundle" (The Work in LPPL) %% and all files in that bundle must be distributed together. %% -%% File: l3str-convert.dtx Copyright (C) 2013-2018 The LaTeX3 Project +%% File: l3str-convert.dtx Copyright (C) 2013-2019 The LaTeX3 Project \cs_set_protected:Npn \__str_tmp:w #1#2#3 { \cs_new_protected:cpn { __str_convert_unescape_#2: } diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-format.sty b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-format.sty index 83aff2b089a..be29201b572 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-format.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-format.sty @@ -6,7 +6,7 @@ %% %% l3str-format.dtx (with options: `package') %% -%% Copyright (C) 2011-2017 The LaTeX3 Project +%% Copyright (C) 2011-2019 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 @@ -18,9 +18,9 @@ %% This file is part of the "l3experimental bundle" (The Work in LPPL) %% and all files in that bundle must be distributed together. %% -%% File: l3str-format.dtx Copyright (C) 2012-2018 The LaTeX3 Project +%% File: l3str-format.dtx \RequirePackage{expl3} -\ProvidesExplPackage{l3str-format}{2018-11-19}{} +\ProvidesExplPackage{l3str-format}{2019-01-28}{} {L3 Experimental string formatting} \cs_generate_variant:Nn \use:nn { nf } \cs_generate_variant:Nn \use:nnn { fnf } diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3sys-shell/l3sys-shell.sty b/Master/texmf-dist/tex/latex/l3experimental/l3sys-shell/l3sys-shell.sty index 87b1b13a41c..6839781c44f 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3sys-shell/l3sys-shell.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/l3sys-shell/l3sys-shell.sty @@ -6,7 +6,7 @@ %% %% l3sys-shell.dtx (with options: `package') %% -%% Copyright (C) 2018 The LaTeX3 Project +%% Copyright (C) 2018,2019 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 @@ -18,9 +18,9 @@ %% This file is part of the "l3experimental bundle" (The Work in LPPL) %% and all files in that bundle must be distributed together. %% -%% File: l3sys-shell.dtx Copyright(C) 2018 The LaTeX3 Project +%% File: l3sys-shell.dtx \RequirePackage{expl3} -\ProvidesExplPackage{l3sys-shell}{2018-11-19}{} +\ProvidesExplPackage{l3sys-shell}{2019-01-28}{} {L3 Experimental system shell functions} \cs_new:Npn \__sys_path_to_win:n #1 { @@ -134,7 +134,11 @@ { \sys_if_shell_unrestricted:T { - \exp_not:N \tl_set_from_shell:Nnn \exp_not:N \l__sys_tmp_tl + \exp_not:N \sys_shell_get:nnN + { + \sys_if_platform_unix:T { pwd } + \sys_if_platform_windows:T { cd } + } { \char_set_catcode_other:N \exp_not:N \\ \char_set_catcode_other:N \exp_not:N \# @@ -142,10 +146,7 @@ \char_set_catcode_other:N \exp_not:N \% \char_set_catcode_space:N \exp_not:N \ % } - { - \sys_if_platform_unix:T { pwd } - \sys_if_platform_windows:T { cd } - } + \exp_not:N \l__sys_tmp_tl \str_set:NV #1 \exp_not:N \l__sys_tmp_tl } } @@ -153,7 +154,11 @@ { \sys_if_shell_unrestricted:T { - \exp_not:N \tl_set_from_shell:Nnn \exp_not:N \l__sys_tmp_tl + \exp_not:N \sys_shell_get:nnN + { + \sys_if_platform_unix:T { ls~-1~ #1 } + \sys_if_platform_windows:T { dir~/b~ #1 } + } { \ExplSyntaxOff \char_set_catcode_other:N \exp_not:N \\ @@ -162,10 +167,7 @@ \char_set_catcode_other:N \exp_not:N \% \char_set_catcode_other:n { 13 } } - { - \sys_if_platform_unix:T { ls~-1~ #1 } - \sys_if_platform_windows:T { dir~/b~ #1 } - } + \exp_not:N \l__sys_tmp_tl \str_set:NV \exp_not:N \l__sys_tmp_tl \exp_not:N \l__sys_tmp_tl \seq_set_split:NnV #2 { \char_generate:nn { `\^^M } { 12 } } \exp_not:N \l__sys_tmp_tl diff --git a/Master/texmf-dist/tex/latex/l3experimental/xcoffins/xcoffins.sty b/Master/texmf-dist/tex/latex/l3experimental/xcoffins/xcoffins.sty index dc2c8b88d66..c496c5c7f82 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/xcoffins/xcoffins.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/xcoffins/xcoffins.sty @@ -6,7 +6,7 @@ %% %% xcoffins.dtx (with options: `package') %% -%% Copyright (C) 2010-2017 The LaTeX3 Project +%% Copyright (C) 2010-2019 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 @@ -18,9 +18,9 @@ %% This file is part of the "l3experimental bundle" (The Work in LPPL) %% and all files in that bundle must be distributed together. %% -%% File: xcoffins.dtx Copyright(C) 2010-2012,2014,2016-2018 The LaTeX3 Project +%% File: xcoffins.dtx \RequirePackage{xparse} -\ProvidesExplPackage{xcoffins}{2018-11-19}{} +\ProvidesExplPackage{xcoffins}{2019-01-28}{} {L3 Experimental design level coffins} \keys_define:nn { coffin } { diff --git a/Master/texmf-dist/tex/latex/l3experimental/xgalley/l3galley.sty b/Master/texmf-dist/tex/latex/l3experimental/xgalley/l3galley.sty index cc75515bc8f..1e696d7690f 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/xgalley/l3galley.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/xgalley/l3galley.sty @@ -6,7 +6,7 @@ %% %% l3galley.dtx (with options: `package') %% -%% Copyright (C) 2010-2017 The LaTeX3 Project +%% Copyright (C) 2010-2019 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 @@ -18,8 +18,7 @@ %% This file is part of the "l3experimental bundle" (The Work in LPPL) %% and all files in that bundle must be distributed together. %% -%% File: l3galley.dtx Copyright (C) 1999-2001, 2004-2009 Frank Mittelbach -%% (C) 2010-2018 The LaTeX3 Project +%% File: l3galley.dtx \RequirePackage{expl3}[2018/02/21] \@ifpackagelater{expl3}{2018/02/21} {} @@ -33,7 +32,7 @@ }% \endinput } -\ProvidesExplPackage{l3galley}{2018-11-19}{} +\ProvidesExplPackage{l3galley}{2019-01-28}{} {L3 Experimental galley code} \int_new:N \l__galley_tmp_int \seq_new:N \g__galley_tmpa_seq diff --git a/Master/texmf-dist/tex/latex/l3experimental/xgalley/xgalley.sty b/Master/texmf-dist/tex/latex/l3experimental/xgalley/xgalley.sty index 7fb3391310f..67eebe67f18 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/xgalley/xgalley.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/xgalley/xgalley.sty @@ -6,7 +6,7 @@ %% %% xgalley.dtx (with options: `package') %% -%% Copyright (C) 2010-2017 The LaTeX3 Project +%% Copyright (C) 2010-2019 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 @@ -18,10 +18,9 @@ %% This file is part of the "l3experimental bundle" (The Work in LPPL) %% and all files in that bundle must be distributed together. %% -%% File: xgalley.dtx Copyright (C) 1999-2001, 2004-2009 Frank Mittelbach -%% (C) 2010-2012,2014,2016-2018 The LaTeX3 Project +%% File: xgalley.dtx \RequirePackage{xparse} -\ProvidesExplPackage{xgalley}{2018-11-19}{} +\ProvidesExplPackage{xgalley}{2019-01-28}{} {L3 Experimental galley} \RequirePackage{xparse,xtemplate,l3galley} \clist_new:N \l__galley_tmpa_clist diff --git a/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex b/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex index 2345b6effe0..736147cc2ef 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex +++ b/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex @@ -50,7 +50,7 @@ %% l3candidates.dtx (with options: `package') %% l3deprecation.dtx (with options: `package') %% -%% Copyright (C) 1990-2018 The LaTeX3 Project +%% Copyright (C) 1990-2019 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 @@ -62,8 +62,8 @@ %% This file is part of the "l3kernel bundle" (The Work in LPPL) %% and all files in that bundle must be distributed together. %% -%% File: expl3.dtx Copyright (C) 1990-2019 The LaTeX3 Project -\def\ExplFileDate{2019-01-13}% +%% File: expl3.dtx +\def\ExplFileDate{2019-01-28}% \begingroup \def\next{\endgroup}% \expandafter\ifx\csname PackageError\endcsname\relax @@ -120,7 +120,7 @@ \ExplFileDate\space L3 programming layer (code)% }% -%% File: l3bootstrap.dtx Copyright (C) 2011-2019 The LaTeX3 project +%% File: l3bootstrap.dtx \begingroup \csname protected\endcsname\gdef\GetIdInfo {% @@ -360,7 +360,7 @@ \tex_endlinechar:D = 32 \scan_stop: \bool_set_true:N \l__kernel_expl_bool } -%% File: l3names.dtx Copyright (C) 1990-2019 The LaTeX3 project +%% File: l3names.dtx \let \tex_global:D \global \let \tex_let:D \let \begingroup @@ -2108,7 +2108,7 @@ } \__kernel_primitives: \tex_endgroup:D -%% File: l3basics.dtx Copyright (C) 1990-2019 The LaTeX3 project +%% File: l3basics.dtx \tex_let:D \if_true: \tex_iftrue:D \tex_let:D \if_false: \tex_iffalse:D \tex_let:D \or: \tex_or:D @@ -3195,7 +3195,7 @@ \cs_new_eq:NN \prg_break_point: \prg_do_nothing: \cs_new:Npn \prg_break: #1 \prg_break_point: { } \cs_new:Npn \prg_break:n #1#2 \prg_break_point: {#1} -%% File: l3expan.dtx Copyright (C) 1990-2019 The LaTeX3 project +%% File: l3expan.dtx \cs_new:Npn \__exp_arg_next:nnn #1#2#3 { #2 \::: { #3 {#1} } } \cs_new:Npn \__exp_arg_next:Nnn #1#2#3 { #2 \::: { #3 #1 } } \cs_new:Npn \::: #1 {#1} @@ -4094,7 +4094,7 @@ } } \cs_new:Npn \__cs_args_generate:n #1 { \exp_not:c { :: #1 } } -%% File: l3tl.dtx Copyright (C) 1990-2019 The LaTeX3 Project +%% File: l3tl.dtx \cs_new_protected:Npn \tl_new:N #1 { \__kernel_chk_if_free_cs:N #1 @@ -4269,109 +4269,92 @@ \cs_generate_variant:Nn \tl_gput_right:Nx { c } \tl_const:Nx \c__tl_rescan_marker_tl { : \token_to_str:N : } \cs_new_protected:Npn \tl_set_rescan:Nnn - { \__tl_set_rescan:NNnn \tl_set:Nn } + { \__tl_set_rescan:NNnn \tl_set:No } \cs_new_protected:Npn \tl_gset_rescan:Nnn - { \__tl_set_rescan:NNnn \tl_gset:Nn } -\cs_new_protected:Npn \tl_rescan:nn - { \__tl_set_rescan:NNnn \prg_do_nothing: \use:n } + { \__tl_set_rescan:NNnn \tl_gset:No } +\cs_new_protected:Npn \tl_rescan:nn #1#2 + { + \tl_set_rescan:Nnn \l__tl_internal_a_tl {#1} {#2} + \exp_after:wN \tl_clear:N \exp_after:wN \l__tl_internal_a_tl + \l__tl_internal_a_tl + } \cs_new_protected:Npn \__tl_set_rescan:NNnn #1#2#3#4 { - \tl_if_empty:nTF {#4} - { - \group_begin: - #3 - \group_end: - #1 #2 { } - } - { - \group_begin: - \exp_args:No \tex_everyeof:D - { \c__tl_rescan_marker_tl \exp_not:N } - \int_compare:nNnT \tex_endlinechar:D = { 32 } - { \int_set:Nn \tex_endlinechar:D { -1 } } - \tex_newlinechar:D \tex_endlinechar:D - #3 \scan_stop: - \exp_args:No \__tl_set_rescan:n { \tl_to_str:n {#4} } - \exp_args:NNNo - \group_end: - #1 #2 \l__tl_internal_a_tl - } + \if_false: { \fi: + \group_begin: + \int_set_eq:NN \tex_tracingnesting:D \c_zero_int + \exp_args:No \tex_everyeof:D { \c__tl_rescan_marker_tl } + \int_compare:nNnT \tex_endlinechar:D = { 32 } + { \int_set:Nn \tex_endlinechar:D { -1 } } + \int_set_eq:NN \tex_newlinechar:D \tex_endlinechar:D + #3 \scan_stop: + \exp_args:No \__tl_set_rescan:nNN { \tl_to_str:n {#4} } #1 #2 + \if_false: } \fi: } -\cs_new_protected:Npn \__tl_set_rescan_multi:n #1 +\cs_new_protected:Npn \__tl_set_rescan_multi:nNN #1#2#3 { - \tl_set:Nx \l__tl_internal_a_tl - { - \exp_after:wN \__tl_rescan:w - \exp_after:wN \prg_do_nothing: - \tex_scantokens:D {#1} - } + \exp_after:wN \__tl_rescan:NNw + \exp_after:wN #2 + \exp_after:wN #3 + \exp_after:wN \prg_do_nothing: + \tex_scantokens:D {#1} } \exp_args:Nno \use:nn - { \cs_new:Npn \__tl_rescan:w #1 } \c__tl_rescan_marker_tl - { \exp_not:o {#1} } + { \cs_new:Npn \__tl_rescan:NNw #1#2#3 } \c__tl_rescan_marker_tl + { + \group_end: + #1 #2 {#3} + } \cs_generate_variant:Nn \tl_set_rescan:Nnn { Nno , Nnx } \cs_generate_variant:Nn \tl_set_rescan:Nnn { c , cno , cnx } \cs_generate_variant:Nn \tl_gset_rescan:Nnn { Nno , Nnx } \cs_generate_variant:Nn \tl_gset_rescan:Nnn { c , cno } -\group_begin: - \tex_catcode:D `\^^@ = 12 \scan_stop: - \cs_new_protected:Npn \__tl_set_rescan:n #1 - { - \int_compare:nNnTF \tex_newlinechar:D < 0 - { \use_ii:nn } - { - \char_set_lccode:nn { 0 } { \tex_newlinechar:D } - \tex_lowercase:D { \__tl_set_rescan:NnTF ^^@ } {#1} - } - { \__tl_set_rescan_multi:n } - { \__tl_set_rescan_single:nn { ' } } - {#1} - } - \cs_new_protected:Npn \__tl_set_rescan:NnTF #1#2 - { \tl_if_in:nnTF {#2} {#1} } - \cs_new_protected:Npn \__tl_set_rescan_single:nn #1 - { - \int_compare:nNnTF - { \char_value_catcode:n { `#1 } / 3 } = 4 - { \__tl_set_rescan_single_aux:nn {#1} } - { - \int_compare:nNnTF { `#1 } < { `\~ } - { - \char_set_lccode:nn { 0 } { `#1 + 1 } - \tex_lowercase:D { \__tl_set_rescan_single:nn { ^^@ } } - } - { \__tl_set_rescan_single_aux:nn { } } - } - } - \cs_new_protected:Npn \__tl_set_rescan_single_aux:nn #1#2 - { - \int_set:Nn \tex_endlinechar:D { -1 } - \use:x - { - \exp_not:N \use:n - { - \exp_not:n { \cs_set:Npn \__tl_rescan:w ##1 } - \exp_after:wN \__tl_rescan:w - \exp_after:wN \prg_do_nothing: - \tex_scantokens:D {#1} - } - \c__tl_rescan_marker_tl - } - { \exp_not:o {##1} } - \tl_set:Nx \l__tl_internal_a_tl +\cs_new_protected:Npn \__tl_set_rescan:nNN #1 + { + \int_compare:nNnTF \tex_newlinechar:D < 0 + { \use_ii:nn } + { + \exp_args:Nnf \tl_if_in:nnTF {#1} + { \char_generate:nn { \tex_newlinechar:D } { 12 } } + } + { \__tl_set_rescan_multi:nNN } { - \int_compare:nNnT - { - \char_value_catcode:n - { \exp_last_unbraced:Nf ` { \str_head:n {#2} } ~ } - } - = { 10 } { ~ } - \exp_after:wN \__tl_rescan:w - \exp_after:wN \prg_do_nothing: - \tex_scantokens:D { #2 #1 } + \int_set:Nn \tex_endlinechar:D { -1 } + \__tl_set_rescan_single:nnNN { `' } } - } -\group_end: + {#1} + } +\cs_new_protected:Npn \__tl_set_rescan_single:nnNN #1 + { + \int_compare:nNnTF + { \char_value_catcode:n {#1} / 2 } = 6 + { + \exp_args:Nf \__tl_set_rescan_single_aux:nnNN + { \char_generate:nn {#1} { \char_value_catcode:n {#1} } } + } + { + \int_compare:nNnTF {#1} < { `\~ } + { + \exp_args:Nf \__tl_set_rescan_single:nnNN + { \int_eval:n { #1 + 1 } } + } + { \__tl_set_rescan_multi:nNN } + } + } +\cs_new_protected:Npn \__tl_set_rescan_single_aux:nnNN #1#2#3#4 + { + \exp_args:Nno \use:nn + { \cs_set:Npn \__tl_rescan:NNw ##1##2##3 #1 } + \c__tl_rescan_marker_tl + { + \group_end: + ##1 ##2 { \use_none:n ##3 } + } + \exp_after:wN \__tl_rescan:NNw + \exp_after:wN #3 + \exp_after:wN #4 + \tex_scantokens:D { #1 #2 #1 } + } \cs_new_protected:Npn \tl_replace_once:Nnn { \__tl_replace:NnNNNnn \q_mark ? \__tl_replace_wrap:w \tl_set:Nx } \cs_new_protected:Npn \tl_greplace_once:Nnn @@ -5114,7 +5097,7 @@ \tl_new:N \g_tmpb_tl \tl_new:N \l_tmpa_tl \tl_new:N \l_tmpb_tl -%% File: l3str.dtx Copyright (C) 2011-2019 The LaTeX3 Project +%% File: l3str.dtx \group_begin: \cs_set_protected:Npn \__str_tmp:n #1 { @@ -5761,7 +5744,7 @@ \cs_new:Npn \str_if_eq_x:nnF { \str_if_eq:eeF } \__kernel_patch_deprecation:nnNNpn { 2019-12-31 } { \str_if_eq:eeTF } \cs_new:Npn \str_if_eq_x:nnTF { \str_if_eq:eeTF } -%% File: l3quark.dtx Copyright (C) 1990-2019 The LaTeX3 Project +%% File: l3quark.dtx \__kernel_patch:nnNNpn { \__kernel_chk_var_scope:NN q #1 } { } \cs_new_protected:Npn \quark_new:N #1 { @@ -5879,7 +5862,7 @@ } \scan_new:N \s_stop \cs_new:Npn \use_none_delimit_by_s_stop:w #1 \s_stop { } -%% File: l3seq.dtx Copyright (C) 1990-2019 The LaTeX3 Project +%% File: l3seq.dtx \scan_new:N \s__seq \cs_new:Npn \__seq_item:n { @@ -6429,7 +6412,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-2019 The LaTeX3 Project +%% File: l3int.dtx \cs_new_eq:NN \int_value:w \tex_number:D \cs_new_eq:NN \__int_eval:w \tex_numexpr:D \cs_new_eq:NN \__int_eval_end: \tex_relax:D @@ -7343,7 +7326,7 @@ { \exp_stop_f: } } \cs_new_eq:NN \__int_value:w \int_value:w -%% File: l3flag.dtx Copyright (C) 2011-2019 The LaTeX3 Project +%% File: l3flag.dtx \cs_new_protected:Npn \flag_new:n #1 { \cs_new:cpn { flag~#1 } ##1 ; @@ -7418,7 +7401,7 @@ \cs:w flag~#1 \exp_after:wN \cs_end: \int_value:w \flag_height:n {#1} ; } -%% File: l3prg.dtx Copyright (C) 2005-2019 The LaTeX3 Project +%% File: l3prg.dtx \cs_new_eq:NN \if_bool:N \tex_ifodd:D \cs_new_eq:NN \if_predicate:w \tex_ifodd:D \cs_new_protected:Npn \bool_new:N #1 { \cs_new_eq:NN #1 \c_false_bool } @@ -7719,7 +7702,7 @@ \cs_new:Npn \__prg_break: #1 \__prg_break_point: { } \__kernel_patch_deprecation:nnNNpn { 2019-12-31 } { \prg_break:n } \cs_new:Npn \__prg_break:n #1#2 \__prg_break_point: {#1} -%% File: l3sys.dtx Copyright (C) 2015-2019 The LaTeX3 Project +%% File: l3sys.dtx \str_const:Nx \c_sys_jobname_str { \tex_jobname:D } \int_const:Nn \c_sys_minute_int { \int_mod:nn { \tex_time:D } { 60 } } @@ -7776,9 +7759,7 @@ { \str_if_eq_p:Vn \c_sys_output_str { pdf } } \__sys_const:nn { sys_if_rand_exist } { \cs_if_exist_p:N \tex_uniformdeviate:D } -%% File: l3clist.dtx Copyright (C) 2004-2011,2019 Frank Mittelbach, -%% The LaTeX3 project -%% (C) 2012-2019 The LaTeX3 Project +%% File: l3clist.dtx \cs_new_eq:NN \c_empty_clist \c_empty_tl \tl_new:N \l__clist_internal_clist \cs_new_protected:Npn \__clist_tmp:w { } @@ -8366,7 +8347,7 @@ \clist_new:N \l_tmpb_clist \clist_new:N \g_tmpa_clist \clist_new:N \g_tmpb_clist -%% File: l3token.dtx Copyright (C) 2005-2019 The LaTeX3 Project +%% File: l3token.dtx \cs_new_protected:Npn \char_set_catcode:nn #1#2 { \tex_catcode:D \int_eval:n {#1} = \int_eval:n {#2} \exp_stop_f: } \cs_new:Npn \char_value_catcode:n #1 @@ -8572,12 +8553,7 @@ \char_set_catcode_math_toggle:n { 0 } \tl_put_right:Nn \l__char_tmp_tl { \or: ^^@ } \char_set_catcode_alignment:n { 0 } - \tl_put_right:Nn \l__char_tmp_tl - { - \or: - \__kernel_exp_not:w \exp_after:wN - { \exp_after:wN ^^@ \exp_after:wN } - } + \tl_put_right:Nn \l__char_tmp_tl { \or: ^^@ } \tl_put_right:Nn \l__char_tmp_tl { \or: } \char_set_catcode_parameter:n { 0 } \tl_put_right:Nn \l__char_tmp_tl { \or: ^^@ } @@ -8614,12 +8590,14 @@ \cs_new:Npn \__char_generate_aux:nnw #1#2#3 \exp_end: { #3 + \if_false: { \fi: \exp_after:wN \exp_after:wN \exp_after:wN \exp_end: \exp_after:wN \exp_after:wN \if_case:w #2 \exp_last_unbraced:Nv \exp_stop_f: { c__char_ \__char_int_to_roman:w #1 _tl } + \or: } \fi: } \fi: @@ -9054,7 +9032,7 @@ } { \scan_stop: } } -%% File: l3prop.dtx Copyright (C) 1990-2019 The LaTeX3 Project +%% File: l3prop.dtx \scan_new:N \s__prop \cs_new:Npn \__prop_pair:wn #1 \s__prop #2 { \__kernel_msg_expandable_error:nn { kernel } { misused-prop } } @@ -9367,7 +9345,7 @@ { } { } } } -%% File: l3msg.dtx Copyright (C) 2009-2019 The LaTeX3 Project +%% File: l3msg.dtx \tl_new:N \l__msg_tmp_tl \str_new:N \l__msg_name_str \str_new:N \l__msg_text_str @@ -10371,7 +10349,7 @@ } } } -%% File: l3file.dtx Copyright (C) 1990-2019 The LaTeX3 Project +%% File: l3file.dtx \tl_new:N \l__ior_internal_tl \int_const:Nn \c_term_ior { 16 } \seq_new:N \g__ior_streams_seq @@ -11035,6 +11013,44 @@ } \cs_new:Npn \__file_name_quote_aux:n #1 { \token_if_eq_charcode:NNT #1 " { + 1 } } +\tl_const:Nx \c__file_marker_tl { : \token_to_str:N : } +\cs_new_protected:Npn \file_get:nnN #1#2#3 + { + \file_get:nnNF {#1} {#2} #3 + { \__kernel_file_missing:n {#1} } + } +\prg_new_protected_conditional:Npnn \file_get:nnN #1#2#3 { T , F , TF } + { + \file_get_full_name:nN {#1} \l__file_full_name_str + \str_if_empty:NTF \l__file_full_name_str + { \prg_return_false: } + { + \exp_args:NV \__file_get_aux:nnN + \l__file_full_name_str + {#2} #3 + \prg_return_true: + } + } +\cs_new_protected:Npn \__file_get_aux:nnN #1#2#3 + { + \if_false: { \fi: + \group_begin: + \int_set_eq:NN \tex_tracingnesting:D \c_zero_int + \exp_args:No \tex_everyeof:D { \c__file_marker_tl } + #2 \scan_stop: + \exp_after:wN \__file_get_do:Nw + \exp_after:wN #3 + \exp_after:wN \prg_do_nothing: + \tex_input:D #1 \scan_stop: + \if_false: } \fi: + } +\exp_args:Nno \use:nn + { \cs_new_protected:Npn \__file_get_do:Nw #1#2 } + { \c__file_marker_tl } + { + \group_end: + \tl_set:No #1 {#2} + } \cs_new_protected:Npn \file_get_full_name:nN #1#2 { \__kernel_file_name_sanitize:nN {#1} \l__file_base_name_str @@ -11232,8 +11248,7 @@ which~will~be~wrapped~using~#1. \tl_if_empty:nF {#3} { ~ It~was~called~with~argument~'#3'. } } -%% File: l3skip.dtx Copyright (C) 2004-2011,2019 Frank Mittelbach, The LaTeX3 Project -%% (C) 2012-2019 The LaTeX3 Project +%% File: l3skip.dtx \cs_new_eq:NN \if_dim:w \tex_ifdim:D \cs_new_eq:NN \__dim_eval:w \tex_dimexpr:D \cs_new_eq:NN \__dim_eval_end: \tex_relax:D @@ -11854,7 +11869,7 @@ \muskip_new:N \l_tmpb_muskip \muskip_new:N \g_tmpa_muskip \muskip_new:N \g_tmpb_muskip -%% File: l3keys.dtx Copyright (C) 2006-2019 The LaTeX3 Project +%% File: l3keys.dtx \tl_new:N \l__keyval_key_tl \tl_new:N \l__keyval_value_tl \tl_new:N \l__keyval_sanitise_tl @@ -12803,7 +12818,7 @@ { is~undefined. } { has~the~properties: #2 . } } -%% File: l3intarray.dtx Copyright (C) 2017-2019 The LaTeX3 Project +%% File: l3intarray.dtx \cs_new_eq:NN \__intarray_entry:w \tex_fontdimen:D \cs_new_eq:NN \__intarray_count:w \tex_hyphenchar:D \int_new:N \l__intarray_loop_int @@ -13034,8 +13049,8 @@ { \intarray_gset_rand:Nnn #1 {#2} {#3} } } } -%% File: l3fp.dtx Copyright (C) 2011-2019 The LaTeX3 Project -%% File: l3fp-aux.dtx Copyright (C) 2011-2019 The LaTeX3 Project +%% File: l3fp.dtx +%% File: l3fp-aux.dtx \cs_new_eq:NN \__fp_int_eval:w \tex_numexpr:D \cs_new_eq:NN \__fp_int_eval_end: \scan_stop: \cs_new_eq:NN \__fp_int_to_roman:w \tex_romannumeral:D @@ -13444,7 +13459,7 @@ '\token_to_str:N \fp_to_tl:N',~or~other~ conversion~functions. } -%% File: l3fp-traps.dtx Copyright (C) 2011-2014,2016-2019 The LaTeX3 Project +%% File: l3fp-traps.dtx \flag_new:n { fp_invalid_operation } \flag_new:n { fp_division_by_zero } \flag_new:n { fp_overflow } @@ -13614,7 +13629,7 @@ { Invalid~operation~ (#1) #3 (#2) } \__kernel_msg_new:nnn { kernel } { fp-unknown-type } { Unknown~type~for~'#1' } -%% File: l3fp-round.dtx Copyright (C) 2011-2019 The LaTeX3 Project +%% File: l3fp-round.dtx \cs_new:Npn \__fp_parse_word_trunc:N { \__fp_parse_function:NNN \__fp_round_o:Nw \__fp_round_to_zero:NNN } \cs_new:Npn \__fp_parse_word_floor:N @@ -13893,7 +13908,7 @@ \exp_after:wN \__fp_exp_after_o:w \exp:w \exp_end_continue_f:w \__fp_sanitize:Nw #1#2; {1000}{0000}{0000}{0000}; } -%% File: l3fp-parse.dtx Copyright (C) 2011-2019 The LaTeX3 Project +%% File: l3fp-parse.dtx \int_const:Nn \c__fp_prec_func_int { 16 } \int_const:Nn \c__fp_prec_hatii_int { 14 } \int_const:Nn \c__fp_prec_hat_int { 13 } @@ -15225,7 +15240,7 @@ \__kernel_msg_new:nnn { kernel } { fp-robust-cmd } { Robust~command~#1 invalid~in~fp~expression! } } -%% File: l3fp-assign.dtx Copyright (C) 2011-2019 The LaTeX3 project +%% File: l3fp-assign.dtx \cs_new_protected:Npn \fp_new:N #1 { \cs_new_eq:NN #1 \c_zero_fp } \cs_generate_variant:Nn \fp_new:N {c} @@ -15283,7 +15298,7 @@ \fp_new:N \l_tmpb_fp \fp_new:N \g_tmpa_fp \fp_new:N \g_tmpb_fp -%% File: l3fp-logic.dtx Copyright (C) 2011-2019 The LaTeX3 Project +%% File: l3fp-logic.dtx \cs_new:Npn \__fp_parse_word_max:N { \__fp_parse_function:NNN \__fp_minmax_o:Nw 2 } \cs_new:Npn \__fp_parse_word_min:N @@ -15691,7 +15706,7 @@ \__fp_exp_after_array_f:w #3 \s__fp_stop #4 #1 } -%% File: l3fp-basics.dtx Copyright (C) 2011-2014,2016-2019 The LaTeX3 Project +%% File: l3fp-basics.dtx \cs_new:Npn \__fp_parse_word_abs:N { \__fp_parse_unary_function:NNN \__fp_set_sign_o:w 0 } \cs_new:Npn \__fp_parse_word_logb:N @@ -16512,7 +16527,7 @@ } \__fp_tmp:w + \__fp_tmp:w - -%% File: l3fp-extended.dtx Copyright (C) 2011-2019 The LaTeX3 Project +%% File: l3fp-extended.dtx \tl_const:Nn \c__fp_one_fixed_tl { {10000} {0000} {0000} {0000} {0000} {0000} ; } \cs_new:Npn \__fp_fixed_continue:wn #1; #2 { #2 #1; } @@ -16951,7 +16966,7 @@ \exp_after:wN \__fp_basics_pack_low:NNNNNw \int_value:w \__fp_int_eval:w 1 #3#4 + 1 ; } -%% File: l3fp-expo.dtx Copyright (C) 2011-2019 The LaTeX3 Project +%% File: l3fp-expo.dtx \cs_new:Npn \__fp_parse_word_exp:N { \__fp_parse_unary_function:NNN \__fp_exp_o:w ? } \cs_new:Npn \__fp_parse_word_ln:N @@ -17624,7 +17639,7 @@ 1 \fi: } -%% File: l3fp-trig.dtx Copyright (C) 2011-2019 The LaTeX3 Project +%% File: l3fp-trig.dtx \tl_map_inline:nn { {acos} {acsc} {asec} {asin} @@ -18500,7 +18515,7 @@ { \__fp_asin_auxi_o:NnNww #1 {#3} #4 } } } -%% File: l3fp-convert.dtx Copyright (C) 2011-2019 The LaTeX3 Project +%% File: l3fp-convert.dtx \cs_new:Npn \__fp_tuple_convert:Nw #1 \s__fp_tuple \__fp_tuple_chk:w #2 ; { \int_case:nnF { \__fp_array_count:n {#2} } @@ -18812,7 +18827,7 @@ } \exp_not:N \__fp_array_to_clist_loop:Nw } -%% File: l3fp-random.dtx Copyright (C) 2016-2019 The LaTeX3 Project +%% File: l3fp-random.dtx \cs_new:Npn \__fp_parse_word_rand:N { \__fp_parse_function:NNN \__fp_rand_o:Nw ? } \cs_new:Npn \__fp_parse_word_randint:N @@ -19104,7 +19119,7 @@ \fi: } } -%% File: l3fparray.dtx Copyright (C) 2018-2019 The LaTeX3 Project +%% File: l3fparray.dtx \int_new:N \g__fp_array_int \int_new:N \l__fp_array_loop_int \cs_new_protected:Npn \fparray_new:Nn #1#2 @@ -19271,7 +19286,7 @@ } \cs_new:Npn \__fp_array_item_normal:w #1 #2#3#4#5 #6 ; #7 ; #8 ; #9 { #9 \s__fp \__fp_chk:w 1 #1 {#8} #7 {#2#3#4#5} {#6} ; } -%% File l3sort.dtx (C) Copyright 2012-2019 The LaTeX3 Project +%% File l3sort.dtx \seq_new:N \g__sort_internal_seq \tl_new:N \g__sort_internal_tl \int_new:N \l__sort_length_int @@ -19687,7 +19702,7 @@ \iow_char:N\\sort_return_swapped: ~multiple~times.~ Exactly~one~of~these~should~be~called. } -%% File: l3tl-analysis.dtx Copyright (C) 2011-2019 The LaTeX3 Project +%% File: l3tl-analysis.dtx \scan_new:N \s__tl \cs_new_eq:NN \l__tl_analysis_token ? \cs_new_eq:NN \l__tl_analysis_char_token ? @@ -20126,7 +20141,7 @@ { \tl_analysis_show:n } \cs_new_protected:Npn \tl_show_analysis:n #1 { \tl_analysis_show:n {#1} } -%% File: l3regex.dtx Copyright (C) 2011-2019 The LaTeX3 Project +%% File: l3regex.dtx \cs_new_eq:NN \__regex_int_eval:w \tex_numexpr:D \cs_new_protected:Npn \__regex_standard_escapechar: { \int_set:Nn \tex_escapechar:D { `\\ } } @@ -23397,7 +23412,7 @@ } } { } -%% File: l3box.dtx Copyright (C) 2005-2019 The LaTeX3 Project +%% File: l3box.dtx \cs_new_eq:NN \__box_dim_eval:w \tex_dimexpr:D \__kernel_patch_args:nNNpn { @@ -23435,13 +23450,13 @@ \cs_generate_variant:Nn \box_set_eq:NN { c , Nc , cc } \cs_generate_variant:Nn \box_gset_eq:NN { c , Nc , cc } \__kernel_patch:nnNNpn { \__kernel_chk_var_local:N #1 } { } -\cs_new_protected:Npn \box_set_eq_clear:NN #1#2 +\cs_new_protected:Npn \box_set_eq_drop:NN #1#2 { \tex_setbox:D #1 \tex_box:D #2 } \__kernel_patch:nnNNpn { \__kernel_chk_var_global:N #1 } { } -\cs_new_protected:Npn \box_gset_eq_clear:NN #1#2 +\cs_new_protected:Npn \box_gset_eq_drop:NN #1#2 { \tex_global:D \tex_setbox:D #1 \tex_box:D #2 } -\cs_generate_variant:Nn \box_set_eq_clear:NN { c , Nc , cc } -\cs_generate_variant:Nn \box_gset_eq_clear:NN { c , Nc , cc } +\cs_generate_variant:Nn \box_set_eq_drop:NN { c , Nc , cc } +\cs_generate_variant:Nn \box_gset_eq_drop:NN { c , Nc , cc } \prg_new_eq_conditional:NNn \box_if_exist:N \cs_if_exist:N { TF , T , F , p } \prg_new_eq_conditional:NNn \box_if_exist:c \cs_if_exist:c @@ -23453,14 +23468,32 @@ \cs_generate_variant:Nn \box_dp:N { c } \cs_generate_variant:Nn \box_wd:N { c } \cs_new_protected:Npn \box_set_dp:Nn #1#2 + { + \tex_setbox:D #1 = \tex_copy:D #1 + \box_dp:N #1 \__box_dim_eval:n {#2} + } +\cs_generate_variant:Nn \box_set_dp:Nn { c } +\cs_new_protected:Npn \box_gset_dp:Nn #1#2 { \box_dp:N #1 \__box_dim_eval:n {#2} } +\cs_generate_variant:Nn \box_gset_dp:Nn { c } \cs_new_protected:Npn \box_set_ht:Nn #1#2 + { + \tex_setbox:D #1 = \tex_copy:D #1 + \box_ht:N #1 \__box_dim_eval:n {#2} + } +\cs_generate_variant:Nn \box_set_ht:Nn { c } +\cs_new_protected:Npn \box_gset_ht:Nn #1#2 { \box_ht:N #1 \__box_dim_eval:n {#2} } +\cs_generate_variant:Nn \box_gset_ht:Nn { c } \cs_new_protected:Npn \box_set_wd:Nn #1#2 - { \box_wd:N #1 \__box_dim_eval:n {#2} } -\cs_generate_variant:Nn \box_set_ht:Nn { c } -\cs_generate_variant:Nn \box_set_dp:Nn { c } + { + \tex_setbox:D #1 = \tex_copy:D #1 + \box_wd:N #1 \__box_dim_eval:n {#2} + } \cs_generate_variant:Nn \box_set_wd:Nn { c } +\cs_new_protected:Npn \box_gset_wd:Nn #1#2 + { \box_wd:N #1 \__box_dim_eval:n {#2} } +\cs_generate_variant:Nn \box_gset_wd:Nn { c } \cs_new_eq:NN \box_use_drop:N \tex_box:D \cs_new_eq:NN \box_use:N \tex_copy:D \cs_generate_variant:Nn \box_use_drop:N { c } @@ -23620,9 +23653,9 @@ \cs_new_protected:Npn \hbox_overlap_right:n #1 { \hbox_to_zero:n { #1 \tex_hss:D } } \cs_new_eq:NN \hbox_unpack:N \tex_unhcopy:D -\cs_new_eq:NN \hbox_unpack_clear:N \tex_unhbox:D +\cs_new_eq:NN \hbox_unpack_drop:N \tex_unhbox:D \cs_generate_variant:Nn \hbox_unpack:N { c } -\cs_generate_variant:Nn \hbox_unpack_clear:N { c } +\cs_generate_variant:Nn \hbox_unpack_drop:N { c } \cs_new_protected:Npn \vbox:n #1 { \tex_vbox:D { \color_group_begin: #1 \par \color_group_end: } } \cs_new_protected:Npn \vbox_top:n #1 @@ -23719,9 +23752,9 @@ \cs_generate_variant:Nn \vbox_set_to_ht:Nnw { c } \cs_generate_variant:Nn \vbox_gset_to_ht:Nnw { c } \cs_new_eq:NN \vbox_unpack:N \tex_unvcopy:D -\cs_new_eq:NN \vbox_unpack_clear:N \tex_unvbox:D +\cs_new_eq:NN \vbox_unpack_drop:N \tex_unvbox:D \cs_generate_variant:Nn \vbox_unpack:N { c } -\cs_generate_variant:Nn \vbox_unpack_clear:N { c } +\cs_generate_variant:Nn \vbox_unpack_drop:N { c } \__kernel_patch:nnNNpn { \__kernel_chk_var_local:N #1 } { } \cs_new_protected:Npn \vbox_set_split_to_ht:NNn #1#2#3 { \tex_setbox:D #1 \tex_vsplit:D #2 to \__box_dim_eval:n {#3} } @@ -23746,8 +23779,14 @@ \dim_new:N \l__box_right_new_dim \box_new:N \l__box_internal_box \cs_new_protected:Npn \box_rotate:Nn #1#2 + { \__box_rotate:NnN #1 {#2} \hbox_set:Nn } +\cs_generate_variant:Nn \box_rotate:Nn { c } +\cs_new_protected:Npn \box_grotate:Nn #1#2 + { \__box_rotate:NnN #1 {#2} \hbox_gset:Nn } +\cs_generate_variant:Nn \box_grotate:Nn { c } +\cs_new_protected:Npn \__box_rotate:NnN #1#2#3 { - \hbox_set:Nn #1 + #3 #1 { \fp_set:Nn \l__box_angle_fp {#2} \fp_set:Nn \l__box_sin_fp { sind ( \l__box_angle_fp ) } @@ -23859,7 +23898,19 @@ \fp_new:N \l__box_scale_y_fp \cs_new_protected:Npn \box_resize_to_wd_and_ht_plus_dp:Nnn #1#2#3 { - \hbox_set:Nn #1 + \__box_resize_to_wd_and_ht_plus_dp:NnnN #1 {#2} {#3} + \hbox_set:Nn + } +\cs_generate_variant:Nn \box_resize_to_wd_and_ht_plus_dp:Nnn { c } +\cs_new_protected:Npn \box_gresize_to_wd_and_ht_plus_dp:Nnn #1#2#3 + { + \__box_resize_to_wd_and_ht_plus_dp:NnnN #1 {#2} {#3} + \hbox_gset:Nn + } +\cs_generate_variant:Nn \box_gresize_to_wd_and_ht_plus_dp:Nnn { c } +\cs_new_protected:Npn \__box_resize_to_wd_and_ht_plus_dp:NnnN #1#2#3#4 + { + #4 #1 { \__box_resize_set_corners:N #1 \fp_set:Nn \l__box_scale_x_fp @@ -23872,7 +23923,6 @@ \__box_resize:N #1 } } -\cs_generate_variant:Nn \box_resize_to_wd_and_ht_plus_dp:Nnn { c } \cs_new_protected:Npn \__box_resize_set_corners:N #1 { \dim_set:Nn \l__box_top_dim { \box_ht:N #1 } @@ -23896,8 +23946,14 @@ { \fp_to_dim:n { \fp_abs:n { #2 } * \dim_to_fp:n { #3 } } } } \cs_new_protected:Npn \box_resize_to_ht:Nn #1#2 + { \__box_resize_to_ht:NnN #1 {#2} \hbox_set:Nn } +\cs_generate_variant:Nn \box_resize_to_ht:Nn { c } +\cs_new_protected:Npn \box_gresize_to_ht:Nn #1#2 + { \__box_resize_to_ht:NnN #1 {#2} \hbox_gset:Nn } +\cs_generate_variant:Nn \box_gresize_to_ht:Nn { c } +\cs_new_protected:Npn \__box_resize_to_ht:NnN #1#2#3 { - \hbox_set:Nn #1 + #3 #1 { \__box_resize_set_corners:N #1 \fp_set:Nn \l__box_scale_y_fp @@ -23909,8 +23965,13 @@ \__box_resize:N #1 } } -\cs_generate_variant:Nn \box_resize_to_ht:Nn { c } \cs_new_protected:Npn \box_resize_to_ht_plus_dp:Nn #1#2 + { \__box_resize_to_ht_plus_dp:NnN #1 {#2} \hbox_set:Nn } +\cs_generate_variant:Nn \box_resize_to_ht_plus_dp:Nn { c } +\cs_new_protected:Npn \box_gresize_to_ht_plus_dp:Nn #1#2 + { \__box_resize_to_ht_plus_dp:NnN #1 {#2} \hbox_gset:Nn } +\cs_generate_variant:Nn \box_gresize_to_ht_plus_dp:Nn { c } +\cs_new_protected:Npn \__box_resize_to_ht_plus_dp:NnN #1#2#3 { \hbox_set:Nn #1 { @@ -23924,10 +23985,15 @@ \__box_resize:N #1 } } -\cs_generate_variant:Nn \box_resize_to_ht_plus_dp:Nn { c } \cs_new_protected:Npn \box_resize_to_wd:Nn #1#2 + { \__box_resize_to_wd:NnN #1 {#2} \hbox_set:Nn } +\cs_generate_variant:Nn \box_resize_to_wd:Nn { c } +\cs_new_protected:Npn \box_gresize_to_wd:Nn #1#2 + { \__box_resize_to_wd:NnN #1 {#2} \hbox_gset:Nn } +\cs_generate_variant:Nn \box_gresize_to_wd:Nn { c } +\cs_new_protected:Npn \__box_resize_to_wd:NnN #1#2#3 { - \hbox_set:Nn #1 + #3 #1 { \__box_resize_set_corners:N #1 \fp_set:Nn \l__box_scale_x_fp @@ -23936,10 +24002,15 @@ \__box_resize:N #1 } } -\cs_generate_variant:Nn \box_resize_to_wd:Nn { c } \cs_new_protected:Npn \box_resize_to_wd_and_ht:Nnn #1#2#3 + { \__box_resize_to_wd_and_ht:NnnN #1 {#2} {#3} \hbox_set:Nn } +\cs_generate_variant:Nn \box_resize_to_wd_and_ht:Nnn { c } +\cs_new_protected:Npn \box_gresize_to_wd_and_ht:Nnn #1#2#3 + { \__box_resize_to_wd_and_ht:NnnN #1 {#2} {#3} \hbox_gset:Nn } +\cs_generate_variant:Nn \box_gresize_to_wd_and_ht:Nnn { c } +\cs_new_protected:Npn \__box_resize_to_wd_and_ht:NnnN #1#2#3#4 { - \hbox_set:Nn #1 + #4 #1 { \__box_resize_set_corners:N #1 \fp_set:Nn \l__box_scale_x_fp @@ -23952,18 +24023,22 @@ \__box_resize:N #1 } } -\cs_generate_variant:Nn \box_resize_to_wd_and_ht:Nnn { c } \cs_new_protected:Npn \box_scale:Nnn #1#2#3 + { \__box_scale:NnnN #1 {#2} {#3} \hbox_set:Nn } +\cs_generate_variant:Nn \box_scale:Nnn { c } +\cs_new_protected:Npn \box_gscale:Nnn #1#2#3 + { \__box_scale:NnnN #1 {#2} {#3} \hbox_gset:Nn } +\cs_generate_variant:Nn \box_gscale:Nnn { c } +\cs_new_protected:Npn \__box_scale:NnnN #1#2#3#4 { - \hbox_set:Nn #1 + #4 #1 { \fp_set:Nn \l__box_scale_x_fp {#2} \fp_set:Nn \l__box_scale_y_fp {#3} - \__box_scale_aux:N #1 + \__box_scale:N #1 } } -\cs_generate_variant:Nn \box_scale:Nnn { c } -\cs_new_protected:Npn \__box_scale_aux:N #1 +\cs_new_protected:Npn \__box_scale:N #1 { \dim_set:Nn \l__box_top_dim { \box_ht:N #1 } \dim_set:Nn \l__box_bottom_dim { -\box_dp:N #1 } @@ -23978,21 +24053,33 @@ \__box_resize_common:N #1 } \cs_new_protected:Npn \box_autosize_to_wd_and_ht:Nnn #1#2#3 - { \__box_autosize:Nnnn #1 {#2} {#3} { \box_ht:N #1 } } + { \__box_autosize:NnnnN #1 {#2} {#3} { \box_ht:N #1 } \hbox_set:Nn } +\cs_generate_variant:Nn \box_autosize_to_wd_and_ht:Nnn { c } +\cs_new_protected:Npn \box_gautosize_to_wd_and_ht:Nnn #1#2#3 + { \__box_autosize:NnnnN #1 {#2} {#3} { \box_ht:N #1 } \hbox_gset:Nn } \cs_generate_variant:Nn \box_autosize_to_wd_and_ht:Nnn { c } \cs_new_protected:Npn \box_autosize_to_wd_and_ht_plus_dp:Nnn #1#2#3 - { \__box_autosize:Nnnn #1 {#2} {#3} { \box_ht:N #1 + \box_dp:N #1 } } + { + \__box_autosize:NnnnN #1 {#2} {#3} { \box_ht:N #1 + \box_dp:N #1 } + \hbox_set:Nn + } \cs_generate_variant:Nn \box_autosize_to_wd_and_ht_plus_dp:Nnn { c } -\cs_new_protected:Npn \__box_autosize:Nnnn #1#2#3#4 +\cs_new_protected:Npn \box_gautosize_to_wd_and_ht_plus_dp:Nnn #1#2#3 { - \hbox_set:Nn #1 + \__box_autosize:NnnnN #1 {#2} {#3} { \box_ht:N #1 + \box_dp:N #1 } + \hbox_gset:Nn + } +\cs_generate_variant:Nn \box_gautosize_to_wd_and_ht_plus_dp:Nnn { c } +\cs_new_protected:Npn \__box_autosize:NnnnN #1#2#3#4#5 + { + #5 #1 { \fp_set:Nn \l__box_scale_x_fp { ( #2 ) / \box_wd:N #1 } \fp_set:Nn \l__box_scale_y_fp { ( #3 ) / ( #4 ) } \fp_compare:nNnTF \l__box_scale_x_fp > \l__box_scale_y_fp { \fp_set_eq:NN \l__box_scale_x_fp \l__box_scale_y_fp } { \fp_set_eq:NN \l__box_scale_y_fp \l__box_scale_x_fp } - \__box_scale_aux:N #1 + \__box_scale:N #1 } } \cs_new_protected:Npn \__box_resize_common:N #1 @@ -24032,7 +24119,23 @@ } } } -%% File: l3color-base.dtx Copyright (C) 2011,2012,2014,2016-2019 The LaTeX3 Project +\__kernel_patch_deprecation:nnNNpn { 2020-12-31 } { \box_set_eq_drop:N } +\cs_new_protected:Npn \box_set_eq_clear:NN #1#2 + { \tex_setbox:D #1 \tex_box:D #2 } +\__kernel_patch_deprecation:nnNNpn { 2020-12-31 } { \box_gset_eq_drop:N } +\cs_new_protected:Npn \box_gset_eq_clear:NN #1#2 + { \tex_global:D \tex_setbox:D #1 \tex_box:D #2 } +\cs_generate_variant:Nn \box_set_eq_clear:NN { c , Nc , cc } +\cs_generate_variant:Nn \box_gset_eq_clear:NN { c , Nc , cc } +\__kernel_patch_deprecation:nnNNpn { 2020-12-31 } { \hbox_unpack_drop:N } +\cs_new_protected:Npn \hbox_unpack_clear:N + { \hbox_unpack_drop:N } +\cs_generate_variant:Nn \hbox_unpack_clear:N { c } +\__kernel_patch_deprecation:nnNNpn { 2020-12-31 } { \vbox_unpack_drop:N } +\cs_new_protected:Npn \vbox_unpack_clear:N + { \vbox_unpack_drop:N } +\cs_generate_variant:Nn \vbox_unpack_clear:N { c } +%% File: l3color-base.dtx \cs_new_eq:NN \color_group_begin: \group_begin: \cs_new_eq:NN \color_group_end: \group_end: \cs_new_protected:Npn \color_ensure_current: @@ -24055,7 +24158,7 @@ { \driver_color_spot:nn {#1} {#2} } \tl_new:N \l__color_current_tl \tl_set:Nn \l__color_current_tl { gray~0 } -%% File: l3coffins.dtx Copyright (C) 2010-2019 The LaTeX3 Project +%% File: l3coffins.dtx \box_new:N \l__coffin_internal_box \dim_new:N \l__coffin_internal_dim \tl_new:N \l__coffin_internal_tl @@ -24094,7 +24197,7 @@ { \cs_if_exist:NTF #1 { - \cs_if_exist:cTF { l__coffin_poles_ \__coffin_to_value:N #1 _prop } + \cs_if_exist:cTF { coffin ~ \__coffin_to_value:N #1 ~ poles } { \prg_return_true: } { \prg_return_false: } } @@ -24120,15 +24223,24 @@ } } \cs_generate_variant:Nn \coffin_clear:N { c } +\cs_new_protected:Npn \coffin_gclear:N #1 + { + \__coffin_if_exist:NT #1 + { + \box_gclear:N #1 + \__coffin_greset_structure:N #1 + } + } +\cs_generate_variant:Nn \coffin_gclear:N { c } \cs_new_protected:Npn \coffin_new:N #1 { \box_new:N #1 \debug_suspend: - \prop_clear_new:c { l__coffin_corners_ \__coffin_to_value:N #1 _prop } - \prop_clear_new:c { l__coffin_poles_ \__coffin_to_value:N #1 _prop } - \prop_gset_eq:cN { l__coffin_corners_ \__coffin_to_value:N #1 _prop } + \prop_gclear_new:c { coffin ~ \__coffin_to_value:N #1 ~ corners } + \prop_gclear_new:c { coffin ~ \__coffin_to_value:N #1 ~ poles } + \prop_gset_eq:cN { coffin ~ \__coffin_to_value:N #1 ~ corners } \c__coffin_corners_prop - \prop_gset_eq:cN { l__coffin_poles_ \__coffin_to_value:N #1 _prop } + \prop_gset_eq:cN { coffin ~ \__coffin_to_value:N #1 ~ poles } \c__coffin_poles_prop \debug_resume: } @@ -24142,26 +24254,47 @@ \color_ensure_current: #2 } - \__coffin_reset_structure:N #1 - \__coffin_update_poles:N #1 - \__coffin_update_corners:N #1 + \__coffin_update:N #1 } } \cs_generate_variant:Nn \hcoffin_set:Nn { c } +\cs_new_protected:Npn \hcoffin_gset:Nn #1#2 + { + \__coffin_if_exist:NT #1 + { + \hbox_gset:Nn #1 + { + \color_ensure_current: + #2 + } + \__coffin_gupdate:N #1 + } + } +\cs_generate_variant:Nn \hcoffin_gset:Nn { c } \cs_new_protected:Npn \vcoffin_set:Nnn #1#2#3 { + \__coffin_set_vertical:NnnNN #1 {#2} {#3} + \vbox_set:Nn \__coffin_update:N + } +\cs_generate_variant:Nn \vcoffin_set:Nnn { c } +\cs_new_protected:Npn \vcoffin_gset:Nnn #1#2#3 + { + \__coffin_set_vertical:NnnNN #1 {#2} {#3} + \vbox_gset:Nn \__coffin_gupdate:N + } +\cs_generate_variant:Nn \vcoffin_gset:Nnn { c } +\cs_new_protected:Npn \__coffin_set_vertical:NnnNN #1#2#3#4#5 + { \__coffin_if_exist:NT #1 { - \vbox_set:Nn #1 + #4 #1 { \dim_set:Nn \tex_hsize:D {#2} \dim_set_eq:NN \linewidth \tex_hsize:D \dim_set_eq:NN \columnwidth \tex_hsize:D #3 } - \__coffin_reset_structure:N #1 - \__coffin_update_poles:N #1 - \__coffin_update_corners:N #1 + #5 #1 \vbox_set_top:Nn \l__coffin_internal_box { \vbox_unpack:N #1 } \__coffin_set_pole:Nnx #1 { T } { @@ -24176,7 +24309,6 @@ \box_clear:N \l__coffin_internal_box } } -\cs_generate_variant:Nn \vcoffin_set:Nnn { c } \cs_new_protected:Npn \hcoffin_set:Nw #1 { \__coffin_if_exist:NT #1 @@ -24185,28 +24317,52 @@ \cs_set_protected:Npn \hcoffin_set_end: { \hbox_set_end: - \__coffin_reset_structure:N #1 - \__coffin_update_poles:N #1 - \__coffin_update_corners:N #1 + \__coffin_update:N #1 } } } -\cs_new_protected:Npn \hcoffin_set_end: { } \cs_generate_variant:Nn \hcoffin_set:Nw { c } +\cs_new_protected:Npn \hcoffin_gset:Nw #1 + { + \__coffin_if_exist:NT #1 + { + \hbox_gset:Nw #1 \color_ensure_current: + \cs_set_protected:Npn \hcoffin_gset_end: + { + \hbox_gset_end: + \__coffin_gupdate:N #1 + } + } + } +\cs_generate_variant:Nn \hcoffin_gset:Nw { c } +\cs_new_protected:Npn \hcoffin_set_end: { } +\cs_new_protected:Npn \hcoffin_gset_end: { } \cs_new_protected:Npn \vcoffin_set:Nnw #1#2 { + \__coffin_set_vertical:NnNNNNw #1 {#2} \vbox_set:Nw + \vcoffin_set_end: + \vbox_set_end: \__coffin_update:N + } +\cs_generate_variant:Nn \vcoffin_set:Nnw { c } +\cs_new_protected:Npn \vcoffin_gset:Nnw #1#2 + { + \__coffin_set_vertical:NnNNNNw #1 {#2} \vbox_gset:Nw + \vcoffin_gset_end: + \vbox_gset_end: \__coffin_gupdate:N + } +\cs_generate_variant:Nn \vcoffin_gset:Nnw { c } +\cs_new_protected:Npn \__coffin_set_vertical:NnNNNNw #1#2#3#4#5#6 + { \__coffin_if_exist:NT #1 { - \vbox_set:Nw #1 + #3 #1 \dim_set:Nn \tex_hsize:D {#2} \dim_set_eq:NN \linewidth \tex_hsize:D \dim_set_eq:NN \columnwidth \tex_hsize:D - \cs_set_protected:Npn \vcoffin_set_end: + \cs_set_protected:Npn #4 { - \vbox_set_end: - \__coffin_reset_structure:N #1 - \__coffin_update_poles:N #1 - \__coffin_update_corners:N #1 + #5 + #6 #1 \vbox_set_top:Nn \l__coffin_internal_box { \vbox_unpack:N #1 } \__coffin_set_pole:Nnx #1 { T } { @@ -24223,22 +24379,38 @@ } } \cs_new_protected:Npn \vcoffin_set_end: { } -\cs_generate_variant:Nn \vcoffin_set:Nnw { c } +\cs_new_protected:Npn \vcoffin_gset_end: { } \cs_new_protected:Npn \coffin_set_eq:NN #1#2 { \__coffin_if_exist:NT #1 { \box_set_eq:NN #1 #2 - \__coffin_set_eq_structure:NN #1 #2 + \prop_set_eq:cc { coffin ~ \__coffin_to_value:N #1 ~ corners } + { coffin ~ \__coffin_to_value:N #2 ~ corners } + \prop_set_eq:cc { coffin ~ \__coffin_to_value:N #1 ~ poles } + { coffin ~ \__coffin_to_value:N #2 ~ poles } } } \cs_generate_variant:Nn \coffin_set_eq:NN { c , Nc , cc } +\cs_new_protected:Npn \coffin_gset_eq:NN #1#2 + { + \__coffin_if_exist:NT #1 + { + \box_gset_eq:NN #1 #2 + \prop_gset_eq:cc { coffin ~ \__coffin_to_value:N #1 ~ corners } + { coffin ~ \__coffin_to_value:N #2 ~ corners } + \prop_gset_eq:cc { coffin ~ \__coffin_to_value:N #1 ~ poles } + { coffin ~ \__coffin_to_value:N #2 ~ poles } + } + } +\cs_generate_variant:Nn \coffin_gset_eq:NN { c , Nc , cc } \coffin_new:N \c_empty_coffin -\tex_setbox:D \c_empty_coffin = \tex_hbox:D { } \coffin_new:N \l__coffin_aligned_coffin \coffin_new:N \l__coffin_aligned_internal_coffin \coffin_new:N \l_tmpa_coffin \coffin_new:N \l_tmpb_coffin +\coffin_new:N \g_tmpa_coffin +\coffin_new:N \g_tmpb_coffin \cs_new_eq:NN \coffin_dp:N \box_dp:N \cs_new_eq:NN \coffin_dp:c \box_dp:c \cs_new_eq:NN \coffin_ht:N \box_ht:N @@ -24248,7 +24420,7 @@ \cs_new_protected:Npn \__coffin_get_pole:NnN #1#2#3 { \prop_get:cnNF - { l__coffin_poles_ \__coffin_to_value:N #1 _prop } {#2} #3 + { coffin ~ \__coffin_to_value:N #1 ~ poles } {#2} #3 { \__kernel_msg_error:nnxx { kernel } { unknown-coffin-pole } { \exp_not:n {#2} } { \token_to_str:N #1 } @@ -24257,30 +24429,30 @@ } \cs_new_protected:Npn \__coffin_reset_structure:N #1 { - \prop_set_eq:cN { l__coffin_corners_ \__coffin_to_value:N #1 _prop } + \prop_set_eq:cN { coffin ~ \__coffin_to_value:N #1 ~ corners } \c__coffin_corners_prop - \prop_set_eq:cN { l__coffin_poles_ \__coffin_to_value:N #1 _prop } + \prop_set_eq:cN { coffin ~ \__coffin_to_value:N #1 ~ poles } \c__coffin_poles_prop } -\cs_new_protected:Npn \__coffin_set_eq_structure:NN #1#2 +\cs_new_protected:Npn \__coffin_greset_structure:N #1 { - \prop_set_eq:cc { l__coffin_corners_ \__coffin_to_value:N #1 _prop } - { l__coffin_corners_ \__coffin_to_value:N #2 _prop } - \prop_set_eq:cc { l__coffin_poles_ \__coffin_to_value:N #1 _prop } - { l__coffin_poles_ \__coffin_to_value:N #2 _prop } - } -\cs_new_protected:Npn \__coffin_gset_eq_structure:NN #1#2 - { - \prop_gset_eq:cc { l__coffin_corners_ \__coffin_to_value:N #1 _prop } - { l__coffin_corners_ \__coffin_to_value:N #2 _prop } - \prop_gset_eq:cc { l__coffin_poles_ \__coffin_to_value:N #1 _prop } - { l__coffin_poles_ \__coffin_to_value:N #2 _prop } + \prop_gset_eq:cN { coffin ~ \__coffin_to_value:N #1 ~ corners } + \c__coffin_corners_prop + \prop_gset_eq:cN { coffin ~ \__coffin_to_value:N #1 ~ poles } + \c__coffin_poles_prop } \cs_new_protected:Npn \coffin_set_horizontal_pole:Nnn #1#2#3 + { \__coffin_set_horizontal_pole:NnnN #1 {#2} {#3} \prop_put:cnx } +\cs_generate_variant:Nn \coffin_set_horizontal_pole:Nnn { c } +\cs_new_protected:Npn \coffin_gset_horizontal_pole:Nnn #1#2#3 + { \__coffin_set_horizontal_pole:NnnN #1 {#2} {#3} \prop_gput:cnx } +\cs_generate_variant:Nn \coffin_gset_horizontal_pole:Nnn { c } +\cs_new_protected:Npn \__coffin_set_horizontal_pole:NnnN #1#2#3#4 { \__coffin_if_exist:NT #1 { - \__coffin_set_pole:Nnx #1 {#2} + #4 { coffin ~ \__coffin_to_value:N #1 ~ poles } + {#2} { { 0pt } { \dim_eval:n {#3} } { 1000pt } { 0pt } @@ -24288,10 +24460,17 @@ } } \cs_new_protected:Npn \coffin_set_vertical_pole:Nnn #1#2#3 + { \__coffin_set_vertical_pole:NnnN #1 {#2} {#3} \prop_put:cnx } +\cs_generate_variant:Nn \coffin_set_vertical_pole:Nnn { c } +\cs_new_protected:Npn \coffin_gset_vertical_pole:Nnn #1#2#3 + { \__coffin_set_vertical_pole:NnnN #1 {#2} {#3} \prop_gput:cnx } + \cs_generate_variant:Nn \coffin_gset_vertical_pole:Nnn { c } +\cs_new_protected:Npn \__coffin_set_vertical_pole:NnnN #1#2#3#4 { \__coffin_if_exist:NT #1 { - \__coffin_set_pole:Nnx #1 {#2} + #4 { coffin ~ \__coffin_to_value:N #1 ~ poles } + {#2} { { \dim_eval:n {#3} } { 0pt } { 0pt } { 1000pt } @@ -24300,63 +24479,93 @@ } \cs_new_protected:Npn \__coffin_set_pole:Nnn #1#2#3 { - \prop_put:cnn { l__coffin_poles_ \__coffin_to_value:N #1 _prop } + \prop_put:cnn { coffin ~ \__coffin_to_value:N #1 ~ poles } {#2} {#3} } -\cs_generate_variant:Nn \coffin_set_horizontal_pole:Nnn { c } -\cs_generate_variant:Nn \coffin_set_vertical_pole:Nnn { c } \cs_generate_variant:Nn \__coffin_set_pole:Nnn { Nnx } +\cs_new_protected:Npn \__coffin_update:N #1 + { + \__coffin_reset_structure:N #1 + \__coffin_update_corners:N #1 + \__coffin_update_poles:N #1 + } +\cs_new_protected:Npn \__coffin_gupdate:N #1 + { + \__coffin_greset_structure:N #1 + \__coffin_gupdate_corners:N #1 + \__coffin_gupdate_poles:N #1 + } \cs_new_protected:Npn \__coffin_update_corners:N #1 + { \__coffin_update_corners:NN #1 \prop_put:Nnx } +\cs_new_protected:Npn \__coffin_gupdate_corners:N #1 + { \__coffin_update_corners:NN #1 \prop_gput:Nnx } +\cs_new_protected:Npn \__coffin_update_corners:NN #1#2 + { + \exp_args:Nc \__coffin_update_corners:NNN + { coffin ~ \__coffin_to_value:N #1 ~ corners } + #1 #2 + } +\cs_new_protected:Npn \__coffin_update_corners:NNN #1#2#3 { - \prop_put:cnx { l__coffin_corners_ \__coffin_to_value:N #1 _prop } + #3 #1 { tl } - { { 0pt } { \dim_eval:n { \box_ht:N #1 } } } - \prop_put:cnx { l__coffin_corners_ \__coffin_to_value:N #1 _prop } + { { 0pt } { \dim_eval:n { \box_ht:N #2 } } } + #3 #1 { tr } { - { \dim_eval:n { \box_wd:N #1 } } - { \dim_eval:n { \box_ht:N #1 } } + { \dim_eval:n { \box_wd:N #2 } } + { \dim_eval:n { \box_ht:N #2 } } } - \prop_put:cnx { l__coffin_corners_ \__coffin_to_value:N #1 _prop } + #3 #1 { bl } - { { 0pt } { \dim_eval:n { -\box_dp:N #1 } } } - \prop_put:cnx { l__coffin_corners_ \__coffin_to_value:N #1 _prop } + { { 0pt } { \dim_eval:n { -\box_dp:N #2 } } } + #3 #1 { br } { - { \dim_eval:n { \box_wd:N #1 } } - { \dim_eval:n { -\box_dp:N #1 } } + { \dim_eval:n { \box_wd:N #2 } } + { \dim_eval:n { -\box_dp:N #2 } } } } \cs_new_protected:Npn \__coffin_update_poles:N #1 + { \__coffin_update_poles:NN #1 \prop_put:Nnx } +\cs_new_protected:Npn \__coffin_gupdate_poles:N #1 + { \__coffin_update_poles:NN #1 \prop_gput:Nnx } +\cs_new_protected:Npn \__coffin_update_poles:NN #1#2 { - \prop_put:cnx { l__coffin_poles_ \__coffin_to_value:N #1 _prop } { hc } + \exp_args:Nc \__coffin_update_poles:NNN + { coffin ~ \__coffin_to_value:N #1 ~ poles } + #1 #2 + } +\cs_new_protected:Npn \__coffin_update_poles:NNN #1#2#3 + { + #3 #1 { hc } { - { \dim_eval:n { 0.5 \box_wd:N #1 } } + { \dim_eval:n { 0.5 \box_wd:N #2 } } { 0pt } { 0pt } { 1000pt } } - \prop_put:cnx { l__coffin_poles_ \__coffin_to_value:N #1 _prop } { r } + #3 #1 { r } { - { \dim_eval:n { \box_wd:N #1 } } + { \dim_eval:n { \box_wd:N #2 } } { 0pt } { 0pt } { 1000pt } } - \prop_put:cnx { l__coffin_poles_ \__coffin_to_value:N #1 _prop } { vc } + #3 #1 { vc } { { 0pt } - { \dim_eval:n { ( \box_ht:N #1 - \box_dp:N #1 ) / 2 } } + { \dim_eval:n { ( \box_ht:N #2 - \box_dp:N #2 ) / 2 } } { 1000pt } { 0pt } } - \prop_put:cnx { l__coffin_poles_ \__coffin_to_value:N #1 _prop } { t } + #3 #1 { t } { { 0pt } - { \dim_eval:n { \box_ht:N #1 } } + { \dim_eval:n { \box_ht:N #2 } } { 1000pt } { 0pt } } - \prop_put:cnx { l__coffin_poles_ \__coffin_to_value:N #1 _prop } { b } + #3 #1 { b } { { 0pt } - { \dim_eval:n { -\box_dp:N #1 } } + { \dim_eval:n { -\box_dp:N #2 } } { 1000pt } { 0pt } } @@ -24475,6 +24684,18 @@ } \cs_new_protected:Npn \coffin_join:NnnNnnnn #1#2#3#4#5#6#7#8 { + \__coffin_join:NnnNnnnnN #1 {#2} {#3} #4 {#5} {#6} {#7} {#8} + \coffin_set_eq:NN + } +\cs_generate_variant:Nn \coffin_join:NnnNnnnn { c , Nnnc , cnnc } +\cs_new_protected:Npn \coffin_gjoin:NnnNnnnn #1#2#3#4#5#6#7#8 + { + \__coffin_join:NnnNnnnnN #1 {#2} {#3} #4 {#5} {#6} {#7} {#8} + \coffin_gset_eq:NN + } +\cs_generate_variant:Nn \coffin_gjoin:NnnNnnnn { c , Nnnc , cnnc } +\cs_new_protected:Npn \__coffin_join:NnnNnnnnN #1#2#3#4#5#6#7#8#9 + { \__coffin_align:NnnNnnnnN #1 {#2} {#3} #4 {#5} {#6} {#7} {#8} \l__coffin_aligned_coffin \hbox_set:Nn \l__coffin_aligned_coffin @@ -24490,9 +24711,8 @@ \__coffin_reset_structure:N \l__coffin_aligned_coffin \prop_clear:c { - l__coffin_corners_ - \__coffin_to_value:N \l__coffin_aligned_coffin - _prop + coffin ~ \__coffin_to_value:N \l__coffin_aligned_coffin + \c_space_tl corners } \__coffin_update_poles:N \l__coffin_aligned_coffin \dim_compare:nNnTF \l__coffin_offset_x_dim < \c_zero_dim @@ -24511,11 +24731,22 @@ { \l__coffin_offset_x_dim } { \l__coffin_offset_y_dim } } \__coffin_update_vertical_poles:NNN #1 #4 \l__coffin_aligned_coffin - \coffin_set_eq:NN #1 \l__coffin_aligned_coffin + #9 #1 \l__coffin_aligned_coffin } -\cs_generate_variant:Nn \coffin_join:NnnNnnnn { c , Nnnc , cnnc } \cs_new_protected:Npn \coffin_attach:NnnNnnnn #1#2#3#4#5#6#7#8 { + \__coffin_attach:NnnNnnnnN #1 {#2} {#3} #4 {#5} {#6} {#7} {#8} + \coffin_set_eq:NN + } +\cs_generate_variant:Nn \coffin_attach:NnnNnnnn { c , Nnnc , cnnc } +\cs_new_protected:Npn \coffin_gattach:NnnNnnnn #1#2#3#4#5#6#7#8 + { + \__coffin_gattach:NnnNnnnnN #1 {#2} {#3} #4 {#5} {#6} {#7} {#8} + \coffin_gset_eq:NN + } +\cs_generate_variant:Nn \coffin_gattach:NnnNnnnn { c , Nnnc , cnnc } +\cs_new_protected:Npn \__coffin_attach:NnnNnnnnN #1#2#3#4#5#6#7#8#9 + { \__coffin_align:NnnNnnnnN #1 {#2} {#3} #4 {#5} {#6} {#7} {#8} \l__coffin_aligned_coffin \box_set_ht:Nn \l__coffin_aligned_coffin { \box_ht:N #1 } @@ -24524,10 +24755,10 @@ \__coffin_reset_structure:N \l__coffin_aligned_coffin \prop_set_eq:cc { - l__coffin_corners_ - \__coffin_to_value:N \l__coffin_aligned_coffin _prop + coffin ~ \__coffin_to_value:N \l__coffin_aligned_coffin + \c_space_tl corners } - { l__coffin_corners_ \__coffin_to_value:N #1 _prop } + { coffin ~ \__coffin_to_value:N #1 ~ corners } \__coffin_update_poles:N \l__coffin_aligned_coffin \__coffin_offset_poles:Nnn #1 { 0pt } { 0pt } \__coffin_offset_poles:Nnn #4 @@ -24535,7 +24766,7 @@ \__coffin_update_vertical_poles:NNN #1 #4 \l__coffin_aligned_coffin \coffin_set_eq:NN #1 \l__coffin_aligned_coffin } -\cs_new_protected:Npn \coffin_attach_mark:NnnNnnnn #1#2#3#4#5#6#7#8 +\cs_new_protected:Npn \__coffin_attach_mark:NnnNnnnn #1#2#3#4#5#6#7#8 { \__coffin_align:NnnNnnnnN #1 {#2} {#3} #4 {#5} {#6} {#7} {#8} \l__coffin_aligned_coffin @@ -24544,7 +24775,6 @@ \box_set_wd:Nn \l__coffin_aligned_coffin { \box_wd:N #1 } \box_set_eq:NN #1 \l__coffin_aligned_coffin } -\cs_generate_variant:Nn \coffin_attach:NnnNnnnn { c , Nnnc , cnnc } \cs_new_protected:Npn \__coffin_align:NnnNnnnnN #1#2#3#4#5#6#7#8#9 { \__coffin_calculate_intersection:Nnn #4 {#5} {#6} @@ -24566,7 +24796,7 @@ } \cs_new_protected:Npn \__coffin_offset_poles:Nnn #1#2#3 { - \prop_map_inline:cn { l__coffin_poles_ \__coffin_to_value:N #1 _prop } + \prop_map_inline:cn { coffin ~ \__coffin_to_value:N #1 ~ poles } { \__coffin_offset_pole:Nnnnnnn #1 {##1} ##2 {#2} {#3} } } \cs_new_protected:Npn \__coffin_offset_pole:Nnnnnnn #1#2#3#4#5#6#7#8 @@ -24585,15 +24815,15 @@ } \cs_new_protected:Npn \__coffin_offset_corners:Nnn #1#2#3 { - \prop_map_inline:cn { l__coffin_corners_ \__coffin_to_value:N #1 _prop } + \prop_map_inline:cn { coffin ~ \__coffin_to_value:N #1 ~ corners } { \__coffin_offset_corner:Nnnnn #1 {##1} ##2 {#2} {#3} } } \cs_new_protected:Npn \__coffin_offset_corner:Nnnnn #1#2#3#4#5#6 { \prop_put:cnx { - l__coffin_corners_ - \__coffin_to_value:N \l__coffin_aligned_coffin _prop + coffin ~ \__coffin_to_value:N \l__coffin_aligned_coffin + \c_space_tl corners } { #1 - #2 } { @@ -24636,10 +24866,12 @@ { { 0pt } {#6} { 1000pt } { 0pt } } } } +\coffin_new:N \c__coffin_empty_coffin +\tex_setbox:D \c__coffin_empty_coffin = \tex_hbox:D { } \cs_new_protected:Npn \coffin_typeset:Nnnnn #1#2#3#4#5 { \mode_leave_vertical: - \__coffin_align:NnnNnnnnN \c_empty_coffin { H } { l } + \__coffin_align:NnnNnnnnN \c__coffin_empty_coffin { H } { l } #1 {#2} {#3} {#4} {#5} \l__coffin_aligned_coffin \box_use_drop:N \l__coffin_aligned_coffin } @@ -24698,7 +24930,7 @@ \color {#4} \rule { 1pt } { 1pt } } - \coffin_attach_mark:NnnNnnnn #1 {#2} {#3} + \__coffin_attach_mark:NnnNnnnn #1 {#2} {#3} \l__coffin_display_pole_coffin { hc } { vc } { 0pt } { 0pt } \hcoffin_set:Nn \l__coffin_display_coord_coffin { @@ -24714,7 +24946,7 @@ { #3 #2 } \l__coffin_internal_tl \quark_if_no_value:NTF \l__coffin_internal_tl { - \coffin_attach_mark:NnnNnnnn #1 {#2} {#3} + \__coffin_attach_mark:NnnNnnnn #1 {#2} {#3} \l__coffin_display_coord_coffin { l } { vc } { 1pt } { 0pt } } @@ -24730,7 +24962,7 @@ } \cs_new_protected:Npn \__coffin_mark_handle_aux:nnnnNnn #1#2#3#4#5#6#7 { - \coffin_attach_mark:NnnNnnnn #5 {#6} {#7} + \__coffin_attach_mark:NnnNnnnn #5 {#6} {#7} \l__coffin_display_coord_coffin {#1} {#2} { #3 \l__coffin_display_offset_dim } { #4 \l__coffin_display_offset_dim } @@ -24744,7 +24976,7 @@ \rule { 1pt } { 1pt } } \prop_set_eq:Nc \l__coffin_display_poles_prop - { l__coffin_poles_ \__coffin_to_value:N #1 _prop } + { coffin ~ \__coffin_to_value:N #1 ~ poles } \__coffin_get_pole:NnN #1 { H } \l__coffin_pole_a_tl \__coffin_get_pole:NnN #1 { T } \l__coffin_pole_b_tl \tl_if_eq:NNT \l__coffin_pole_a_tl \l__coffin_pole_b_tl @@ -24855,7 +25087,7 @@ } { \prop_map_function:cN - { l__coffin_poles_ \__coffin_to_value:N #2 _prop } + { coffin ~ \__coffin_to_value:N #2 ~ poles } \msg_show_item_unbraced:nn } { } @@ -24882,7 +25114,7 @@ Size~of~coffin~#1 : #2 \\ Poles~of~coffin~#1 : #3 . } -%% File: l3luatex.dtx Copyright (C) 2010-2019 The LaTeX3 Project +%% File: l3luatex.dtx \cs_new_eq:NN \__lua_escape:n \tex_luaescapestring:D \cs_new_eq:NN \__lua_now:n \tex_directlua:D \cs_new_eq:NN \__lua_shipout:n \tex_latelua:D @@ -24931,7 +25163,7 @@ \cs_new:Npn \lua_escape_x:n #1 { \__lua_escape:n {#1} } \__kernel_patch_deprecation:nnNNpn { 2019-12-31 } { \lua_shipout_e:n } \cs_new_protected:Npn \lua_shipout_x:n #1 { \__lua_shipout:n {#1} } -%% File: l3unicode.dtx Copyright (C) 2018-2019 The LaTeX3 Project +%% File: l3unicode.dtx \ior_new:N \g__char_data_ior \bool_lazy_or:nnTF { \sys_if_engine_luatex_p: } { \sys_if_engine_xetex_p: } { @@ -25070,7 +25302,7 @@ \ior_close:N \g__char_data_ior \group_end: } -%% File: l3candidates.dtx Copyright (C) 2012-2019 The LaTeX3 Project +%% File: l3candidates.dtx \cs_new_protected:Npn \mode_leave_vertical: { \if_mode_vertical: @@ -25080,7 +25312,16 @@ \cs_new_protected:Npn \box_clip:N #1 { \hbox_set:Nn #1 { \driver_box_use_clip:N #1 } } \cs_generate_variant:Nn \box_clip:N { c } -\cs_new_protected:Npn \box_trim:Nnnnn #1#2#3#4#5 +\cs_new_protected:Npn \box_gclip:N #1 + { \hbox_gset:Nn #1 { \driver_box_use_clip:N #1 } } +\cs_generate_variant:Nn \box_gclip:N { c } +\cs_new_protected:Npn \box_set_trim:Nnnnn #1#2#3#4#5 + { \__box_set_trim:NnnnnN #1 {#2} {#3} {#4} {#5} \box_set_eq:NN } +\cs_generate_variant:Nn \box_set_trim:Nnnnn { c } +\cs_new_protected:Npn \box_gset_trim:Nnnnn #1#2#3#4#5 + { \__box_set_trim:NnnnnN #1 {#2} {#3} {#4} {#5} \box_gset_eq:NN } +\cs_generate_variant:Nn \box_gset_trim:Nnnnn { c } +\cs_new_protected:Npn \__box_set_trim:NnnnnN #1#2#3#4#5#6 { \hbox_set:Nn \l__box_internal_box { @@ -25093,7 +25334,7 @@ \hbox_set:Nn \l__box_internal_box { \box_move_down:nn \c_zero_dim - { \box_use:N \l__box_internal_box } + { \box_use_drop:N \l__box_internal_box } } \box_set_dp:Nn \l__box_internal_box { \box_dp:N #1 - (#3) } } @@ -25101,7 +25342,7 @@ \hbox_set:Nn \l__box_internal_box { \box_move_down:nn { (#3) - \box_dp:N #1 } - { \box_use:N \l__box_internal_box } + { \box_use_drop:N \l__box_internal_box } } \box_set_dp:Nn \l__box_internal_box \c_zero_dim } @@ -25110,7 +25351,7 @@ \hbox_set:Nn \l__box_internal_box { \box_move_up:nn \c_zero_dim - { \box_use:N \l__box_internal_box } + { \box_use_drop:N \l__box_internal_box } } \box_set_ht:Nn \l__box_internal_box { \box_ht:N \l__box_internal_box - (#5) } @@ -25119,14 +25360,19 @@ \hbox_set:Nn \l__box_internal_box { \box_move_up:nn { (#5) - \box_ht:N \l__box_internal_box } - { \box_use:N \l__box_internal_box } + { \box_use_drop:N \l__box_internal_box } } \box_set_ht:Nn \l__box_internal_box \c_zero_dim } - \box_set_eq:NN #1 \l__box_internal_box + #6 #1 \l__box_internal_box } -\cs_generate_variant:Nn \box_trim:Nnnnn { c } -\cs_new_protected:Npn \box_viewport:Nnnnn #1#2#3#4#5 +\cs_new_protected:Npn \box_set_viewport:Nnnnn #1#2#3#4#5 + { \__box_set_viewport:NnnnnN #1 {#2} {#3} {#4} {#5} \box_set_eq:NN } +\cs_generate_variant:Nn \box_set_viewport:Nnnnn { c } +\cs_new_protected:Npn \box_gset_viewport:Nnnnn #1#2#3#4#5 + { \__box_set_viewport:NnnnnN #1 {#2} {#3} {#4} {#5} \box_gset_eq:NN } +\cs_generate_variant:Nn \box_gset_viewport:Nnnnn { c } +\cs_new_protected:Npn \__box_set_viewport:NnnnnN #1#2#3#4#5#6 { \hbox_set:Nn \l__box_internal_box { @@ -25139,13 +25385,13 @@ \hbox_set:Nn \l__box_internal_box { \box_move_down:nn \c_zero_dim - { \box_use:N \l__box_internal_box } + { \box_use_drop:N \l__box_internal_box } } \box_set_dp:Nn \l__box_internal_box { - \__box_dim_eval:n {#3} } } { \hbox_set:Nn \l__box_internal_box - { \box_move_down:nn {#3} { \box_use:N \l__box_internal_box } } + { \box_move_down:nn {#3} { \box_use_drop:N \l__box_internal_box } } \box_set_dp:Nn \l__box_internal_box \c_zero_dim } \dim_compare:nNnTF {#5} > \c_zero_dim @@ -25153,7 +25399,7 @@ \hbox_set:Nn \l__box_internal_box { \box_move_up:nn \c_zero_dim - { \box_use:N \l__box_internal_box } + { \box_use_drop:N \l__box_internal_box } } \box_set_ht:Nn \l__box_internal_box { @@ -25166,35 +25412,44 @@ \hbox_set:Nn \l__box_internal_box { \box_move_up:nn { - \__box_dim_eval:n {#5} } - { \box_use:N \l__box_internal_box } + { \box_use_drop:N \l__box_internal_box } } \box_set_ht:Nn \l__box_internal_box \c_zero_dim } - \box_set_eq:NN #1 \l__box_internal_box + #6 #1 \l__box_internal_box } -\cs_generate_variant:Nn \box_viewport:Nnnnn { c } \fp_new:N \l__coffin_sin_fp \fp_new:N \l__coffin_cos_fp \prop_new:N \l__coffin_bounding_prop +\prop_new:N \l__coffin_corners_prop +\prop_new:N \l__coffin_poles_prop \dim_new:N \l__coffin_bounding_shift_dim \dim_new:N \l__coffin_left_corner_dim \dim_new:N \l__coffin_right_corner_dim \dim_new:N \l__coffin_bottom_corner_dim \dim_new:N \l__coffin_top_corner_dim \cs_new_protected:Npn \coffin_rotate:Nn #1#2 + { \__coffin_rotate:NnNN #1 {#2} \box_rotate:Nn \prop_set_eq:cN } +\cs_new_protected:Npn \coffin_grotate:Nn #1#2 + { \__coffin_rotate:NnNN #1 {#2} \box_grotate:Nn \prop_gset_eq:cN } +\cs_new_protected:Npn \__coffin_rotate:NnNN #1#2#3#4 { \fp_set:Nn \l__coffin_sin_fp { sind ( #2 ) } \fp_set:Nn \l__coffin_cos_fp { cosd ( #2 ) } - \prop_map_inline:cn { l__coffin_corners_ \__coffin_to_value:N #1 _prop } + \prop_set_eq:Nc \l__coffin_corners_prop + { coffin ~ \__coffin_to_value:N #1 ~ corners } + \prop_set_eq:Nc \l__coffin_poles_prop + { coffin ~ \__coffin_to_value:N #1 ~ poles } + \prop_map_inline:Nn \l__coffin_corners_prop { \__coffin_rotate_corner:Nnnn #1 {##1} ##2 } - \prop_map_inline:cn { l__coffin_poles_ \__coffin_to_value:N #1 _prop } + \prop_map_inline:Nn \l__coffin_poles_prop { \__coffin_rotate_pole:Nnnnnn #1 {##1} ##2 } \__coffin_set_bounding:N #1 \prop_map_inline:Nn \l__coffin_bounding_prop { \__coffin_rotate_bounding:nnn {##1} ##2 } \__coffin_find_corner_maxima:N #1 \__coffin_find_bounding_shift: - \box_rotate:Nn #1 {#2} + #3 #1 {#2} \hbox_set:Nn \l__coffin_internal_box { \tex_kern:D @@ -25209,11 +25464,15 @@ \box_set_dp:Nn \l__coffin_internal_box { 0 pt } \box_set_wd:Nn \l__coffin_internal_box { \l__coffin_right_corner_dim - \l__coffin_left_corner_dim } - \hbox_set:Nn #1 { \box_use:N \l__coffin_internal_box } - \prop_map_inline:cn { l__coffin_corners_ \__coffin_to_value:N #1 _prop } + \hbox_set:Nn #1 { \box_use_drop:N \l__coffin_internal_box } + \prop_map_inline:Nn \l__coffin_corners_prop { \__coffin_shift_corner:Nnnn #1 {##1} ##2 } - \prop_map_inline:cn { l__coffin_poles_ \__coffin_to_value:N #1 _prop } + \prop_map_inline:Nn \l__coffin_poles_prop { \__coffin_shift_pole:Nnnnnn #1 {##1} ##2 } + #4 { coffin ~ \__coffin_to_value:N #1 ~ corners } + \l__coffin_corners_prop + #4 { coffin ~ \__coffin_to_value:N #1 ~ poles } + \l__coffin_poles_prop } \cs_generate_variant:Nn \coffin_rotate:Nn { c } \cs_new_protected:Npn \__coffin_set_bounding:N #1 @@ -25243,7 +25502,7 @@ \cs_new_protected:Npn \__coffin_rotate_corner:Nnnn #1#2#3#4 { \__coffin_rotate_vector:nnNN {#3} {#4} \l__coffin_x_dim \l__coffin_y_dim - \prop_put:cnx { l__coffin_corners_ \__coffin_to_value:N #1 _prop } {#2} + \prop_put:Nnx \l__coffin_corners_prop {#2} { { \dim_use:N \l__coffin_x_dim } { \dim_use:N \l__coffin_y_dim } } } \cs_new_protected:Npn \__coffin_rotate_pole:Nnnnnn #1#2#3#4#5#6 @@ -25251,7 +25510,7 @@ \__coffin_rotate_vector:nnNN {#3} {#4} \l__coffin_x_dim \l__coffin_y_dim \__coffin_rotate_vector:nnNN {#5} {#6} \l__coffin_x_prime_dim \l__coffin_y_prime_dim - \__coffin_set_pole:Nnx #1 {#2} + \prop_put:Nnx \l__coffin_poles_prop {#2} { { \dim_use:N \l__coffin_x_dim } { \dim_use:N \l__coffin_y_dim } { \dim_use:N \l__coffin_x_prime_dim } @@ -25283,7 +25542,7 @@ \dim_set:Nn \l__coffin_right_corner_dim { -\c_max_dim } \dim_set:Nn \l__coffin_bottom_corner_dim { \c_max_dim } \dim_set:Nn \l__coffin_left_corner_dim { \c_max_dim } - \prop_map_inline:cn { l__coffin_corners_ \__coffin_to_value:N #1 _prop } + \prop_map_inline:Nn \l__coffin_corners_prop { \__coffin_find_corner_maxima_aux:nn ##2 } } \cs_new_protected:Npn \__coffin_find_corner_maxima_aux:nn #1#2 @@ -25310,7 +25569,7 @@ } \cs_new_protected:Npn \__coffin_shift_corner:Nnnn #1#2#3#4 { - \prop_put:cnx { l__coffin_corners_ \__coffin_to_value:N #1 _ prop } {#2} + \prop_put:Nnx \l__coffin_corners_prop {#2} { { \dim_eval:n { #3 - \l__coffin_left_corner_dim } } { \dim_eval:n { #4 - \l__coffin_bottom_corner_dim } } @@ -25318,7 +25577,7 @@ } \cs_new_protected:Npn \__coffin_shift_pole:Nnnnnn #1#2#3#4#5#6 { - \prop_put:cnx { l__coffin_poles_ \__coffin_to_value:N #1 _ prop } {#2} + \prop_put:Nnx \l__coffin_poles_prop {#2} { { \dim_eval:n { #3 - \l__coffin_left_corner_dim } } { \dim_eval:n { #4 - \l__coffin_bottom_corner_dim } } @@ -25331,6 +25590,20 @@ \dim_new:N \l__coffin_scaled_width_dim \cs_new_protected:Npn \coffin_resize:Nnn #1#2#3 { + \__coffin_resize:NnnNN #1 {#2} {#3} + \box_resize_to_wd_and_ht_plus_dp:Nnn + \prop_set_eq:cN + } +\cs_generate_variant:Nn \coffin_resize:Nnn { c } +\cs_new_protected:Npn \coffin_gresize:Nnn #1#2#3 + { + \__coffin_resize:NnnNN #1 {#2} {#3} + \box_gresize_to_wd_and_ht_plus_dp:Nnn + \prop_gset_eq:cN + } +\cs_generate_variant:Nn \coffin_gresize:Nnn { c } +\cs_new_protected:Npn \__coffin_resize:NnnNN #1#2#3#4#5 + { \fp_set:Nn \l__coffin_scale_x_fp { \dim_to_fp:n {#2} / \dim_to_fp:n { \coffin_wd:N #1 } } \fp_set:Nn \l__coffin_scale_y_fp @@ -25338,41 +25611,52 @@ \dim_to_fp:n {#3} / \dim_to_fp:n { \coffin_ht:N #1 + \coffin_dp:N #1 } } - \box_resize_to_wd_and_ht_plus_dp:Nnn #1 {#2} {#3} - \__coffin_resize_common:Nnn #1 {#2} {#3} + #4 #1 {#2} {#3} + \__coffin_resize_common:NnnN #1 {#2} {#3} #5 } -\cs_generate_variant:Nn \coffin_resize:Nnn { c } -\cs_new_protected:Npn \__coffin_resize_common:Nnn #1#2#3 +\cs_new_protected:Npn \__coffin_resize_common:NnnN #1#2#3#4 { - \prop_map_inline:cn { l__coffin_corners_ \__coffin_to_value:N #1 _prop } + \prop_set_eq:Nc \l__coffin_corners_prop + { coffin ~ \__coffin_to_value:N #1 ~ corners } + \prop_set_eq:Nc \l__coffin_poles_prop + { coffin ~ \__coffin_to_value:N #1 ~ poles } + \prop_map_inline:Nn \l__coffin_corners_prop { \__coffin_scale_corner:Nnnn #1 {##1} ##2 } - \prop_map_inline:cn { l__coffin_poles_ \__coffin_to_value:N #1 _prop } + \prop_map_inline:Nn \l__coffin_poles_prop { \__coffin_scale_pole:Nnnnnn #1 {##1} ##2 } \fp_compare:nNnT \l__coffin_scale_x_fp < \c_zero_fp { - \prop_map_inline:cn - { l__coffin_corners_ \__coffin_to_value:N #1 _prop } + \prop_map_inline:Nn \l__coffin_corners_prop { \__coffin_x_shift_corner:Nnnn #1 {##1} ##2 } - \prop_map_inline:cn - { l__coffin_poles_ \__coffin_to_value:N #1 _prop } + \prop_map_inline:Nn \l__coffin_poles_prop { \__coffin_x_shift_pole:Nnnnnn #1 {##1} ##2 } } + #4 { coffin ~ \__coffin_to_value:N #1 ~ corners } + \l__coffin_corners_prop + #4 { coffin ~ \__coffin_to_value:N #1 ~ poles } + \l__coffin_poles_prop } \cs_new_protected:Npn \coffin_scale:Nnn #1#2#3 + { \__coffin_scale:NnnNN #1 {#2} {#3} \box_scale:Nnn \prop_set_eq:cN } +\cs_generate_variant:Nn \coffin_scale:Nnn { c } +\cs_new_protected:Npn \coffin_gscale:Nnn #1#2#3 + { \__coffin_scale:NnnNN #1 {#2} {#3} \box_gscale:Nnn \prop_gset_eq:cN } +\cs_generate_variant:Nn \coffin_gscale:Nnn { c } +\cs_new_protected:Npn \__coffin_scale:NnnNN #1#2#3#4#5 { \fp_set:Nn \l__coffin_scale_x_fp {#2} \fp_set:Nn \l__coffin_scale_y_fp {#3} - \box_scale:Nnn #1 { \l__coffin_scale_x_fp } { \l__coffin_scale_y_fp } + #4 #1 { \l__coffin_scale_x_fp } { \l__coffin_scale_y_fp } \dim_set:Nn \l__coffin_internal_dim { \coffin_ht:N #1 + \coffin_dp:N #1 } \dim_set:Nn \l__coffin_scaled_total_height_dim { \fp_abs:n { \l__coffin_scale_y_fp } \l__coffin_internal_dim } \dim_set:Nn \l__coffin_scaled_width_dim { -\fp_abs:n { \l__coffin_scale_x_fp } \coffin_wd:N #1 } - \__coffin_resize_common:Nnn #1 + \__coffin_resize_common:NnnN #1 { \l__coffin_scaled_width_dim } { \l__coffin_scaled_total_height_dim } + #5 } -\cs_generate_variant:Nn \coffin_scale:Nnn { c } \cs_new_protected:Npn \__coffin_scale_vector:nnNN #1#2#3#4 { \dim_set:Nn #3 @@ -25383,13 +25667,13 @@ \cs_new_protected:Npn \__coffin_scale_corner:Nnnn #1#2#3#4 { \__coffin_scale_vector:nnNN {#3} {#4} \l__coffin_x_dim \l__coffin_y_dim - \prop_put:cnx { l__coffin_corners_ \__coffin_to_value:N #1 _prop } {#2} + \prop_put:Nnx \l__coffin_corners_prop {#2} { { \dim_use:N \l__coffin_x_dim } { \dim_use:N \l__coffin_y_dim } } } \cs_new_protected:Npn \__coffin_scale_pole:Nnnnnn #1#2#3#4#5#6 { \__coffin_scale_vector:nnNN {#3} {#4} \l__coffin_x_dim \l__coffin_y_dim - \__coffin_set_pole:Nnx #1 {#2} + \prop_put:Nnx \l__coffin_poles_prop {#2} { { \dim_use:N \l__coffin_x_dim } { \dim_use:N \l__coffin_y_dim } {#5} {#6} @@ -25397,14 +25681,14 @@ } \cs_new_protected:Npn \__coffin_x_shift_corner:Nnnn #1#2#3#4 { - \prop_put:cnx { l__coffin_corners_ \__coffin_to_value:N #1 _prop } {#2} + \prop_put:Nnx \l__coffin_corners_prop {#2} { { \dim_eval:n { #3 + \box_wd:N #1 } } {#4} } } \cs_new_protected:Npn \__coffin_x_shift_pole:Nnnnnn #1#2#3#4#5#6 { - \prop_put:cnx { l__coffin_poles_ \__coffin_to_value:N #1 _prop } {#2} + \prop_put:Nnx \l__coffin_poles_prop {#2} { { \dim_eval:n { #3 + \box_wd:N #1 } } {#4} {#5} {#6} @@ -25877,6 +26161,51 @@ \tex_shellescape:D } } +\tl_new:N \l__sys_internal_tl +\tl_const:Nx \c__sys_marker_tl { : \token_to_str:N : } +\cs_new_protected:Npn \sys_shell_get:nnN #1#2#3 + { + \sys_shell_get:nnNF {#1} {#2} #3 + { \tl_clear:N #3 } + } +\prg_new_protected_conditional:Npnn \sys_shell_get:nnN #1#2#3 { T , F , TF } + { + \sys_if_shell:TF + { \exp_args:No \__sys_get:nnN { \tl_to_str:n {#1} } {#2} #3 } + { \prg_return_false: } + } +\cs_new_protected:Npn \__sys_get:nnN #1#2#3 + { + \tl_if_in:nnTF {#1} { " } + { + \__kernel_msg_error:nnx + { kernel } { quote-in-shell } {#1} + \prg_return_false: + } + { + \if_false: { \fi: + \group_begin: + \int_set_eq:NN \tex_tracingnesting:D \c_zero_int + \exp_args:No \tex_everyeof:D { \c__sys_marker_tl } + #2 \scan_stop: + \exp_after:wN \__sys_get_do:Nw + \exp_after:wN #3 + \exp_after:wN \prg_do_nothing: + \tex_input:D | "#1" \scan_stop: + \if_false: } \fi: + \prg_return_true: + } + } +\exp_args:Nno \use:nn + { \cs_new_protected:Npn \__sys_get_do:Nw #1#2 } + { \c__sys_marker_tl } + { + \group_end: + \tl_set:No #1 {#2} + } +\__kernel_msg_new:nnnn { kernel } { quote-in-shell } + { Quotes~in~shell~command~'#1'. } + { Shell~commands~cannot~contain~quotes~("). } \sys_if_engine_luatex:TF { \str_const:Nx \c_sys_platform_str @@ -25988,84 +26317,40 @@ \cs_new:Npn \__tl_act_count_space:n #1 { 1 + } \cs_new:Npn \__tl_act_count_group:nn #1 #2 { 2 + \tl_count_tokens:n {#2} + } -\cs_new_protected:Npn \tl_set_from_file:Nnn - { \__tl_set_from_file:NNnn \tl_set:Nn } -\cs_new_protected:Npn \tl_gset_from_file:Nnn - { \__tl_set_from_file:NNnn \tl_gset:Nn } -\cs_generate_variant:Nn \tl_set_from_file:Nnn { c } -\cs_generate_variant:Nn \tl_gset_from_file:Nnn { c } -\cs_new_protected:Npn \__tl_set_from_file:NNnn #1#2#3#4 +\__kernel_patch_deprecation:nnNNpn { 2020-12-31 } { \file_get:nnN } +\cs_new_protected:Npn \tl_set_from_file:Nnn #1#2#3 + { \file_get:nnN {#2} {#3} #1 } +\cs_generate_variant:Nn \tl_set_from_file:Nnn { c } +\__kernel_patch_deprecation:nnNNpn { 2020-12-31 } { \file_get:nnN } +\cs_new_protected:Npn \tl_gset_from_file:Nnn #1#2#3 { - \file_get_full_name:nN {#4} \l__tl_file_name_str - \str_if_empty:NTF \l__tl_file_name_str - { \__kernel_file_missing:n {#4} } - { - \exp_args:NV \__tl_set_from:nNNn - \l__tl_file_name_str - #1 #2 {#3} - } + \group_begin: + \file_get:nnN {#3} {#2} \l__tl_internal_a_tl + \tl_gset_eq:NN #1 \l__tl_internal_a_tl + \group_end: } -\exp_args:Nno \use:nn - { \cs_new_protected:Npn \__tl_from_file_do:w #1 } - { \c__tl_rescan_marker_tl } - { \tl_set:No \l__tl_internal_a_tl {#1} } -\cs_new_protected:Npn \__tl_set_from:nNNn #1#2#3#4 +\cs_generate_variant:Nn \tl_gset_from_file:Nnn { c } +\__kernel_patch_deprecation:nnNNpn { 2020-12-31 } { \file_get:nnN } +\cs_new_protected:Npn \tl_set_from_file_x:Nnn #1#2#3 { \group_begin: - \exp_args:No \tex_everyeof:D - { \c__tl_rescan_marker_tl \exp_not:N } - #4 \scan_stop: - \exp_after:wN \__tl_from_file_do:w - \exp_after:wN \prg_do_nothing: - \tex_input:D #1 \scan_stop: + \file_get:nnN {#3} {#2} \l__tl_internal_a_tl + #2 \scan_stop: + \tl_set:Nx \l__tl_internal_a_tl { \l__tl_internal_a_tl } \exp_args:NNNo \group_end: - #2 #3 \l__tl_internal_a_tl + \tl_set:Nn #1 \l__tl_internal_a_tl } -\cs_new_protected:Npn \tl_set_from_file_x:Nnn - { \__tl_set_from_file_x:NNnn \tl_set:Nn } -\cs_new_protected:Npn \tl_gset_from_file_x:Nnn - { \__tl_set_from_file_x:NNnn \tl_gset:Nn } -\cs_generate_variant:Nn \tl_set_from_file_x:Nnn { c } -\cs_generate_variant:Nn \tl_gset_from_file_x:Nnn { c } -\cs_new_protected:Npn \__tl_set_from_file_x:NNnn #1#2#3#4 +\cs_generate_variant:Nn \tl_set_from_file_x:Nnn { c } +\__kernel_patch_deprecation:nnNNpn { 2020-12-31 } { \file_get:nnN } +\cs_new_protected:Npn \tl_gset_from_file_x:Nnn #1#2#3 { - \file_get_full_name:nN {#4} \l__tl_file_name_str - \str_if_empty:NTF \l__tl_file_name_str - { \__kernel_file_missing:n {#4} } - { - \group_begin: - \tex_everyeof:D { \exp_not:N } - #3 \scan_stop: - \tl_set:Nx \l__tl_internal_a_tl - { \tex_input:D \l__tl_file_name_str \c_space_token } - \exp_args:NNNo \group_end: - #1 #2 \l__tl_internal_a_tl - } - } -\str_new:N \l__tl_file_name_str -\cs_new_protected:Npn \tl_set_from_shell:Nnn - { \__tl_set_from_shell:NNnn \tl_set:Nn } -\cs_generate_variant:Nn \tl_set_from_shell:Nnn { c } -\cs_new_protected:Npn \tl_gset_from_shell:Nnn - { \__tl_set_from_shell:NNnn \tl_gset:Nn } -\cs_generate_variant:Nn \tl_gset_from_shell:Nnn { c } -\cs_new_protected:Npn \__tl_set_from_shell:NNnn #1#2#3#4 - { - \sys_if_shell:TF - { - \tl_set:Nn \l__tl_internal_a_tl {#4} - \tl_if_in:NnTF \l__tl_internal_a_tl { " } - { - \__kernel_msg_error:nnx - { kernel } { quote-in-shell } {#4} - } - { \__tl_set_from:nNNn { | " #4 " } #1 #2 {#3} } - } - { #1 #2 { } } + \group_begin: + \file_get:nnN {#3} {#2} \l__tl_internal_a_tl + #2 \scan_stop: + \tl_gset:Nx #1 { \l__tl_internal_a_tl } + \group_end: } -\__kernel_msg_new:nnnn { kernel } { quote-in-shell } - { Quotes~in~shell~command~'#1'. } - { Shell~commands~cannot~contain~quotes~("). } +\cs_generate_variant:Nn \tl_gset_from_file_x:Nnn { c } \cs_new:Npn \char_lower_case:N #1 { \__char_change_case:nNN { lower } \char_value_lccode:n #1 } \cs_new:Npn \char_upper_case:N #1 @@ -27307,7 +27592,7 @@ \tl_put_right:Nn \l__peek_collect_tl {#1} \exp_after:wN \__peek_true_remove:w } -%% File: l3deprecation.dtx (C) Copyright 2017-2019 The LaTeX3 Project +%% File: l3deprecation.dtx \cs_new_protected:Npn \__kernel_deprecation_error:Nnn #1#2#3 { \tex_protected:D \tex_outer:D \tex_edef:D #1 diff --git a/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex b/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex index ad278a3ee5e..a261d8479a9 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex +++ b/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex @@ -6,7 +6,7 @@ %% %% expl3.dtx (with options: `generic,loader') %% -%% Copyright (C) 1990-2018 The LaTeX3 Project +%% Copyright (C) 1990-2019 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 @@ -18,8 +18,8 @@ %% This file is part of the "l3kernel bundle" (The Work in LPPL) %% and all files in that bundle must be distributed together. %% -%% File: expl3.dtx Copyright (C) 1990-2019 The LaTeX3 Project -\def\ExplFileDate{2019-01-13}% +%% File: expl3.dtx +\def\ExplFileDate{2019-01-28}% \let\ExplLoaderFileDate\ExplFileDate \begingroup \def\tempa{LaTeX2e}% diff --git a/Master/texmf-dist/tex/latex/l3kernel/expl3.lua b/Master/texmf-dist/tex/latex/l3kernel/expl3.lua index ce5ca6c348f..32c32a2af07 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/expl3.lua +++ b/Master/texmf-dist/tex/latex/l3kernel/expl3.lua @@ -18,7 +18,7 @@ -- This file is part of the "l3kernel bundle" (The Work in LPPL) -- and all files in that bundle must be distributed together. -- --- File: l3luatex.dtx Copyright (C) 2010-2019 The LaTeX3 Project +-- File: l3luatex.dtx l3kernel = l3kernel or { } local io = io local kpse = kpse diff --git a/Master/texmf-dist/tex/latex/l3kernel/expl3.sty b/Master/texmf-dist/tex/latex/l3kernel/expl3.sty index bead3b912d3..e99ddd19f45 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/expl3.sty +++ b/Master/texmf-dist/tex/latex/l3kernel/expl3.sty @@ -6,7 +6,7 @@ %% %% expl3.dtx (with options: `package,loader') %% -%% Copyright (C) 1990-2018 The LaTeX3 Project +%% Copyright (C) 1990-2019 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 @@ -18,8 +18,8 @@ %% This file is part of the "l3kernel bundle" (The Work in LPPL) %% and all files in that bundle must be distributed together. %% -%% File: expl3.dtx Copyright (C) 1990-2019 The LaTeX3 Project -\def\ExplFileDate{2019-01-13}% +%% File: expl3.dtx +\def\ExplFileDate{2019-01-28}% \let\ExplLoaderFileDate\ExplFileDate \ProvidesPackage{expl3} [% diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3doc.cls b/Master/texmf-dist/tex/latex/l3kernel/l3doc.cls index 5544bd831be..cf71077feaf 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/l3doc.cls +++ b/Master/texmf-dist/tex/latex/l3kernel/l3doc.cls @@ -6,7 +6,7 @@ %% %% l3doc.dtx (with options: `class') %% -%% Copyright (C) 1990-2018 The LaTeX3 Project +%% Copyright (C) 1990-2019 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 @@ -18,7 +18,7 @@ %% This file is part of the "l3kernel bundle" (The Work in LPPL) %% and all files in that bundle must be distributed together. %% -%% File: l3doc.dtx Copyright (C) 1990-2019 The LaTeX3 project +%% File: l3doc.dtx \RequirePackage{expl3,xparse,calc} \ProvidesExplClass{l3doc}{2018-04-30}{} {L3 Experimental documentation class} @@ -1388,10 +1388,10 @@ { \llap { - \hbox_unpack_clear:N \l__codedoc_macro_index_box + \hbox_unpack_drop:N \l__codedoc_macro_index_box \vtop to \baselineskip { - \vbox_unpack_clear:N \l__codedoc_macro_box + \vbox_unpack_drop:N \l__codedoc_macro_box \vss } } @@ -1431,7 +1431,7 @@ \__codedoc_if_macro_internal:nF {#1} { \seq_gput_right:Nn \g_doc_macros_seq {#1} } \hbox_set:Nw \l__codedoc_macro_index_box - \hbox_unpack_clear:N \l__codedoc_macro_index_box + \hbox_unpack_drop:N \l__codedoc_macro_index_box \int_gincr:N \c@CodelineNo \__codedoc_special_index:nn {#1} { main } \int_gdecr:N \c@CodelineNo @@ -1443,7 +1443,7 @@ { \vbox_set:Nn \l__codedoc_macro_box { - \vbox_unpack_clear:N \l__codedoc_macro_box + \vbox_unpack_drop:N \l__codedoc_macro_box \hbox { \llap { \__codedoc_print_macroname:nN {#1} #2 \ } } } \int_incr:N \l__codedoc_macro_int diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3docstrip.tex b/Master/texmf-dist/tex/latex/l3kernel/l3docstrip.tex index 5a660691c17..a7978ddf13e 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/l3docstrip.tex +++ b/Master/texmf-dist/tex/latex/l3kernel/l3docstrip.tex @@ -6,7 +6,7 @@ %% %% l3docstrip.dtx (with options: `program') %% -%% Copyright (C) 1990-2018 The LaTeX3 Project +%% Copyright (C) 1990-2019 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 @@ -18,7 +18,7 @@ %% This file is part of the "l3kernel bundle" (The Work in LPPL) %% and all files in that bundle must be distributed together. %% -%% File l3dosctrip.dtx Copyright (C) 2012,2014-2019 The LaTeX3 Project +%% File l3dosctrip.dtx \input docstrip % \def\checkOption<#1{% \ifcase diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3dvipdfmx.def b/Master/texmf-dist/tex/latex/l3kernel/l3dvipdfmx.def index a29c510f511..bf2801a5f87 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/l3dvipdfmx.def +++ b/Master/texmf-dist/tex/latex/l3kernel/l3dvipdfmx.def @@ -6,7 +6,7 @@ %% %% l3drivers.dtx (with options: `package,dvipdfmx') %% -%% Copyright (C) 1990-2018 The LaTeX3 Project +%% Copyright (C) 1990-2019 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 @@ -18,9 +18,9 @@ %% This file is part of the "l3kernel bundle" (The Work in LPPL) %% and all files in that bundle must be distributed together. %% -%% File: l3drivers.dtx Copyright (C) 2011-2019 The LaTeX3 Project +%% File: l3drivers.dtx \ProvidesExplFile - {l3dvidpfmx.def}{2019-01-13}{} + {l3dvipdfmx.def}{2019-01-28}{} {L3 Experimental driver: dvipdfmx} \cs_new_eq:NN \__driver_literal:e \tex_special:D \cs_new_protected:Npn \__driver_literal:n #1 diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3dvips.def b/Master/texmf-dist/tex/latex/l3kernel/l3dvips.def index f631830e073..4a5360acf1d 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/l3dvips.def +++ b/Master/texmf-dist/tex/latex/l3kernel/l3dvips.def @@ -6,7 +6,7 @@ %% %% l3drivers.dtx (with options: `package,dvips') %% -%% Copyright (C) 1990-2018 The LaTeX3 Project +%% Copyright (C) 1990-2019 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 @@ -18,9 +18,9 @@ %% This file is part of the "l3kernel bundle" (The Work in LPPL) %% and all files in that bundle must be distributed together. %% -%% File: l3drivers.dtx Copyright (C) 2011-2019 The LaTeX3 Project +%% File: l3drivers.dtx \ProvidesExplFile - {l3dvips.def}{2019-01-13}{} + {l3dvips.def}{2019-01-28}{} {L3 Experimental driver: dvips} \cs_new_eq:NN \__driver_literal:e \tex_special:D \cs_new_protected:Npn \__driver_literal:n #1 diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3dvisvgm.def b/Master/texmf-dist/tex/latex/l3kernel/l3dvisvgm.def index 88d29744ea5..3de26c06f55 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/l3dvisvgm.def +++ b/Master/texmf-dist/tex/latex/l3kernel/l3dvisvgm.def @@ -6,7 +6,7 @@ %% %% l3drivers.dtx (with options: `package,dvisvgm') %% -%% Copyright (C) 1990-2018 The LaTeX3 Project +%% Copyright (C) 1990-2019 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 @@ -18,9 +18,9 @@ %% This file is part of the "l3kernel bundle" (The Work in LPPL) %% and all files in that bundle must be distributed together. %% -%% File: l3drivers.dtx Copyright (C) 2011-2019 The LaTeX3 Project +%% File: l3drivers.dtx \ProvidesExplFile - {l3dvisvgm.def}{2019-01-13}{} + {l3dvisvgm.def}{2019-01-28}{} {L3 Experimental driver: dvisvgm} \cs_new_eq:NN \__driver_literal:e \tex_special:D \cs_new_protected:Npn \__driver_literal:n #1 diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3pdfmode.def b/Master/texmf-dist/tex/latex/l3kernel/l3pdfmode.def index 290f78ba9d4..b450be1a246 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/l3pdfmode.def +++ b/Master/texmf-dist/tex/latex/l3kernel/l3pdfmode.def @@ -6,7 +6,7 @@ %% %% l3drivers.dtx (with options: `package,pdfmode') %% -%% Copyright (C) 1990-2018 The LaTeX3 Project +%% Copyright (C) 1990-2019 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 @@ -18,9 +18,9 @@ %% This file is part of the "l3kernel bundle" (The Work in LPPL) %% and all files in that bundle must be distributed together. %% -%% File: l3drivers.dtx Copyright (C) 2011-2019 The LaTeX3 Project +%% File: l3drivers.dtx \ProvidesExplFile - {l3pdfmode.def}{2019-01-13}{} + {l3pdfmode.def}{2019-01-28}{} {L3 Experimental driver: PDF mode} \cs_new_eq:NN \__driver_literal:e \tex_special:D \cs_new_protected:Npn \__driver_literal:n #1 diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3xdvipdfmx.def b/Master/texmf-dist/tex/latex/l3kernel/l3xdvipdfmx.def index b7638254deb..2c554d054f4 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/l3xdvipdfmx.def +++ b/Master/texmf-dist/tex/latex/l3kernel/l3xdvipdfmx.def @@ -6,7 +6,7 @@ %% %% l3drivers.dtx (with options: `package,xdvipdfmx') %% -%% Copyright (C) 1990-2018 The LaTeX3 Project +%% Copyright (C) 1990-2019 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 @@ -18,9 +18,9 @@ %% This file is part of the "l3kernel bundle" (The Work in LPPL) %% and all files in that bundle must be distributed together. %% -%% File: l3drivers.dtx Copyright (C) 2011-2019 The LaTeX3 Project +%% File: l3drivers.dtx \ProvidesExplFile - {l3xdvidpfmx.def}{2019-01-13}{} + {l3xdvipdfmx.def}{2019-01-28}{} {L3 Experimental driver: xdvipdfmx} \cs_new_eq:NN \__driver_literal:e \tex_special:D \cs_new_protected:Npn \__driver_literal:n #1 |