diff options
114 files changed, 677 insertions, 480 deletions
diff --git a/Master/texmf-dist/doc/latex/l3experimental/CHANGELOG.md b/Master/texmf-dist/doc/latex/l3experimental/CHANGELOG.md index 6025015b641..376c0eb3943 100644 --- a/Master/texmf-dist/doc/latex/l3experimental/CHANGELOG.md +++ b/Master/texmf-dist/doc/latex/l3experimental/CHANGELOG.md @@ -7,6 +7,8 @@ this project uses date-based 'snapshot' version identifiers. ## [Unreleased] +## [2018-11-19] + ## [2018-10-31] ### Added @@ -52,7 +54,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-10-31...HEAD +[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 [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 62089f2e566..95a0ecbc399 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-10-31 +Release 2018-11-19 Overview -------- 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 9991f06c98e..40c5297dae9 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 9b42aff6c0b..e41db012b81 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 b94d4e17131..930c8e2bfd5 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 64fea55e1d5..3e7483050af 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.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3draw/l3draw.pdf Binary files differindex 48d0abfe09d..9617300720a 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 7f0f0bdf6cc..741b0c9afd8 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 1105c746e82..e1d8e83f8b8 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 c1220db3152..df3367d8902 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 3ae6bc0ba22..1cad8f4f7c8 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 d14902c9f7d..40799e12bc5 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 1db708d287c..b41c6df8ded 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 7c02ddb9217..f2a96032081 100644 --- a/Master/texmf-dist/doc/latex/l3kernel/CHANGELOG.md +++ b/Master/texmf-dist/doc/latex/l3kernel/CHANGELOG.md @@ -7,9 +7,12 @@ this project uses date-based 'snapshot' version identifiers. ## [Unreleased] -## [2018-10-31] +## [2018-11-19] -## [2018-10-26] +### Added + +- Support for cross-compatibility primitives in XeTeX +- `\int_sign:n`, `\dim_sign:n` and `\fp_sign:n` ## [2018-10-19] @@ -30,7 +33,7 @@ this project uses date-based 'snapshot' version identifiers. ### Deprecated -- `\mg_interrupt:nn`, `\msg_log:n` and `\msg_term:n` +- `\msg_interrupt:nn`, `\msg_log:n` and `\msg_term:n` ### Fixed @@ -161,7 +164,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/2018-10-31...HEAD +[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 [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-19...2018-10-26 [2018-10-19]: https://github.com/latex3/latex3/compare/2018-10-17...2018-10-19 diff --git a/Master/texmf-dist/doc/latex/l3kernel/README.md b/Master/texmf-dist/doc/latex/l3kernel/README.md index 76c62205c46..de29cf0a61d 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 2018-10-31 +Release 2018-11-19 Overview -------- diff --git a/Master/texmf-dist/doc/latex/l3kernel/expl3.pdf b/Master/texmf-dist/doc/latex/l3kernel/expl3.pdf Binary files differindex 564d041cac5..4fa3f37ac4a 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 e9fed1b2564..3fe8c7f5dda 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 03a77cfa0f9..0af63b3f168 100644 --- a/Master/texmf-dist/doc/latex/l3kernel/interface3.tex +++ b/Master/texmf-dist/doc/latex/l3kernel/interface3.tex @@ -52,7 +52,7 @@ {latex-team@latex-project.org}% }% } -\date{Released 2018-10-31} +\date{Released 2018-11-19} \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 16b18018a19..73e447203e7 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/l3styleguide.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdf Binary files differindex e30814ae4a2..10158c6f99a 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 15bf99d618d..fae74025ed8 100644 --- a/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.tex +++ b/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.tex @@ -30,7 +30,7 @@ The released version of this bundle is available from CTAN. {latex-team@latex-project.org}% }% } -\date{Released 2018-10-31} +\date{Released 2018-11-19} \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 cb2392aeef5..57f4645f94c 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 b4b867b4379..25d8bc517af 100644 --- a/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.tex +++ b/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.tex @@ -30,7 +30,7 @@ The released version of this bundle is available from CTAN. {latex-team@latex-project.org}% }% } -\date{Released 2018-10-31} +\date{Released 2018-11-19} \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 9b262e7f549..b7cf4db5726 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 481c3189b7c..0d212fbec16 100644 --- a/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.tex +++ b/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.tex @@ -30,7 +30,7 @@ The released version of this bundle is available from CTAN. {latex-team@latex-project.org}% }% } -\date{Released 2018-10-31} +\date{Released 2018-11-19} \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 2c279e751e2..40c2049604e 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 1a5db8d91d6..3c3f734c513 100644 --- a/Master/texmf-dist/doc/latex/l3kernel/source3.tex +++ b/Master/texmf-dist/doc/latex/l3kernel/source3.tex @@ -51,7 +51,7 @@ {latex-team@latex-project.org}% }% } -\date{Released 2018-10-31} +\date{Released 2018-11-19} \pagenumbering{roman} \maketitle diff --git a/Master/texmf-dist/source/latex/l3experimental/l3benchmark/l3benchmark.dtx b/Master/texmf-dist/source/latex/l3experimental/l3benchmark/l3benchmark.dtx index 8f3fc919b17..cf8414f22fc 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3benchmark/l3benchmark.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3benchmark/l3benchmark.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2018-10-31} +% \date{Released 2018-11-19} % % \maketitle % @@ -71,54 +71,32 @@ % \section{Benchmark} % % \begin{variable}{\g_benchmark_duration_target_fp} -% This variable controls roughly for how long \cs{benchmark:n} will -% repeat code to more accurately benchmark it. The actual duration of -% one call to \cs{benchmark:n} typically lasts between half and twice -% \cs{g_benchmark_duration_target_fp} seconds, unless of course -% running the code only once already lasts longer than this. +% This variable (default value: $1$) controls roughly for how long +% \cs{benchmark:n} will repeat code to more accurately benchmark it. +% The actual duration of one call to \cs{benchmark:n} typically lasts +% between half and twice \cs{g_benchmark_duration_target_fp} seconds, +% unless of course running the code only once already lasts longer +% than this. % \end{variable} % -% \begin{variable}{\g_benchmark_time_fp, \g_benchmark_ops_fp} -% Functions such as \cs{benchmark:n} store the measured time in -% \cs{g_benchmark_time_fp} (in seconds). Functions such as -% \cs{benchmark_normalized:n} store the estimated number of operations -% in \cs{g_benchmark_ops_fp}. -% \end{variable} -% -% \begin{function}{\benchmark_display:, \benchmark_display_in_ops:} -% \begin{syntax} -% \cs{benchmark_display:} -% \end{syntax} -% Prints the time \cs{g_benchmark_time_fp} (in seconds) or the -% estimated number of operations \cs{g_benchmark_ops_fp} to the -% terminal. These functions are called by functions such as -% \cs{benchmark:n} and can be redefined by the user. -% \end{function} -% -% \begin{function}{\benchmark_once:n, \benchmark_once_in_ops:n, \benchmark_once_silent:n} +% \begin{function}{\benchmark_once:n} % \begin{syntax} % \cs{benchmark_once:n} \Arg{code} % \end{syntax} -% Measures the time taken by \TeX{} to run the \meta{code} once, sets -% \cs{g_benchmark_time_fp} and \cs{g_benchmark_ops_fp}, and calls -% \cs{benchmark_display:}. The \meta{code} is run only once so the -% time may be quite inaccurate for fast code. The -% \cs{benchmark_once_silent:n} function omits the call to -% \cs{benchmark_display:}, while \cs{benchmark_once_in_ops:n} calls -% \cs{benchmark_display_in_ops:} instead. +% Prints to the terminal the time taken by \TeX{} to run the +% \meta{code}, and an estimated number of elementary operations. The +% \meta{code} is run only once so the time may be quite inaccurate for +% fast code. % \end{function} % -% \begin{function}{\benchmark:n, \benchmark_in_ops:n, \benchmark_silent:n} +% \begin{function}{\benchmark:n} % \begin{syntax} % \cs{benchmark:n} \Arg{code} % \end{syntax} -% Measures the time taken by \TeX{} to run the \meta{code}, sets -% \cs{g_benchmark_time_fp} and \cs{g_benchmark_ops_fp}, and calls -% \cs{benchmark_display:}. The \meta{code} may be run many times and -% not within a group, thus code with side-effects may cause problems. -% The \cs{benchmark_silent:n} function omits the call to -% \cs{benchmark_display:}, while \cs{benchmark_in_ops:n} calls -% \cs{benchmark_display_in_ops:} instead. +% Prints to the terminal the time taken by \TeX{} to run the +% \meta{code}, and an estimated number of elementary operations. The +% \meta{code} may be run many times and not within a group, thus code +% with side-effects may cause problems. % \end{function} % % \begin{function}{\benchmark_tic:, \benchmark_toc:} @@ -130,8 +108,8 @@ % tic/toc commands can be used instead to time between two points in % the code. When executed, \cs{benchmark_tic:} will print a line to the % terminal, and \cs{benchmark_toc:} will print a matching line with a -% time to indicate the duration between them in seconds. Note that -% these commands can be nested. +% time to indicate the duration between them in seconds. +% These commands can be nested. % \end{function} % % \end{documentation} @@ -148,7 +126,7 @@ % % \begin{macrocode} %<*package> -\ProvidesExplPackage{l3benchmark}{2018-10-31}{} +\ProvidesExplPackage{l3benchmark}{2018-11-19}{} {L3 Experimental benchmarking} %</package> % \end{macrocode} @@ -163,8 +141,7 @@ % \begin{macro}[EXP,pTF]{\sys_if_timer_exist:} % In \LuaTeX{}, use emulation (see \pkg{l3luatex}), % otherwise try to locate the primitive. The -% elapsed time will be available if this succeeds or if unrestricted -% shell escape is available. +% elapsed time will be available if this succeeds. % \begin{macrocode} \sys_if_engine_luatex:TF { @@ -228,97 +205,35 @@ %<@@=benchmark> % \end{macrocode} % -% \begin{variable}{\g_benchmark_time_fp, \g_benchmark_ops_fp} -% Functions such as \cs{benchmark:n} store the measured time in -% \cs{g_benchmark_time_fp} (in seconds) and the estimated number of -% operations in \cs{g_benchmark_ops_fp}. +% \begin{variable}{\g_benchmark_duration_target_fp} +% The benchmark is constrained to take roughly (from half to twice) +% \cs{g_benchmark_duration_target_fp} seconds, unless one iteration of +% the code takes longer. % \begin{macrocode} -\fp_new:N \g_benchmark_time_fp -\fp_new:N \g_benchmark_ops_fp +\fp_new:N \g_benchmark_duration_target_fp +\fp_gset:Nn \g_benchmark_duration_target_fp { 1 } % \end{macrocode} % \end{variable} % -% \begin{macro}{\benchmark_display:, \benchmark_display_in_ops:} -% Function to display the time that was measured or the estimated -% number of operations. This can be redefined by the user. -% \begin{macrocode} -\cs_new_protected:Npn \benchmark_display: - { \iow_term:x { \fp_to_tl:N \g_benchmark_time_fp \c_space_tl seconds } } -\cs_new_protected:Npn \benchmark_display_in_ops: - { - \iow_term:x - { - \fp_compare:nTF { \g_benchmark_ops_fp > 1e9 } - { \fp_to_tl:n { \g_benchmark_ops_fp * 1e-9 } ~ G~ops } - { - \fp_compare:nTF { \g_benchmark_ops_fp > 1e6 } - { \fp_to_tl:n { \g_benchmark_ops_fp * 1e-6 } ~ M~ops } - { - \fp_compare:nTF { \g_benchmark_ops_fp > 1e3 } - { \fp_to_tl:n { \g_benchmark_ops_fp * 1e-3 } ~ K~ops } - { \fp_to_tl:n { \g_benchmark_ops_fp } ~ ops } - } - } - } - } -% \end{macrocode} -% \end{macro} -% +% Having access to the system time is essential. % \begin{macrocode} \sys_if_timer_exist:F { - \msg_new:nnnn { benchmark } { no-time } - { The~l3benchmark~package~failed~to~access~a~clock. } - { The~current~engine~provides~no~way~to~access~the~system~time. } + \fp_gset:Nn \g_benchmark_duration_target_fp { nan } \cs_new_protected:Npn \benchmark_once:n #1 { \msg_error:nn { benchmark } { no-time } } - \cs_new_protected:Npn \benchmark_once_in_ops:n #1 - { \msg_error:nn { benchmark } { no-time } } - \cs_new_protected:Npn \benchmark_once_silent:n #1 + \cs_new_eq:NN \benchmark:n \benchmark_once:n + \cs_new_protected:Npn \benchmark_tic: { \msg_error:nn { benchmark } { no-time } } - \cs_new_protected:Npn \benchmark:n #1 - { \msg_error:nn { benchmark } { no-time } } - \cs_new_protected:Npn \benchmark_in_ops:n #1 - { \msg_error:nn { benchmark } { no-time } } - \cs_new_protected:Npn \benchmark_silent:n #1 - { \msg_error:nn { benchmark } { no-time } } - \fp_gset:Nn \g_benchmark_time_fp { nan } - \fp_gset:Nn \g_benchmark_ops_fp { nan } + \cs_new_eq:NN \benchmark_toc: \benchmark_tic: + \msg_new:nnnn { benchmark } { no-time } + { The~l3benchmark~package~failed~to~access~a~clock. } + { The~current~engine~provides~no~way~to~access~the~system~time. } \msg_critical:nn { benchmark } { no-time } } % \end{macrocode} % -% \begin{variable}{\g_benchmark_duration_target_fp, \g_@@_duration_int} -% The benchmark is constrained to take roughly (from half to twice) -% \cs{g_benchmark_duration_target_fp} seconds, more precisely -% \cs{g_@@_duration_int} scaled seconds, unless one iteration of the -% code takes longer. -% \begin{macrocode} -\fp_new:N \g_benchmark_duration_target_fp -\fp_gset:Nn \g_benchmark_duration_target_fp { 1 } -\int_new:N \g_@@_duration_int -% \end{macrocode} -% \end{variable} -% -% \begin{variable}{\g_@@_time_int, \g_@@_time_a_int, \g_@@_time_b_int, \g_@@_time_c_int, \g_@@_time_d_int} -% These variables hold the time for running a piece of code, as an -% integer in scaled seconds. -% \begin{macrocode} -\int_new:N \g_@@_time_int -\int_new:N \g_@@_time_a_int -\int_new:N \g_@@_time_b_int -\int_new:N \g_@@_time_c_int -\int_new:N \g_@@_time_d_int -% \end{macrocode} -% \end{variable} -% -% \begin{variable}{\g_@@_repeat_int} -% Holds the number of times that the piece of code was -% repeated when timing. -% \begin{macrocode} -\int_new:N \g_@@_repeat_int -% \end{macrocode} -% \end{variable} +% \subsubsection{Raw measurement} % % \begin{variable}{\g_@@_nesting_int} % \begin{macro}{\@@_raw:nN, \@@_raw_aux:N, \@@_raw_end:N} @@ -401,74 +316,115 @@ % \end{macrocode} % \end{macro} % -% \begin{macro}{\benchmark:n, \benchmark_silent:n} -% The main timing function. First time the user code once. If that -% took more than a third of a second we're done. If that took much -% less than a second, quadruple the number of copies until it takes a -% reasonable amount of time (this is to avoid division by a possibly -% zero time). Once we reach a reasonable time, compute a number of -% times that can fit in one quarter of a second and measure that four -% times. To save time we reuse the result of the first pass if -% \cs{g_@@_repeat_int} is one. Once we have four results, find the smallest, -% divided by $65536$ and by the number of repetitions, and display that. +% \subsubsection{Main benchmarking} +% +% \begin{variable}{\g_@@_time_fp, \g_@@_ops_fp} +% Functions such as \cs{benchmark:n} store the measured time in +% \cs{g_@@_time_fp} (in seconds) and the estimated number of +% operations in \cs{g_@@_ops_fp}. +% \begin{macrocode} +\fp_new:N \g_@@_time_fp +\fp_new:N \g_@@_ops_fp +% \end{macrocode} +% \end{variable} +% +% \begin{variable}{\g_@@_duration_int} +% A conversion of \cs{g_benchmark_duration_target_fp} seconds into scaled seconds. +% \begin{macrocode} +\int_new:N \g_@@_duration_int +% \end{macrocode} +% \end{variable} +% +% \begin{variable}{\g_@@_time_int, \g_@@_time_a_int, \g_@@_time_b_int, \g_@@_time_c_int, \g_@@_time_d_int} +% These variables hold the time for running a piece of code, as an +% integer in scaled seconds. +% \begin{macrocode} +\int_new:N \g_@@_time_int +\int_new:N \g_@@_time_a_int +\int_new:N \g_@@_time_b_int +\int_new:N \g_@@_time_c_int +\int_new:N \g_@@_time_d_int +% \end{macrocode} +% \end{variable} +% +% \begin{variable}{\g_@@_repeat_int} +% Holds the number of times that the piece of code was +% repeated when timing. +% \begin{macrocode} +\int_new:N \g_@@_repeat_int +% \end{macrocode} +% \end{variable} +% +% \begin{variable}{\g_@@_code_tl} +% Holds the piece of code to repeat. % \begin{macrocode} -\fp_new:N \g_@@_one_op_fp \tl_new:N \g_@@_code_tl -\cs_new_protected:Npn \benchmark:n #1 - { \benchmark_silent:n {#1} \benchmark_display: } -\cs_new_protected:Npn \benchmark_in_ops:n #1 - { \benchmark_silent:n {#1} \benchmark_display_in_ops: } -\cs_new_protected:Npn \@@_measure_op: +% \end{macrocode} +% \end{variable} +% +% \begin{macro}{\benchmark_once:n} +% Convert the raw time from scaled seconds to seconds, and convert to +% a number of operations. It is important to measure the elementary +% operation before running the user code because both measurements use +% the same temporary variables. +% \begin{macrocode} +\cs_new_protected:Npn \benchmark_once:n #1 { - \int_gset:Nn \g_@@_duration_int { 256 } - \tl_gset:Nn \g_@@_code_tl - { \int_gset:Nn \g_@@_duration_int { 256 } } % arbitrary single operation - \@@_aux: - \fp_gset_eq:NN \g_@@_one_op_fp \g_benchmark_time_fp - \fp_compare:nNnT \g_@@_one_op_fp < { 1e-6 } - { \fp_gset:Nn \g_@@_one_op_fp { 1e-6 } } + \@@_measure_op: + \@@_raw:nN {#1} \g_@@_time_int + \fp_gset:Nn \g_@@_time_fp { \g_@@_time_int / 65536 } + \@@_display: } -\cs_new_protected:Npn \benchmark_silent:n #1 +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\benchmark:n} +% After setting up some variables the work is done by \cs{@@_aux:}. +% \begin{macrocode} +\cs_new_protected:Npn \benchmark:n #1 { \@@_measure_op: - \int_gset:Nn \g_@@_duration_int - { \fp_to_int:n { 65536 * \g_benchmark_duration_target_fp } } \tl_gset:Nn \g_@@_code_tl {#1} \@@_aux: - \fp_gset:Nn \g_benchmark_ops_fp - { \g_benchmark_time_fp / \g_@@_one_op_fp } + \@@_display: } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_aux:} +% The main timing function. First time the user code once. If that +% took more than half the allotted time (\cs{g_@@_duration_int}) we're +% done. If that took much less, repeatedly quadruple the number of +% copies until it takes a reasonable amount of time. Once we reach a +% reasonable time (or we risk an overflow), compute a number of times +% that can fit in one quarter of the allotted time and measure that +% four times. To save time we reuse the result of the first pass if +% \cs{g_@@_repeat_int} is one. Once we have four results, find the +% smallest, divided by $65536$ and by the number of repetitions, and +% display that. +% \begin{macrocode} \cs_new_protected:Npn \@@_aux: { \int_gset:Nn \g_@@_repeat_int { 1 } \@@_raw:nN { \g_@@_code_tl } \g_@@_time_int \int_compare:nNnF \g_@@_time_int < { \g_@@_duration_int / 2 } + { \prg_break: } + \bool_until_do:nn { - \int_gset_eq:NN \g_@@_time_a_int \g_@@_time_int - \int_gset_eq:NN \g_@@_time_b_int \g_@@_time_int - \int_gset_eq:NN \g_@@_time_c_int \g_@@_time_int - \int_gset_eq:NN \g_@@_time_d_int \g_@@_time_int - \prg_break: + \int_compare_p:nNn \g_@@_time_int > { \g_@@_duration_int / 32 } + || \int_compare_p:nNn \g_@@_repeat_int > { \c_max_int / 4 } } - \int_while_do:nNnn \g_@@_time_int < { \g_@@_duration_int / 100 } { - \int_compare:nNnT \g_@@_repeat_int > { \c_max_int / 4 } - { - \int_gzero:N \g_@@_time_a_int - \int_gzero:N \g_@@_time_b_int - \int_gzero:N \g_@@_time_c_int - \int_gzero:N \g_@@_time_d_int - \prg_break: - } \int_gset:Nn \g_@@_repeat_int { 4 * \g_@@_repeat_int } \@@_run:N \g_@@_time_int } \int_gset:Nn \g_@@_repeat_int { - \int_max:nn { 1 } + \fp_to_int:n { - \g_@@_duration_int * \g_@@_repeat_int - / ( \g_@@_time_int * 4 ) + max ( 1 , min ( \c_max_int , + \g_@@_duration_int * \g_@@_repeat_int / + \int_eval:n { 4 * \g_@@_time_int } ) ) } } \int_compare:nNnTF \g_@@_repeat_int = 1 @@ -477,67 +433,112 @@ \@@_run:N \g_@@_time_b_int \@@_run:N \g_@@_time_c_int \@@_run:N \g_@@_time_d_int - \prg_break_point: - \fp_gset:Nn \g_benchmark_time_fp + \int_gset:Nn \g_@@_time_int { \int_min:nn { \int_min:nn \g_@@_time_a_int \g_@@_time_b_int } { \int_min:nn \g_@@_time_c_int \g_@@_time_d_int } - / \g_@@_repeat_int / 65536 } + \prg_break_point: + \int_compare:nNnT \g_@@_time_int < 3 { \int_gzero:N \g_@@_time_int } + \fp_gset:Nn \g_@@_time_fp + { \g_@@_time_int / \g_@@_repeat_int / 65536 } } \cs_new_protected:Npn \@@_run:N { \exp_args:NNo \@@_raw_replicate:nnN \g_@@_repeat_int { \g_@@_code_tl } } % \end{macrocode} % \end{macro} % -% \begin{macro}{\benchmark_once:n, \benchmark_once_in_ops:n, \benchmark_once_silent:n} -% Convert from scaled seconds to seconds. +% \subsubsection{Display} +% +% \begin{variable}{\g_@@_one_op_fp} +% Time for one operation. % \begin{macrocode} -\cs_new_protected:Npn \benchmark_once:n #1 - { \benchmark_once_silent:n {#1} \benchmark_display: } -\cs_new_protected:Npn \benchmark_once_in_ops:n #1 - { \benchmark_once_silent:n {#1} \benchmark_display_in_ops: } -\cs_new_protected:Npn \benchmark_once_silent:n #1 +\fp_new:N \g_@@_one_op_fp +% \end{macrocode} +% \end{variable} +% +% \begin{macro}{\@@_measure_op:} +% Measure one arbitrary single operation (which we put in \cs{g_@@_code_tl}). +% This uses a common auxiliary \cs{@@_aux:} with the main benchmark function. +% \begin{macrocode} +\cs_new_protected:Npn \@@_measure_op: { - \@@_measure_op: - \@@_raw:nN {#1} \g_@@_time_int - \fp_gset:Nn \g_benchmark_time_fp { \g_@@_time_int / 65536 } - \fp_gset:Nn \g_benchmark_ops_fp - { \g_benchmark_time_fp / \g_@@_one_op_fp } + \int_gset:Nn \g_@@_duration_int + { \fp_to_int:n { 65536 * \g_benchmark_duration_target_fp } / 4 } + \tl_gset:Nn \g_@@_code_tl + { \int_gadd:Nn \g_@@_duration_int { 0 } } + \@@_aux: + \fp_gset:Nn \g_@@_one_op_fp { max(\g_@@_time_fp, 1e-16) } + \int_gset:Nn \g_@@_duration_int + { \fp_to_int:n { 65536 * \g_benchmark_duration_target_fp } } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_fp_to_tl:N, \@@_fp_to_tl_aux:nN} +% Similar to \cs{fp_to_tl:N} but rounds to $3$ significant digits and +% uses scientific notation starting from |1e3|. +% \begin{macrocode} +\cs_new:Npn \@@_fp_to_tl:N #1 + { + \fp_compare:nTF { abs(#1) < 1000 } + { \fp_to_tl:n { round(#1, 2 - logb(#1)) } } + { + \exp_args:Nf \@@_fp_to_tl_aux:nN + { \fp_to_int:n { logb(#1) } } #1 + } + } +\cs_new:Npn \@@_fp_to_tl_aux:nN #1#2 + { \fp_to_tl:n { round(#2 * 1e-#1, 2) } e#1 } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\@@_display:} +% Function to display the time that was measured and the estimated +% number of operations. +% \begin{macrocode} +\cs_new_protected:Npn \@@_display: + { + \fp_gset:Nn \g_@@_ops_fp { \g_@@_time_fp / \g_@@_one_op_fp } + \iow_term:x + { + \@@_fp_to_tl:N \g_@@_time_fp \c_space_tl seconds \c_space_tl + ( \@@_fp_to_tl:N \g_@@_ops_fp \c_space_tl ops) + } } % \end{macrocode} % \end{macro} % % \subsection{Benchmark tic toc} % -% \begin{variable}{\g_@@_tictoc_int, \g_@@_tictoc_seq} +% \begin{variable}{\g_@@_tictoc_int, \g_@@_tictoc_seq, \l_@@_tictoc_pop_tl} % \begin{macrocode} \int_new:N \g_@@_tictoc_int \seq_new:N \g_@@_tictoc_seq +\tl_new:N \l_@@_tictoc_pop_tl % \end{macrocode} % \end{variable} % -% \begin{macro}{\benchmark_tic:, \@@_tic:} +% \begin{macro}[EXP]{\@@_tictoc_prefix:} +% We include the package name in analogy with continuation lines of +% error/warning messages. % \begin{macrocode} -\cs_new_protected:Npn \benchmark_tic: +\cs_new:Npn \@@_tictoc_prefix: { - \int_compare:nTF { \g_@@_tictoc_int == 0 } - { - \sys_gzero_timer: - \@@_tic: - } - { \@@_tic: } + (l3benchmark) \c_space_tl + + \prg_replicate:nn { \g_@@_tictoc_int } { -+ } \c_space_tl } -\cs_new_protected:Npn \@@_tic: +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\benchmark_tic:} +% \begin{macrocode} +\cs_new_protected:Npn \benchmark_tic: { - \exp_args:NNf \seq_put_right:Nn \g_@@_tictoc_seq { \sys_timer: } + \iow_term:x { \@@_tictoc_prefix: TIC } + \exp_args:NNf \seq_gput_right:Nn \g_@@_tictoc_seq { \sys_timer: } \int_gincr:N \g_@@_tictoc_int - \iow_term:x - { - \prg_replicate:nn {\g_@@_tictoc_int} {---+} \space - TIC - } } % \end{macrocode} % \end{macro} @@ -546,30 +547,26 @@ % \begin{macrocode} \cs_new:Npn \benchmark_toc: { - \int_compare:nT { \g_@@_tictoc_int == 0 } - { \msg_error:nn {benchmark} {toc-first} } - \seq_pop_right:NN \g_@@_tictoc_seq \l_@@_tictoc_pop_tl - \@@_toc: + \seq_gpop_right:NNTF \g_@@_tictoc_seq \l_@@_tictoc_pop_tl + { \@@_toc: } + { \msg_error:nn { benchmark } { toc-first } } } \cs_new_protected:Npn \@@_toc: { - \tl_set:Nx \l_@@_tictoc_tl - { - \fp_to_decimal:n - { round( ( \sys_timer: - \l_@@_tictoc_pop_tl) / 65536 , 3 ) } - } + \int_gdecr:N \g_@@_tictoc_int + \fp_gset:Nn \g_@@_time_fp + { ( \sys_timer: - \l_@@_tictoc_pop_tl ) / 65536 } \iow_term:x { - \prg_replicate:nn {\g_@@_tictoc_int} {---+} \c_space_tl + \@@_tictoc_prefix: TOC: \c_space_tl - \l_@@_tictoc_tl \c_space_tl s + \@@_fp_to_tl:N \g_@@_time_fp \c_space_tl s } - \int_gdecr:N \g_@@_tictoc_int } -\msg_new:nnn {benchmark} {toc-first} +\msg_new:nnn { benchmark } { toc-first } { - \token_to_str:N \benchmark_toc: \space without~ - \token_to_str:N \benchmark_tic: \space ! + \token_to_str:N \benchmark_toc: \c_space_tl without~ + \token_to_str:N \benchmark_tic: \c_space_tl ! } % \end{macrocode} % \end{macro} diff --git a/Master/texmf-dist/source/latex/l3experimental/l3cctab/l3cctab.dtx b/Master/texmf-dist/source/latex/l3experimental/l3cctab/l3cctab.dtx index 5c1db2f6aaa..7e0820f8b7b 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3cctab/l3cctab.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3cctab/l3cctab.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2018-10-31} +% \date{Released 2018-11-19} % % \maketitle % @@ -148,7 +148,7 @@ % % \begin{macrocode} %<*package> -\ProvidesExplPackage{l3cctab}{2018-10-31}{} +\ProvidesExplPackage{l3cctab}{2018-11-19}{} {L3 Experimental category code tables} %</package> % \end{macrocode} @@ -160,10 +160,8 @@ % tables need to be followed. There is also a sequence stack for the % dynamic tables themselves. % \begin{macrocode} -%<*initex> \int_new:N \g_@@_allocate_int \int_gset:Nn \g_@@_allocate_int { -1 } -%</initex> \int_new:N \g_@@_stack_int \seq_new:N \g_@@_stack_seq % \end{macrocode} @@ -219,7 +217,6 @@ %</initex> %<*package> \newcatcodetable #1 - \tex_initcatcodetable:D #1 %</package> } % \end{macrocode} @@ -268,21 +265,29 @@ % \begin{macrocode} { \cs_new_protected:Npn \@@_gstore:Nnn #1#2#3 - { \intarray_gset:Nnn #1 { #2 + 1 } {#3} } + { + \intarray_gset:cnn + { g_@@_ \int_use:N #1 _cctab } { #2 + 1 } {#3} + } % \end{macrocode} % Following the \LuaTeX{} pattern, a new table starts with \IniTeX{} codes. % \begin{macrocode} \cs_new_protected:Npn \cctab_new:N #1 { - \intarray_new:Nn #1 { 256 } + \int_gadd:Nn \g_@@_allocate_int { 1 } + \int_const:Nn #1 { \g_@@_allocate_int } + \intarray_new:cn { g_@@_ \int_use:N #1 _cctab } { 256 } \int_step_inline:nn { 256 } - { \intarray_gset:Nnn #1 {##1} { 12 } } + { + \intarray_gset:cnn + { g_@@_ \int_use:N #1 _cctab } {##1} { 12 } + } \@@_gstore:Nnn #1 { 0 } { 9 } \@@_gstore:Nnn #1 { 13 } { 5 } \@@_gstore:Nnn #1 { 32 } { 10 } \@@_gstore:Nnn #1 { 37 } { 14 } - \int_step_inline:nnn { 65 } { 90 } - { \intarray_gset:Nnn #1 {##1} { 11 } } + \int_step_inline:nnn { 64 } { 89 } + { \@@_gstore:Nnn #1 {##1} { 11 } } \@@_gstore:Nnn #1 { 92 } { 0 } \int_step_inline:nnn { 97 } { 122 } { \@@_gstore:Nnn #1 {##1} { 11 } } @@ -309,7 +314,10 @@ \int_step_inline:nn { 256 } { \char_set_catcode:nn { ##1 - 1 } - { \intarray_item:Nn #1 {##1} } + { + \intarray_item:cn + { g_@@_ \int_use:N #1 _cctab } {##1} + } } } \cs_generate_variant:Nn \intarray_new:Nn { c } @@ -334,7 +342,7 @@ #2 \int_step_inline:nn { 256 } { - \intarray_gset:Nnn #1 {##1} + \intarray_gset:cnn { g_@@_ \int_use:N #1 _cctab } {##1} { \char_value_catcode:n { ##1 - 1 } } } \group_end: @@ -346,27 +354,19 @@ % \end{macro} % \end{macro} % -% \begin{variable}{\g_@@_tmp_cctab} -% Scratch space. -% \begin{macrocode} -\cctab_new:N \g_@@_tmp_cctab -% \end{macrocode} -% \end{variable} -% % \begin{macro}{\cctab_const:Nn} -% Creating constant tables is a bit tricky: we do it in a two part -% fashion via a temporary one. % \begin{macrocode} \cs_new_protected:Npn \cctab_const:Nn #1#2 { - \cctab_gset:Nn \g_@@_tmp_cctab {#2} - \cs_new_eq:NN #1 \g_@@_tmp_cctab + \cctab_new:N #1 + \cctab_gset:Nn #1 {#2} } % \end{macrocode} % \end{macro} % % \begin{variable} % { +% \c_initex_cctab , % \c_code_cctab , % \c_document_cctab , % \c_initex_cctab , diff --git a/Master/texmf-dist/source/latex/l3experimental/l3color/l3color.dtx b/Master/texmf-dist/source/latex/l3experimental/l3color/l3color.dtx index 1e7f5813f19..111018bb5c8 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3color/l3color.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3color/l3color.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2018-10-31} +% \date{Released 2018-11-19} % % \maketitle % @@ -263,7 +263,7 @@ % % \begin{macrocode} %<*package> -\ProvidesExplPackage{l3color}{2018-10-31}{} +\ProvidesExplPackage{l3color}{2018-11-19}{} {L3 Experimental color support} %</package> % \end{macrocode} 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 0326066f004..e450d0c4d4e 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-boxes.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-boxes.dtx @@ -42,7 +42,7 @@ % }^^A % } % -% \date{Released 2018-10-31} +% \date{Released 2018-11-19} % % \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 4d1c56c9fd9..240d131af41 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-paths.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-paths.dtx @@ -42,7 +42,7 @@ % }^^A % } % -% \date{Released 2018-10-31} +% \date{Released 2018-11-19} % % \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 2d51e741836..186f4a4a334 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-points.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-points.dtx @@ -42,7 +42,7 @@ % }^^A % } % -% \date{Released 2018-10-31} +% \date{Released 2018-11-19} % % \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 ceda4c7632d..8d2b93093ad 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-scopes.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-scopes.dtx @@ -42,7 +42,7 @@ % }^^A % } % -% \date{Released 2018-10-31} +% \date{Released 2018-11-19} % % \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 4b0041524c2..99da2d119e4 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-softpath.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-softpath.dtx @@ -42,7 +42,7 @@ % }^^A % } % -% \date{Released 2018-10-31} +% \date{Released 2018-11-19} % % \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 ca7a83fbc78..8f1276e5450 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-state.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-state.dtx @@ -42,7 +42,7 @@ % }^^A % } % -% \date{Released 2018-10-31} +% \date{Released 2018-11-19} % % \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 f61d6a70572..2fba1a421fa 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-transforms.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-transforms.dtx @@ -42,7 +42,7 @@ % }^^A % } % -% \date{Released 2018-10-31} +% \date{Released 2018-11-19} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw.dtx b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw.dtx index 53c6e8c42e6..a409de15881 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw.dtx @@ -109,7 +109,7 @@ % }^^A % } % -% \date{Released 2018-10-31} +% \date{Released 2018-11-19} % % \maketitle % @@ -1106,7 +1106,7 @@ % % \begin{macrocode} %<*package> -\ProvidesExplPackage{l3draw}{2018-10-31}{} +\ProvidesExplPackage{l3draw}{2018-11-19}{} {L3 Experimental core drawing support} %</package> % \end{macrocode} 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 6d33d93bf0d..c26e6eaf82b 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-convert.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-convert.dtx @@ -46,7 +46,7 @@ % }^^A % } % -% \date{Released 2018-10-31} +% \date{Released 2018-11-19} % % \maketitle % @@ -234,7 +234,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{l3str-convert}{2018-10-31}{} +\ProvidesExplPackage{l3str-convert}{2018-11-19}{} {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 45dd7c24f8d..bdd0426712d 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-format.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-format.dtx @@ -46,7 +46,7 @@ % }^^A % } % -% \date{Released 2018-10-31} +% \date{Released 2018-11-19} % % \maketitle % @@ -162,7 +162,7 @@ % % \begin{macrocode} %<*package> -\ProvidesExplPackage{l3str-format}{2018-10-31}{} +\ProvidesExplPackage{l3str-format}{2018-11-19}{} {L3 Experimental string formatting} %</package> % \end{macrocode} 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 606b372e71e..a1b7af274ba 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 @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2018-10-31} +% \date{Released 2018-11-19} % % \maketitle % @@ -134,7 +134,7 @@ % % \begin{macrocode} %<*package> -\ProvidesExplPackage{l3sys-shell}{2018-10-31}{} +\ProvidesExplPackage{l3sys-shell}{2018-11-19}{} {L3 Experimental system shell functions} %</package> % \end{macrocode} diff --git a/Master/texmf-dist/source/latex/l3experimental/xcoffins/xcoffins.dtx b/Master/texmf-dist/source/latex/l3experimental/xcoffins/xcoffins.dtx index e2c14dbe332..4c2a45bdd69 100644 --- a/Master/texmf-dist/source/latex/l3experimental/xcoffins/xcoffins.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/xcoffins/xcoffins.dtx @@ -54,7 +54,7 @@ % }^^A % } % -% \date{Released 2018-10-31} +% \date{Released 2018-11-19} % % \maketitle % @@ -673,7 +673,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{xcoffins}{2018-10-31}{} +\ProvidesExplPackage{xcoffins}{2018-11-19}{} {L3 Experimental design level coffins} % \end{macrocode} % diff --git a/Master/texmf-dist/source/latex/l3experimental/xgalley/l3galley.dtx b/Master/texmf-dist/source/latex/l3experimental/xgalley/l3galley.dtx index 9369c668d02..7ff6508cbb7 100644 --- a/Master/texmf-dist/source/latex/l3experimental/xgalley/l3galley.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/xgalley/l3galley.dtx @@ -59,7 +59,7 @@ % }^^A % } % -% \date{Released 2018-10-31} +% \date{Released 2018-11-19} % % \maketitle % @@ -685,7 +685,7 @@ % % \begin{macrocode} %<*package> -\ProvidesExplPackage{l3galley}{2018-10-31}{} +\ProvidesExplPackage{l3galley}{2018-11-19}{} {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 a92b0be9698..92368b98a7e 100644 --- a/Master/texmf-dist/source/latex/l3experimental/xgalley/xgalley.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/xgalley/xgalley.dtx @@ -45,7 +45,7 @@ % }^^A % } % -% \date{Released 2018-10-31} +% \date{Released 2018-11-19} % % \maketitle % @@ -732,7 +732,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{xgalley}{2018-10-31}{} +\ProvidesExplPackage{xgalley}{2018-11-19}{} {L3 Experimental galley} \RequirePackage{xparse,xtemplate,l3galley} % \end{macrocode} diff --git a/Master/texmf-dist/source/latex/l3kernel/expl3.dtx b/Master/texmf-dist/source/latex/l3kernel/expl3.dtx index 70989f1950a..7d772133088 100644 --- a/Master/texmf-dist/source/latex/l3kernel/expl3.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/expl3.dtx @@ -21,7 +21,7 @@ % for those people who are interested. % %<*driver|generic|package> -\def\ExplFileDate{2018-10-31}% +\def\ExplFileDate{2018-11-19}% %</driver|generic|package> %<*driver> \documentclass[full]{l3doc} @@ -49,7 +49,7 @@ % }^^A % } % -% \date{Released 2018-10-31} +% \date{Released 2018-11-19} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3alloc.dtx b/Master/texmf-dist/source/latex/l3kernel/l3alloc.dtx index 80a0b4b7eb8..a00f377a36e 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3alloc.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3alloc.dtx @@ -41,7 +41,7 @@ % }^^A % } % -% \date{Released 2018-10-31} +% \date{Released 2018-11-19} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx b/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx index d642eea647a..b3e9db2852e 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx @@ -41,7 +41,7 @@ % }^^A % } % -% \date{Released 2018-10-31} +% \date{Released 2018-11-19} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx b/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx index 1a22e982d00..658e811554d 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx @@ -138,7 +138,7 @@ % }^^A % } % -% \date{Released 2018-10-31} +% \date{Released 2018-11-19} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3box.dtx b/Master/texmf-dist/source/latex/l3kernel/l3box.dtx index 6a5e87b7c6c..d02d4dd1fbe 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3box.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3box.dtx @@ -41,7 +41,7 @@ % }^^A % } % -% \date{Released 2018-10-31} +% \date{Released 2018-11-19} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx b/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx index f37e0317c9e..4c1c05e531a 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx @@ -42,7 +42,7 @@ % }^^A % } % -% \date{Released 2018-10-31} +% \date{Released 2018-11-19} % % \maketitle % @@ -269,6 +269,33 @@ % applicable. % \end{function} % +% \section{Additions to \pkg{l3fp}} +% +% \begin{function}[EXP, added = 2018-11-03]{logb} +% \begin{syntax} +% \cs{fp_eval:n} \{ |logb(| \meta{fpexpr} |)| \} +% \end{syntax} +% Determines the exponent of the \meta{fpexpr}, namely the floor of +% the base-$10$ logarithm of its absolute value. \enquote{Division by +% zero} occurs when evaluating $\operatorname{logb}(\pm 0) = -\infty$. +% Other special values are $\operatorname{logb}(\pm\infty)=+\infty$ +% and $\operatorname{logb}(\nan{})=\nan{}$. If the operand is a tuple +% or is \nan{}, then \enquote{invalid operation} occurs and the result +% is \nan{}. +% \end{function} +% +% \begin{function}[EXP, added = 2018-11-03]{\fp_sign:n} +% \begin{syntax} +% \cs{fp_sign:n} \Arg{fpexpr} +% \end{syntax} +% Evaluates the \meta{fpexpr} and leaves its sign in the input stream +% using \cs{fp_eval:n} |{sign(|\meta{result}|)}|: $+1$ for positive +% numbers and for $+\infty$, $-1$ for negative numbers and for +% $-\infty$, $\pm 0$ for $\pm 0$. If the operand is a tuple or is +% \nan{}, then \enquote{invalid operation} occurs and the result +% is~$0$. +% \end{function} +% % \section{Additions to \pkg{l3fparray}} % % \begin{function}[added = 2018-05-05]{\fparray_new:Nn} @@ -421,6 +448,14 @@ % This is not yet available in \XeTeX{}. % \end{function} % +% \begin{function}[EXP, added = 2018-11-03]{\int_sign:n} +% \begin{syntax} +% \cs{int_sign:n} \Arg{intexpr} +% \end{syntax} +% Evaluates the \meta{integer expression} then leaves $1$ or $0$ or +% $-1$ in the input stream according to the sign of the result. +% \end{function} +% % \section{Additions to \pkg{l3intarray}} % % \begin{function}[EXP, added = 2018-05-05]{\intarray_rand_item:N} @@ -819,6 +854,14 @@ % % \section{Additions to \pkg{l3skip}} % +% \begin{function}[EXP, added = 2018-11-03]{\dim_sign:n} +% \begin{syntax} +% \cs{dim_sign:n} \Arg{dimexpr} +% \end{syntax} +% Evaluates the \meta{dimexpr} then leaves $1$ or $0$ or $-1$ in the +% input stream according to the sign of the result. +% \end{function} +% % \begin{function}{\skip_split_finite_else_action:nnNN} % \begin{syntax} % \cs{skip_split_finite_else_action:nnNN} \Arg{skipexpr} \Arg{action} @@ -2178,6 +2221,22 @@ % \end{macro} % \end{macro} % +% \subsection{Additions to \pkg{l3fp-convert}} +% +% \begin{macrocode} +%<@@=fp> +% \end{macrocode} +% +% \begin{macro}{\fp_sign:n} +% Trivial but useful. See the implementation of \cs{fp_add:Nn} for an +% explanation of why to use \cs{@@_parse:n}, namely, for better error +% reporting. +% \begin{macrocode} +\cs_new:Npn \fp_sign:n #1 + { \fp_to_decimal:n { sign \@@_parse:n {#1} } } +% \end{macrocode} +% \end{macro} +% % \subsection{Additions to \pkg{l3file}} % % \begin{macrocode} @@ -2310,6 +2369,39 @@ % \subsection{Additions to \pkg{l3msg}} % % \begin{macrocode} +%<@@=int> +% \end{macrocode} +% +% \begin{macro}[EXP]{\int_sign:n, \@@_sign:Nw} +% See \cs{int_abs:n}. Evaluate the expression once (and when +% debugging is enabled, check that the expression is well-formed), +% then test the first character to determine the sign. This is +% wrapped in \cs{int_value:w} \ldots{} \cs{exp_stop_f:} to ensure a +% fixed number of expansions and to avoid dealing with closing the +% conditionals. +% \begin{macrocode} +\__kernel_patch_args:nNNpn + { { \__kernel_chk_expr:nNnN {#1} \@@_eval:w { } \int_sign:n } } +\cs_new:Npn \int_sign:n #1 + { + \int_value:w \exp_after:wN \@@_sign:Nw + \int_value:w \@@_eval:w #1 \@@_eval_end: ; + \exp_stop_f: + } +\cs_new:Npn \@@_sign:Nw #1#2 ; + { + \if_meaning:w 0 #1 + 0 + \else: + \if_meaning:w - #1 - \fi: 1 + \fi: + } +% \end{macrocode} +% \end{macro} +% +% \subsection{Additions to \pkg{l3msg}} +% +% \begin{macrocode} %<@@=msg> % \end{macrocode} % @@ -2786,6 +2878,40 @@ % \subsection{Additions to \pkg{l3skip}} % % \begin{macrocode} +%<@@=dim> +% \end{macrocode} +% +% \begin{macro}[EXP]{\dim_sign:n, \@@_sign:Nw} +% See \cs{dim_abs:n}. Contrarily to \cs{int_sign:n} the case of a +% zero dimension cannot be distinguished from a positive dimension by +% looking only at the first character, since |0.2pt| and |0pt| start +% the same way. We need explicit comparisons. We start by +% distinguishing the most common case of a positive dimension. +% \begin{macrocode} +\__kernel_patch_args:nNNpn + { { \__kernel_chk_expr:nNnN {#1} \@@_eval:w { } \dim_sign:n } } +\cs_new:Npn \dim_sign:n #1 + { + \int_value:w \exp_after:wN \@@_sign:Nw + \dim_use:N \@@_eval:w #1 \@@_eval_end: ; + \exp_stop_f: + } +\cs_new:Npn \@@_sign:Nw #1#2 ; + { + \if_dim:w #1#2 > \c_zero_dim + 1 + \else: + \if_meaning:w - #1 + -1 + \else: + 0 + \fi: + \fi: + } +% \end{macrocode} +% \end{macro} +% +% \begin{macrocode} %<@@=skip> % \end{macrocode} % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx b/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx index 6ae74ca03d0..7d2f3716d69 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2018-10-31} +% \date{Released 2018-11-19} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx b/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx index 6d83e8a028d..de848591d3f 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx @@ -41,7 +41,7 @@ % }^^A % } % -% \date{Released 2018-10-31} +% \date{Released 2018-11-19} % % \maketitle % @@ -745,7 +745,7 @@ { l_@@_poles_ \@@_to_value:N #1 _prop } {#2} #3 { \__kernel_msg_error:nnxx { kernel } { unknown-coffin-pole } - {#2} { \token_to_str:N #1 } + { \exp_not:n {#2} } { \token_to_str:N #1 } \tl_set:Nn #3 { { 0pt } { 0pt } { 0pt } { 0pt } } } } diff --git a/Master/texmf-dist/source/latex/l3kernel/l3color-base.dtx b/Master/texmf-dist/source/latex/l3kernel/l3color-base.dtx index 54cfa159870..0f281c1716f 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3color-base.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3color-base.dtx @@ -41,7 +41,7 @@ % }^^A % } % -% \date{Released 2018-10-31} +% \date{Released 2018-11-19} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx b/Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx index 6ed8c30457a..10f8494a73d 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx @@ -41,7 +41,7 @@ % }^^A % } % -% \date{Released 2018-10-31} +% \date{Released 2018-11-19} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx b/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx index f15ce38fc86..54d7e7e53ba 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx @@ -77,7 +77,7 @@ and all files in that bundle must be distributed together. % % \title{The \cls{l3doc} class} % \author{\Team} -% \date{Released 2018-10-31} +% \date{Released 2018-11-19} % \maketitle % \tableofcontents % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx b/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx index 7f1cb9f03f8..bb1ccdd5780 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx @@ -61,7 +61,7 @@ % }^^A % } % -% \date{Released 2018-10-31} +% \date{Released 2018-11-19} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3drivers.dtx b/Master/texmf-dist/source/latex/l3kernel/l3drivers.dtx index 292692e288c..dcb425ff0df 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3drivers.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3drivers.dtx @@ -41,7 +41,7 @@ % }^^A % } % -% \date{Released 2018-10-31} +% \date{Released 2018-11-19} % % \maketitle % @@ -554,23 +554,23 @@ %<*package> \ProvidesExplFile %<*dvipdfmx> - {l3dvidpfmx.def}{2018-10-31}{} + {l3dvidpfmx.def}{2018-11-19}{} {L3 Experimental driver: dvipdfmx} %</dvipdfmx> %<*dvips> - {l3dvips.def}{2018-10-31}{} + {l3dvips.def}{2018-11-19}{} {L3 Experimental driver: dvips} %</dvips> %<*dvisvgm> - {l3dvisvgm.def}{2018-10-31}{} + {l3dvisvgm.def}{2018-11-19}{} {L3 Experimental driver: dvisvgm} %</dvisvgm> %<*pdfmode> - {l3pdfmode.def}{2018-10-31}{} + {l3pdfmode.def}{2018-11-19}{} {L3 Experimental driver: PDF mode} %</pdfmode> %<*xdvipdfmx> - {l3xdvidpfmx.def}{2018-10-31}{} + {l3xdvidpfmx.def}{2018-11-19}{} {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 299234f8a6d..bfaef8e5e39 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx @@ -41,7 +41,7 @@ % }^^A % } % -% \date{Released 2018-10-31} +% \date{Released 2018-11-19} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3file.dtx b/Master/texmf-dist/source/latex/l3kernel/l3file.dtx index 5b389765f53..3b56f3683ce 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3file.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3file.dtx @@ -42,7 +42,7 @@ % }^^A % } % -% \date{Released 2018-10-31} +% \date{Released 2018-11-19} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3final.dtx b/Master/texmf-dist/source/latex/l3kernel/l3final.dtx index 096af07306b..2009835ab94 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3final.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3final.dtx @@ -41,7 +41,7 @@ % }^^A % } % -% \date{Released 2018-10-31} +% \date{Released 2018-11-19} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3flag.dtx b/Master/texmf-dist/source/latex/l3kernel/l3flag.dtx index 70b47167b52..b82904a3d41 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3flag.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3flag.dtx @@ -41,7 +41,7 @@ % }^^A % } % -% \date{Released 2018-10-31} +% \date{Released 2018-11-19} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx index 6dca2f7770b..c068438024b 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx @@ -38,7 +38,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2018-10-31} +% \date{Released 2018-11-19} % \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 690f68d1b6e..14af2cf597c 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx @@ -41,7 +41,7 @@ % }^^A % } % -% \date{Released 2018-10-31} +% \date{Released 2018-11-19} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx index 4481093d01c..8740c1c7351 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx @@ -38,7 +38,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2018-10-31} +% \date{Released 2018-11-19} % % \maketitle % @@ -73,6 +73,7 @@ % \begin{macro}[EXP] % { % \@@_parse_word_abs:N , +% \@@_parse_word_logb:N , % \@@_parse_word_sign:N , % \@@_parse_word_sqrt:N , % } @@ -80,6 +81,8 @@ % \begin{macrocode} \cs_new:Npn \@@_parse_word_abs:N { \@@_parse_unary_function:NNN \@@_set_sign_o:w 0 } +\cs_new:Npn \@@_parse_word_logb:N + { \@@_parse_unary_function:NNN \@@_logb_o:w ? } \cs_new:Npn \@@_parse_word_sign:N { \@@_parse_unary_function:NNN \@@_sign_o:w ? } \cs_new:Npn \@@_parse_word_sqrt:N @@ -2029,7 +2032,29 @@ % \end{macrocode} % \end{macro} % -% \subsection{About the sign} +% \subsection{About the sign and exponent} +% +% \begin{macro}[EXP]{\@@_logb_o:w, \@@_logb_aux_o:w} +% The exponent of a normal number is its \meta{exponent} minus one. +% \begin{macrocode} +\cs_new:Npn \@@_logb_o:w ? \s_@@ \@@_chk:w #1#2; @ + { + \if_case:w #1 \exp_stop_f: + \@@_case_use:nw + { \@@_division_by_zero_o:Nnw \c_minus_inf_fp { logb } } + \or: \exp_after:wN \@@_logb_aux_o:w + \or: \@@_case_return_o:Nw \c_inf_fp + \else: \@@_case_return_same_o:w + \fi: + \s_@@ \@@_chk:w #1 #2; + } +\cs_new:Npn \@@_logb_aux_o:w \s_@@ \@@_chk:w #1 #2 #3 #4 ; + { + \exp_after:wN \@@_parse:n \exp_after:wN + { \int_value:w \int_eval:w #3 - 1 \exp_after:wN } + } +% \end{macrocode} +% \end{macro} % % \begin{macro}[EXP]{\@@_sign_o:w} % \begin{macro}[EXP]{\@@_sign_aux_o:w} diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx index ba6a1c40310..64db9fe578a 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx @@ -41,7 +41,7 @@ % }^^A % } % -% \date{Released 2018-10-31} +% \date{Released 2018-11-19} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx index 8d337c89905..9347f5cc946 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx @@ -38,7 +38,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2018-10-31} +% \date{Released 2018-11-19} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx index 088d2ef1882..f98aa35ad98 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx @@ -38,7 +38,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2018-10-31} +% \date{Released 2018-11-19} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx index f1810b23934..eacc520f0b4 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx @@ -38,7 +38,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2018-10-31} +% \date{Released 2018-11-19} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx index 10e1b1da3ff..fa5f0fcf8c5 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx @@ -38,7 +38,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2018-10-31} +% \date{Released 2018-11-19} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx index 03bc5df76fe..61f457ae449 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx @@ -38,7 +38,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2018-10-31} +% \date{Released 2018-11-19} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx index 5bd974f8d10..910299e3e67 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx @@ -41,7 +41,7 @@ % }^^A % } % -% \date{Released 2018-10-31} +% \date{Released 2018-11-19} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx index e8c66baabea..84b7ebafc6c 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx @@ -38,7 +38,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2018-10-31} +% \date{Released 2018-11-19} % \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 035bae6b9a6..241fb2d58f9 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-trig.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-trig.dtx @@ -38,7 +38,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2018-10-31} +% \date{Released 2018-11-19} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx index 1d7b72377f4..89cf60d0632 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx @@ -47,7 +47,7 @@ % }^^A % } % -% \date{Released 2018-10-31} +% \date{Released 2018-11-19} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx index fcd8a27d2c3..7ef911cc9ff 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx @@ -42,7 +42,7 @@ % }^^A % } % -% \date{Released 2018-10-31} +% \date{Released 2018-11-19} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3int.dtx b/Master/texmf-dist/source/latex/l3kernel/l3int.dtx index a8a6851ae8c..56fa910a314 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3int.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3int.dtx @@ -41,7 +41,7 @@ % }^^A % } % -% \date{Released 2018-10-31} +% \date{Released 2018-11-19} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx b/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx index 06a819937f0..6879d1c6e06 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx @@ -42,7 +42,7 @@ % }^^A % } % -% \date{Released 2018-10-31} +% \date{Released 2018-11-19} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx b/Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx index 834d0dc4254..efa037242b5 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx @@ -41,7 +41,7 @@ % }^^A % } % -% \date{Released 2018-10-31} +% \date{Released 2018-11-19} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx b/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx index 6e1b148e0f3..030f5660ef5 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx @@ -41,7 +41,7 @@ % }^^A % } % -% \date{Released 2018-10-31} +% \date{Released 2018-11-19} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx b/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx index 82da76ea03f..cdaf498190b 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx @@ -41,7 +41,7 @@ % }^^A % } % -% \date{Released 2018-10-31} +% \date{Released 2018-11-19} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx b/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx index 87c8ad1e870..0b9794dd043 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx @@ -41,7 +41,7 @@ % }^^A % } % -% \date{Released 2018-10-31} +% \date{Released 2018-11-19} % % \maketitle % @@ -891,7 +891,7 @@ % \end{macrocode} % \end{macro} % -% \begin{macro}[EXP]{\msg_moudle_name:n, \msg_see_documentation_text:n} +% \begin{macro}[EXP]{\msg_module_name:n, \msg_see_documentation_text:n} % Contextual footer information, with the potential to give modules an % alternative name. % \begin{macrocode} diff --git a/Master/texmf-dist/source/latex/l3kernel/l3names.dtx b/Master/texmf-dist/source/latex/l3kernel/l3names.dtx index c4ad2e471d2..9ab3a340a6e 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3names.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3names.dtx @@ -41,7 +41,7 @@ % }^^A % } % -% \date{Released 2018-10-31} +% \date{Released 2018-11-19} % % \maketitle % @@ -615,6 +615,7 @@ \@@_primitive:NN \pdfeachlinedepth \tex_eachlinedepth:D \@@_primitive:NN \pdfeachlineheight \tex_eachlineheight:D \@@_primitive:NN \pdfelapsedtime \tex_elapsedtime:D + \@@_primitive:NN \pdffiledump \tex_filedump:D \@@_primitive:NN \pdffilemoddate \tex_filemoddate:D \@@_primitive:NN \pdffilesize \tex_filesize:D \@@_primitive:NN \pdffirstlineheight \tex_firstlineheight:D @@ -758,7 +759,11 @@ % Primitives from \pdfTeX{} that \XeTeX{} renames: also helps with % \LuaTeX{}. % \begin{macrocode} + \@@_primitive:NN \creationdate \tex_creationdate:D \@@_primitive:NN \elapsedtime \tex_elapsedtime:D + \@@_primitive:NN \filedump \tex_filedump:D + \@@_primitive:NN \filemoddate \tex_filemoddate:D + \@@_primitive:NN \filesize \tex_filesize:D \@@_primitive:NN \mdfivesum \tex_mdfivesum:D \@@_primitive:NN \ifprimitive \tex_ifprimitive:D \@@_primitive:NN \primitive \tex_primitive:D diff --git a/Master/texmf-dist/source/latex/l3kernel/l3oldmodules.dtx b/Master/texmf-dist/source/latex/l3kernel/l3oldmodules.dtx index b9a217c4b0d..ff344233c91 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3oldmodules.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3oldmodules.dtx @@ -42,7 +42,7 @@ % } % % -% \date{Released 2018-10-31} +% \date{Released 2018-11-19} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx b/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx index 3ec1682efee..b18389f6e50 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx @@ -41,7 +41,7 @@ % }^^A % } % -% \date{Released 2018-10-31} +% \date{Released 2018-11-19} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx b/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx index 3259bc595b3..0f2fdff7569 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx @@ -41,7 +41,7 @@ % }^^A % } % -% \date{Released 2018-10-31} +% \date{Released 2018-11-19} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx b/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx index efe7f51ac47..a123baf55f0 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx @@ -41,7 +41,7 @@ % }^^A % } % -% \date{Released 2018-10-31} +% \date{Released 2018-11-19} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3regex.dtx b/Master/texmf-dist/source/latex/l3kernel/l3regex.dtx index 389661bbb56..68b597a9250 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3regex.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3regex.dtx @@ -41,7 +41,7 @@ % }^^A % } % -% \date{Released 2018-10-31} +% \date{Released 2018-11-19} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx b/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx index 1b7667253d6..0eaadc78d50 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx @@ -41,7 +41,7 @@ % }^^A % } % -% \date{Released 2018-10-31} +% \date{Released 2018-11-19} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx b/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx index 32c0f38ffeb..cb1839353d5 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx @@ -42,7 +42,7 @@ % }^^A % } % -% \date{Released 2018-10-31} +% \date{Released 2018-11-19} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3sort.dtx b/Master/texmf-dist/source/latex/l3kernel/l3sort.dtx index 39c733fbca9..217acdaa320 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3sort.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3sort.dtx @@ -41,7 +41,7 @@ % }^^A % } % -% \date{Released 2018-10-31} +% \date{Released 2018-11-19} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3str.dtx b/Master/texmf-dist/source/latex/l3kernel/l3str.dtx index cdf0c1dc821..430f33d2498 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3str.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3str.dtx @@ -41,7 +41,7 @@ % }^^A % } % -% \date{Released 2018-10-31} +% \date{Released 2018-11-19} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3sys.dtx b/Master/texmf-dist/source/latex/l3kernel/l3sys.dtx index f990fd150fc..38ed4c2925f 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3sys.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3sys.dtx @@ -41,7 +41,7 @@ % }^^A % } % -% \date{Released 2018-10-31} +% \date{Released 2018-11-19} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx b/Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx index 3f95c433027..1b2d02d32d1 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx @@ -42,7 +42,7 @@ % }^^A % } % -% \date{Released 2018-10-31} +% \date{Released 2018-11-19} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx b/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx index 8248febf65f..30ef7b74f8d 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx @@ -41,7 +41,7 @@ % }^^A % } % -% \date{Released 2018-10-31} +% \date{Released 2018-11-19} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3token.dtx b/Master/texmf-dist/source/latex/l3kernel/l3token.dtx index c37edbacf71..df8bac88aa7 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3token.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3token.dtx @@ -41,7 +41,7 @@ % }^^A % } % -% \date{Released 2018-10-31} +% \date{Released 2018-11-19} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx b/Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx index 7f00ded4b96..00536dc3472 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx @@ -41,7 +41,7 @@ % }^^A % } % -% \date{Released 2018-10-31} +% \date{Released 2018-11-19} % % \maketitle % diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3benchmark/l3benchmark.sty b/Master/texmf-dist/tex/latex/l3experimental/l3benchmark/l3benchmark.sty index f9ed7d0c25c..87c8790e3d3 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3benchmark/l3benchmark.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/l3benchmark/l3benchmark.sty @@ -20,7 +20,7 @@ %% %% File: l3benchmark.dtx Copyright (C) 2011,2012,2014-2018 The LaTeX3 Project \RequirePackage{expl3} -\ProvidesExplPackage{l3benchmark}{2018-10-31}{} +\ProvidesExplPackage{l3benchmark}{2018-11-19}{} {L3 Experimental benchmarking} \sys_if_engine_luatex:TF { @@ -62,57 +62,22 @@ \c_zero_int } } -\fp_new:N \g_benchmark_time_fp -\fp_new:N \g_benchmark_ops_fp -\cs_new_protected:Npn \benchmark_display: - { \iow_term:x { \fp_to_tl:N \g_benchmark_time_fp \c_space_tl seconds } } -\cs_new_protected:Npn \benchmark_display_in_ops: - { - \iow_term:x - { - \fp_compare:nTF { \g_benchmark_ops_fp > 1e9 } - { \fp_to_tl:n { \g_benchmark_ops_fp * 1e-9 } ~ G~ops } - { - \fp_compare:nTF { \g_benchmark_ops_fp > 1e6 } - { \fp_to_tl:n { \g_benchmark_ops_fp * 1e-6 } ~ M~ops } - { - \fp_compare:nTF { \g_benchmark_ops_fp > 1e3 } - { \fp_to_tl:n { \g_benchmark_ops_fp * 1e-3 } ~ K~ops } - { \fp_to_tl:n { \g_benchmark_ops_fp } ~ ops } - } - } - } - } +\fp_new:N \g_benchmark_duration_target_fp +\fp_gset:Nn \g_benchmark_duration_target_fp { 1 } \sys_if_timer_exist:F { - \msg_new:nnnn { benchmark } { no-time } - { The~l3benchmark~package~failed~to~access~a~clock. } - { The~current~engine~provides~no~way~to~access~the~system~time. } + \fp_gset:Nn \g_benchmark_duration_target_fp { nan } \cs_new_protected:Npn \benchmark_once:n #1 { \msg_error:nn { benchmark } { no-time } } - \cs_new_protected:Npn \benchmark_once_in_ops:n #1 - { \msg_error:nn { benchmark } { no-time } } - \cs_new_protected:Npn \benchmark_once_silent:n #1 - { \msg_error:nn { benchmark } { no-time } } - \cs_new_protected:Npn \benchmark:n #1 - { \msg_error:nn { benchmark } { no-time } } - \cs_new_protected:Npn \benchmark_in_ops:n #1 + \cs_new_eq:NN \benchmark:n \benchmark_once:n + \cs_new_protected:Npn \benchmark_tic: { \msg_error:nn { benchmark } { no-time } } - \cs_new_protected:Npn \benchmark_silent:n #1 - { \msg_error:nn { benchmark } { no-time } } - \fp_gset:Nn \g_benchmark_time_fp { nan } - \fp_gset:Nn \g_benchmark_ops_fp { nan } + \cs_new_eq:NN \benchmark_toc: \benchmark_tic: + \msg_new:nnnn { benchmark } { no-time } + { The~l3benchmark~package~failed~to~access~a~clock. } + { The~current~engine~provides~no~way~to~access~the~system~time. } \msg_critical:nn { benchmark } { no-time } } -\fp_new:N \g_benchmark_duration_target_fp -\fp_gset:Nn \g_benchmark_duration_target_fp { 1 } -\int_new:N \g__benchmark_duration_int -\int_new:N \g__benchmark_time_int -\int_new:N \g__benchmark_time_a_int -\int_new:N \g__benchmark_time_b_int -\int_new:N \g__benchmark_time_c_int -\int_new:N \g__benchmark_time_d_int -\int_new:N \g__benchmark_repeat_int \int_new:N \g__benchmark_nesting_int \cs_new_protected:Npn \__benchmark_raw:nN #1 { @@ -163,63 +128,52 @@ \int_gset:Nn #3 { #1 - \g__benchmark_time_int } \cs_set_eq:NN \__benchmark_tmp:w \prg_do_nothing: } -\fp_new:N \g__benchmark_one_op_fp +\fp_new:N \g__benchmark_time_fp +\fp_new:N \g__benchmark_ops_fp +\int_new:N \g__benchmark_duration_int +\int_new:N \g__benchmark_time_int +\int_new:N \g__benchmark_time_a_int +\int_new:N \g__benchmark_time_b_int +\int_new:N \g__benchmark_time_c_int +\int_new:N \g__benchmark_time_d_int +\int_new:N \g__benchmark_repeat_int \tl_new:N \g__benchmark_code_tl -\cs_new_protected:Npn \benchmark:n #1 - { \benchmark_silent:n {#1} \benchmark_display: } -\cs_new_protected:Npn \benchmark_in_ops:n #1 - { \benchmark_silent:n {#1} \benchmark_display_in_ops: } -\cs_new_protected:Npn \__benchmark_measure_op: +\cs_new_protected:Npn \benchmark_once:n #1 { - \int_gset:Nn \g__benchmark_duration_int { 256 } - \tl_gset:Nn \g__benchmark_code_tl - { \int_gset:Nn \g__benchmark_duration_int { 256 } } % arbitrary single operation - \__benchmark_aux: - \fp_gset_eq:NN \g__benchmark_one_op_fp \g_benchmark_time_fp - \fp_compare:nNnT \g__benchmark_one_op_fp < { 1e-6 } - { \fp_gset:Nn \g__benchmark_one_op_fp { 1e-6 } } + \__benchmark_measure_op: + \__benchmark_raw:nN {#1} \g__benchmark_time_int + \fp_gset:Nn \g__benchmark_time_fp { \g__benchmark_time_int / 65536 } + \__benchmark_display: } -\cs_new_protected:Npn \benchmark_silent:n #1 +\cs_new_protected:Npn \benchmark:n #1 { \__benchmark_measure_op: - \int_gset:Nn \g__benchmark_duration_int - { \fp_to_int:n { 65536 * \g_benchmark_duration_target_fp } } \tl_gset:Nn \g__benchmark_code_tl {#1} \__benchmark_aux: - \fp_gset:Nn \g_benchmark_ops_fp - { \g_benchmark_time_fp / \g__benchmark_one_op_fp } + \__benchmark_display: } \cs_new_protected:Npn \__benchmark_aux: { \int_gset:Nn \g__benchmark_repeat_int { 1 } \__benchmark_raw:nN { \g__benchmark_code_tl } \g__benchmark_time_int \int_compare:nNnF \g__benchmark_time_int < { \g__benchmark_duration_int / 2 } + { \prg_break: } + \bool_until_do:nn { - \int_gset_eq:NN \g__benchmark_time_a_int \g__benchmark_time_int - \int_gset_eq:NN \g__benchmark_time_b_int \g__benchmark_time_int - \int_gset_eq:NN \g__benchmark_time_c_int \g__benchmark_time_int - \int_gset_eq:NN \g__benchmark_time_d_int \g__benchmark_time_int - \prg_break: + \int_compare_p:nNn \g__benchmark_time_int > { \g__benchmark_duration_int / 32 } + || \int_compare_p:nNn \g__benchmark_repeat_int > { \c_max_int / 4 } } - \int_while_do:nNnn \g__benchmark_time_int < { \g__benchmark_duration_int / 100 } { - \int_compare:nNnT \g__benchmark_repeat_int > { \c_max_int / 4 } - { - \int_gzero:N \g__benchmark_time_a_int - \int_gzero:N \g__benchmark_time_b_int - \int_gzero:N \g__benchmark_time_c_int - \int_gzero:N \g__benchmark_time_d_int - \prg_break: - } \int_gset:Nn \g__benchmark_repeat_int { 4 * \g__benchmark_repeat_int } \__benchmark_run:N \g__benchmark_time_int } \int_gset:Nn \g__benchmark_repeat_int { - \int_max:nn { 1 } + \fp_to_int:n { - \g__benchmark_duration_int * \g__benchmark_repeat_int - / ( \g__benchmark_time_int * 4 ) + max ( 1 , min ( \c_max_int , + \g__benchmark_duration_int * \g__benchmark_repeat_int / + \int_eval:n { 4 * \g__benchmark_time_int } ) ) } } \int_compare:nNnTF \g__benchmark_repeat_int = 1 @@ -228,76 +182,87 @@ \__benchmark_run:N \g__benchmark_time_b_int \__benchmark_run:N \g__benchmark_time_c_int \__benchmark_run:N \g__benchmark_time_d_int - \prg_break_point: - \fp_gset:Nn \g_benchmark_time_fp + \int_gset:Nn \g__benchmark_time_int { \int_min:nn { \int_min:nn \g__benchmark_time_a_int \g__benchmark_time_b_int } { \int_min:nn \g__benchmark_time_c_int \g__benchmark_time_d_int } - / \g__benchmark_repeat_int / 65536 } + \prg_break_point: + \int_compare:nNnT \g__benchmark_time_int < 3 { \int_gzero:N \g__benchmark_time_int } + \fp_gset:Nn \g__benchmark_time_fp + { \g__benchmark_time_int / \g__benchmark_repeat_int / 65536 } } \cs_new_protected:Npn \__benchmark_run:N { \exp_args:NNo \__benchmark_raw_replicate:nnN \g__benchmark_repeat_int { \g__benchmark_code_tl } } -\cs_new_protected:Npn \benchmark_once:n #1 - { \benchmark_once_silent:n {#1} \benchmark_display: } -\cs_new_protected:Npn \benchmark_once_in_ops:n #1 - { \benchmark_once_silent:n {#1} \benchmark_display_in_ops: } -\cs_new_protected:Npn \benchmark_once_silent:n #1 +\fp_new:N \g__benchmark_one_op_fp +\cs_new_protected:Npn \__benchmark_measure_op: { - \__benchmark_measure_op: - \__benchmark_raw:nN {#1} \g__benchmark_time_int - \fp_gset:Nn \g_benchmark_time_fp { \g__benchmark_time_int / 65536 } - \fp_gset:Nn \g_benchmark_ops_fp - { \g_benchmark_time_fp / \g__benchmark_one_op_fp } + \int_gset:Nn \g__benchmark_duration_int + { \fp_to_int:n { 65536 * \g_benchmark_duration_target_fp } / 4 } + \tl_gset:Nn \g__benchmark_code_tl + { \int_gadd:Nn \g__benchmark_duration_int { 0 } } + \__benchmark_aux: + \fp_gset:Nn \g__benchmark_one_op_fp { max(\g__benchmark_time_fp, 1e-16) } + \int_gset:Nn \g__benchmark_duration_int + { \fp_to_int:n { 65536 * \g_benchmark_duration_target_fp } } } -\int_new:N \g__benchmark_tictoc_int -\seq_new:N \g__benchmark_tictoc_seq -\cs_new_protected:Npn \benchmark_tic: +\cs_new:Npn \__benchmark_fp_to_tl:N #1 { - \int_compare:nTF { \g__benchmark_tictoc_int == 0 } + \fp_compare:nTF { abs(#1) < 1000 } + { \fp_to_tl:n { round(#1, 2 - logb(#1)) } } { - \sys_gzero_timer: - \__benchmark_tic: + \exp_args:Nf \__benchmark_fp_to_tl_aux:nN + { \fp_to_int:n { logb(#1) } } #1 } - { \__benchmark_tic: } } -\cs_new_protected:Npn \__benchmark_tic: +\cs_new:Npn \__benchmark_fp_to_tl_aux:nN #1#2 + { \fp_to_tl:n { round(#2 * 1e-#1, 2) } e#1 } +\cs_new_protected:Npn \__benchmark_display: { - \exp_args:NNf \seq_put_right:Nn \g__benchmark_tictoc_seq { \sys_timer: } - \int_gincr:N \g__benchmark_tictoc_int + \fp_gset:Nn \g__benchmark_ops_fp { \g__benchmark_time_fp / \g__benchmark_one_op_fp } \iow_term:x { - \prg_replicate:nn {\g__benchmark_tictoc_int} {---+} \space - TIC + \__benchmark_fp_to_tl:N \g__benchmark_time_fp \c_space_tl seconds \c_space_tl + ( \__benchmark_fp_to_tl:N \g__benchmark_ops_fp \c_space_tl ops) } } +\int_new:N \g__benchmark_tictoc_int +\seq_new:N \g__benchmark_tictoc_seq +\tl_new:N \l__benchmark_tictoc_pop_tl +\cs_new:Npn \__benchmark_tictoc_prefix: + { + (l3benchmark) \c_space_tl + + \prg_replicate:nn { \g__benchmark_tictoc_int } { -+ } \c_space_tl + } +\cs_new_protected:Npn \benchmark_tic: + { + \iow_term:x { \__benchmark_tictoc_prefix: TIC } + \exp_args:NNf \seq_gput_right:Nn \g__benchmark_tictoc_seq { \sys_timer: } + \int_gincr:N \g__benchmark_tictoc_int + } \cs_new:Npn \benchmark_toc: { - \int_compare:nT { \g__benchmark_tictoc_int == 0 } - { \msg_error:nn {benchmark} {toc-first} } - \seq_pop_right:NN \g__benchmark_tictoc_seq \l__benchmark_tictoc_pop_tl - \__benchmark_toc: + \seq_gpop_right:NNTF \g__benchmark_tictoc_seq \l__benchmark_tictoc_pop_tl + { \__benchmark_toc: } + { \msg_error:nn { benchmark } { toc-first } } } \cs_new_protected:Npn \__benchmark_toc: { - \tl_set:Nx \l__benchmark_tictoc_tl - { - \fp_to_decimal:n - { round( ( \sys_timer: - \l__benchmark_tictoc_pop_tl) / 65536 , 3 ) } - } + \int_gdecr:N \g__benchmark_tictoc_int + \fp_gset:Nn \g__benchmark_time_fp + { ( \sys_timer: - \l__benchmark_tictoc_pop_tl ) / 65536 } \iow_term:x { - \prg_replicate:nn {\g__benchmark_tictoc_int} {---+} \c_space_tl + \__benchmark_tictoc_prefix: TOC: \c_space_tl - \l__benchmark_tictoc_tl \c_space_tl s + \__benchmark_fp_to_tl:N \g__benchmark_time_fp \c_space_tl s } - \int_gdecr:N \g__benchmark_tictoc_int } -\msg_new:nnn {benchmark} {toc-first} +\msg_new:nnn { benchmark } { toc-first } { - \token_to_str:N \benchmark_toc: \space without~ - \token_to_str:N \benchmark_tic: \space ! + \token_to_str:N \benchmark_toc: \c_space_tl without~ + \token_to_str:N \benchmark_tic: \c_space_tl ! } %% %% diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3cctab/l3cctab.sty b/Master/texmf-dist/tex/latex/l3experimental/l3cctab/l3cctab.sty index a673ae3beeb..b94484a9d1a 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3cctab/l3cctab.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/l3cctab/l3cctab.sty @@ -20,8 +20,10 @@ %% %% File: l3cctab.dtx Copyright (C) 2018 The LaTeX3 Project \RequirePackage{expl3} -\ProvidesExplPackage{l3cctab}{2018-10-31}{} +\ProvidesExplPackage{l3cctab}{2018-11-19}{} {L3 Experimental category code tables} +\int_new:N \g__cctab_allocate_int +\int_gset:Nn \g__cctab_allocate_int { -1 } \int_new:N \g__cctab_stack_int \seq_new:N \g__cctab_stack_seq \tl_new:N \l__cctab_tmp_tl @@ -31,7 +33,6 @@ { \__kernel_chk_if_free_cs:N #1 \newcatcodetable #1 - \tex_initcatcodetable:D #1 } \cs_new_protected:Npn \cctab_begin:N #1 { @@ -61,18 +62,26 @@ } { \cs_new_protected:Npn \__cctab_gstore:Nnn #1#2#3 - { \intarray_gset:Nnn #1 { #2 + 1 } {#3} } + { + \intarray_gset:cnn + { g__cctab_ \int_use:N #1 _cctab } { #2 + 1 } {#3} + } \cs_new_protected:Npn \cctab_new:N #1 { - \intarray_new:Nn #1 { 256 } + \int_gadd:Nn \g__cctab_allocate_int { 1 } + \int_const:Nn #1 { \g__cctab_allocate_int } + \intarray_new:cn { g__cctab_ \int_use:N #1 _cctab } { 256 } \int_step_inline:nn { 256 } - { \intarray_gset:Nnn #1 {##1} { 12 } } + { + \intarray_gset:cnn + { g__cctab_ \int_use:N #1 _cctab } {##1} { 12 } + } \__cctab_gstore:Nnn #1 { 0 } { 9 } \__cctab_gstore:Nnn #1 { 13 } { 5 } \__cctab_gstore:Nnn #1 { 32 } { 10 } \__cctab_gstore:Nnn #1 { 37 } { 14 } - \int_step_inline:nnn { 65 } { 90 } - { \intarray_gset:Nnn #1 {##1} { 11 } } + \int_step_inline:nnn { 64 } { 89 } + { \__cctab_gstore:Nnn #1 {##1} { 11 } } \__cctab_gstore:Nnn #1 { 92 } { 0 } \int_step_inline:nnn { 97 } { 122 } { \__cctab_gstore:Nnn #1 {##1} { 11 } } @@ -99,7 +108,10 @@ \int_step_inline:nn { 256 } { \char_set_catcode:nn { ##1 - 1 } - { \intarray_item:Nn #1 {##1} } + { + \intarray_item:cn + { g__cctab_ \int_use:N #1 _cctab } {##1} + } } } \cs_generate_variant:Nn \intarray_new:Nn { c } @@ -124,17 +136,16 @@ #2 \int_step_inline:nn { 256 } { - \intarray_gset:Nnn #1 {##1} + \intarray_gset:cnn { g__cctab_ \int_use:N #1 _cctab } {##1} { \char_value_catcode:n { ##1 - 1 } } } \group_end: } } -\cctab_new:N \g__cctab_tmp_cctab \cs_new_protected:Npn \cctab_const:Nn #1#2 { - \cctab_gset:Nn \g__cctab_tmp_cctab {#2} - \cs_new_eq:NN #1 \g__cctab_tmp_cctab + \cctab_new:N #1 + \cctab_gset:Nn #1 {#2} } \cctab_const:Nn \c_code_cctab { } \cctab_const:Nn \c_document_cctab diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3color/l3color.sty b/Master/texmf-dist/tex/latex/l3experimental/l3color/l3color.sty index 16e910101db..5caa1a16b60 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3color/l3color.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/l3color/l3color.sty @@ -20,7 +20,7 @@ %% %% File: l3color.dtx Copyright(C) 2017-2018 The LaTeX3 Project \RequirePackage{expl3} -\ProvidesExplPackage{l3color}{2018-10-31}{} +\ProvidesExplPackage{l3color}{2018-11-19}{} {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 ff825b3402e..7568542ba7c 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3draw/l3draw.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/l3draw/l3draw.sty @@ -27,7 +27,7 @@ %% %% File: l3draw.dtx Copyright(C) 2018 The LaTeX3 Project \RequirePackage{expl3} -\ProvidesExplPackage{l3draw}{2018-10-31}{} +\ProvidesExplPackage{l3draw}{2018-11-19}{} {L3 Experimental core drawing support} \RequirePackage { l3color } %% File: l3draw-boxes.dtx Copyright(C) 2018 The LaTeX3 Project 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 aa696ec5941..bba4a7b3ffa 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-convert.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-convert.sty @@ -20,7 +20,7 @@ %% %% File: l3str-convert.dtx Copyright (C) 2013-2018 The LaTeX3 Project \RequirePackage{expl3} -\ProvidesExplPackage{l3str-convert}{2018-10-31}{} +\ProvidesExplPackage{l3str-convert}{2018-11-19}{} {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-format.sty b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-format.sty index b224455020d..83aff2b089a 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-format.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-format.sty @@ -20,7 +20,7 @@ %% %% File: l3str-format.dtx Copyright (C) 2012-2018 The LaTeX3 Project \RequirePackage{expl3} -\ProvidesExplPackage{l3str-format}{2018-10-31}{} +\ProvidesExplPackage{l3str-format}{2018-11-19}{} {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 f572fb006c7..87b1b13a41c 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 @@ -20,7 +20,7 @@ %% %% File: l3sys-shell.dtx Copyright(C) 2018 The LaTeX3 Project \RequirePackage{expl3} -\ProvidesExplPackage{l3sys-shell}{2018-10-31}{} +\ProvidesExplPackage{l3sys-shell}{2018-11-19}{} {L3 Experimental system shell functions} \cs_new:Npn \__sys_path_to_win:n #1 { diff --git a/Master/texmf-dist/tex/latex/l3experimental/xcoffins/xcoffins.sty b/Master/texmf-dist/tex/latex/l3experimental/xcoffins/xcoffins.sty index 49be85fa7e4..dc2c8b88d66 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/xcoffins/xcoffins.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/xcoffins/xcoffins.sty @@ -20,7 +20,7 @@ %% %% File: xcoffins.dtx Copyright(C) 2010-2012,2014,2016-2018 The LaTeX3 Project \RequirePackage{xparse} -\ProvidesExplPackage{xcoffins}{2018-10-31}{} +\ProvidesExplPackage{xcoffins}{2018-11-19}{} {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 abe51eda60e..cc75515bc8f 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/xgalley/l3galley.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/xgalley/l3galley.sty @@ -33,7 +33,7 @@ }% \endinput } -\ProvidesExplPackage{l3galley}{2018-10-31}{} +\ProvidesExplPackage{l3galley}{2018-11-19}{} {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 43ced539cf6..7fb3391310f 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/xgalley/xgalley.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/xgalley/xgalley.sty @@ -21,7 +21,7 @@ %% File: xgalley.dtx Copyright (C) 1999-2001, 2004-2009 Frank Mittelbach %% (C) 2010-2012,2014,2016-2018 The LaTeX3 Project \RequirePackage{xparse} -\ProvidesExplPackage{xgalley}{2018-10-31}{} +\ProvidesExplPackage{xgalley}{2018-11-19}{} {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 6a96cdf65f2..8bf3a432a01 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex +++ b/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex @@ -63,7 +63,7 @@ %% and all files in that bundle must be distributed together. %% %% File: expl3.dtx Copyright (C) 1990-2018 The LaTeX3 Project -\def\ExplFileDate{2018-10-31}% +\def\ExplFileDate{2018-11-19}% \begingroup \def\next{\endgroup}% \expandafter\ifx\csname PackageError\endcsname\relax @@ -837,6 +837,7 @@ \__kernel_primitive:NN \pdfeachlinedepth \tex_eachlinedepth:D \__kernel_primitive:NN \pdfeachlineheight \tex_eachlineheight:D \__kernel_primitive:NN \pdfelapsedtime \tex_elapsedtime:D + \__kernel_primitive:NN \pdffiledump \tex_filedump:D \__kernel_primitive:NN \pdffilemoddate \tex_filemoddate:D \__kernel_primitive:NN \pdffilesize \tex_filesize:D \__kernel_primitive:NN \pdffirstlineheight \tex_firstlineheight:D @@ -949,7 +950,11 @@ \__kernel_primitive:NN \XeTeXvariationmin \tex_XeTeXvariationmin:D \__kernel_primitive:NN \XeTeXvariationname \tex_XeTeXvariationname:D \__kernel_primitive:NN \XeTeXversion \tex_XeTeXversion:D + \__kernel_primitive:NN \creationdate \tex_creationdate:D \__kernel_primitive:NN \elapsedtime \tex_elapsedtime:D + \__kernel_primitive:NN \filedump \tex_filedump:D + \__kernel_primitive:NN \filemoddate \tex_filemoddate:D + \__kernel_primitive:NN \filesize \tex_filesize:D \__kernel_primitive:NN \mdfivesum \tex_mdfivesum:D \__kernel_primitive:NN \ifprimitive \tex_ifprimitive:D \__kernel_primitive:NN \primitive \tex_primitive:D @@ -15557,6 +15562,8 @@ %% File: l3fp-basics.dtx Copyright (C) 2011-2014,2016-2018 The LaTeX3 Project \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 + { \__fp_parse_unary_function:NNN \__fp_logb_o:w ? } \cs_new:Npn \__fp_parse_word_sign:N { \__fp_parse_unary_function:NNN \__fp_sign_o:w ? } \cs_new:Npn \__fp_parse_word_sqrt:N @@ -16298,6 +16305,22 @@ \int_value:w \__fp_int_eval:w #6 + 19999 - #1 ; \exp_after:wN ; } +\cs_new:Npn \__fp_logb_o:w ? \s__fp \__fp_chk:w #1#2; @ + { + \if_case:w #1 \exp_stop_f: + \__fp_case_use:nw + { \__fp_division_by_zero_o:Nnw \c_minus_inf_fp { logb } } + \or: \exp_after:wN \__fp_logb_aux_o:w + \or: \__fp_case_return_o:Nw \c_inf_fp + \else: \__fp_case_return_same_o:w + \fi: + \s__fp \__fp_chk:w #1 #2; + } +\cs_new:Npn \__fp_logb_aux_o:w \s__fp \__fp_chk:w #1 #2 #3 #4 ; + { + \exp_after:wN \__fp_parse:n \exp_after:wN + { \int_value:w \int_eval:w #3 - 1 \exp_after:wN } + } \cs_new:Npn \__fp_sign_o:w ? \s__fp \__fp_chk:w #1#2; @ { \if_case:w #1 \exp_stop_f: @@ -24089,7 +24112,7 @@ { l__coffin_poles_ \__coffin_to_value:N #1 _prop } {#2} #3 { \__kernel_msg_error:nnxx { kernel } { unknown-coffin-pole } - {#2} { \token_to_str:N #1 } + { \exp_not:n {#2} } { \token_to_str:N #1 } \tl_set:Nn #3 { { 0pt } { 0pt } { 0pt } { 0pt } } } } @@ -25261,6 +25284,8 @@ {#5} {#6} } } +\cs_new:Npn \fp_sign:n #1 + { \fp_to_decimal:n { sign \__fp_parse:n {#1} } } \cs_new_protected:Npn \file_get_mdfive_hash:nN #1#2 { \__file_get_details:nnN {#1} { mdfivesum } {#2} } \cs_new_protected:Npn \file_get_size:nN #1#2 @@ -25340,6 +25365,22 @@ \cs:w flag~#1 \cs_end: 0 ; \fi: } +\__kernel_patch_args:nNNpn + { { \__kernel_chk_expr:nNnN {#1} \__int_eval:w { } \int_sign:n } } +\cs_new:Npn \int_sign:n #1 + { + \int_value:w \exp_after:wN \__int_sign:Nw + \int_value:w \__int_eval:w #1 \__int_eval_end: ; + \exp_stop_f: + } +\cs_new:Npn \__int_sign:Nw #1#2 ; + { + \if_meaning:w 0 #1 + 0 + \else: + \if_meaning:w - #1 - \fi: 1 + \fi: + } \cs_new:Npn \msg_expandable_error:nnnnnn #1#2#3#4#5#6 { \exp_args:Nf \__msg_expandable_error_module:nn @@ -25598,6 +25639,26 @@ \exp_after:wN #1 \int_value:w \int_eval:w 1 + #2 ; } +\__kernel_patch_args:nNNpn + { { \__kernel_chk_expr:nNnN {#1} \__dim_eval:w { } \dim_sign:n } } +\cs_new:Npn \dim_sign:n #1 + { + \int_value:w \exp_after:wN \__dim_sign:Nw + \dim_use:N \__dim_eval:w #1 \__dim_eval_end: ; + \exp_stop_f: + } +\cs_new:Npn \__dim_sign:Nw #1#2 ; + { + \if_dim:w #1#2 > \c_zero_dim + 1 + \else: + \if_meaning:w - #1 + -1 + \else: + 0 + \fi: + \fi: + } \cs_new:Npn \skip_split_finite_else_action:nnNN #1#2#3#4 { \skip_if_finite:nTF {#1} diff --git a/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex b/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex index 4a637b830c5..8ce266d05a8 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex +++ b/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex @@ -19,7 +19,7 @@ %% and all files in that bundle must be distributed together. %% %% File: expl3.dtx Copyright (C) 1990-2018 The LaTeX3 Project -\def\ExplFileDate{2018-10-31}% +\def\ExplFileDate{2018-11-19}% \let\ExplLoaderFileDate\ExplFileDate \begingroup \def\tempa{LaTeX2e}% diff --git a/Master/texmf-dist/tex/latex/l3kernel/expl3.sty b/Master/texmf-dist/tex/latex/l3kernel/expl3.sty index ab9906724e1..a774f4a9048 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/expl3.sty +++ b/Master/texmf-dist/tex/latex/l3kernel/expl3.sty @@ -19,7 +19,7 @@ %% and all files in that bundle must be distributed together. %% %% File: expl3.dtx Copyright (C) 1990-2018 The LaTeX3 Project -\def\ExplFileDate{2018-10-31}% +\def\ExplFileDate{2018-11-19}% \let\ExplLoaderFileDate\ExplFileDate \ProvidesPackage{expl3} [% diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3dvipdfmx.def b/Master/texmf-dist/tex/latex/l3kernel/l3dvipdfmx.def index ed50851dbd4..a242b6eea3c 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/l3dvipdfmx.def +++ b/Master/texmf-dist/tex/latex/l3kernel/l3dvipdfmx.def @@ -20,7 +20,7 @@ %% %% File: l3drivers.dtx Copyright(C) 2011-2018 The LaTeX3 Project \ProvidesExplFile - {l3dvidpfmx.def}{2018-10-31}{} + {l3dvidpfmx.def}{2018-11-19}{} {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 b8f3670e7e1..a2d5fd5ab52 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/l3dvips.def +++ b/Master/texmf-dist/tex/latex/l3kernel/l3dvips.def @@ -20,7 +20,7 @@ %% %% File: l3drivers.dtx Copyright(C) 2011-2018 The LaTeX3 Project \ProvidesExplFile - {l3dvips.def}{2018-10-31}{} + {l3dvips.def}{2018-11-19}{} {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 c3d8fe8c5c9..39ee76c2b9f 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/l3dvisvgm.def +++ b/Master/texmf-dist/tex/latex/l3kernel/l3dvisvgm.def @@ -20,7 +20,7 @@ %% %% File: l3drivers.dtx Copyright(C) 2011-2018 The LaTeX3 Project \ProvidesExplFile - {l3dvisvgm.def}{2018-10-31}{} + {l3dvisvgm.def}{2018-11-19}{} {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 07b01ffd13f..afac364e67f 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/l3pdfmode.def +++ b/Master/texmf-dist/tex/latex/l3kernel/l3pdfmode.def @@ -20,7 +20,7 @@ %% %% File: l3drivers.dtx Copyright(C) 2011-2018 The LaTeX3 Project \ProvidesExplFile - {l3pdfmode.def}{2018-10-31}{} + {l3pdfmode.def}{2018-11-19}{} {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 f7796bc13b3..69e0bb4e3da 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/l3xdvipdfmx.def +++ b/Master/texmf-dist/tex/latex/l3kernel/l3xdvipdfmx.def @@ -20,7 +20,7 @@ %% %% File: l3drivers.dtx Copyright(C) 2011-2018 The LaTeX3 Project \ProvidesExplFile - {l3xdvidpfmx.def}{2018-10-31}{} + {l3xdvidpfmx.def}{2018-11-19}{} {L3 Experimental driver: xdvipdfmx} \cs_new_eq:NN \__driver_literal:e \tex_special:D \cs_new_protected:Npn \__driver_literal:n #1 |