diff options
author | Karl Berry <karl@freefriends.org> | 2015-09-06 23:19:17 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2015-09-06 23:19:17 +0000 |
commit | 3cb4e75696df6c7abebf17fbc606ca86dcdfb520 (patch) | |
tree | 729978e0726cdb9d9f34a3d2e249c71a82e07f97 /Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex | |
parent | 32f50b97c2ae44e93225d1024afab9727fc02e00 (diff) |
l3 (6sep15)
git-svn-id: svn://tug.org/texlive/trunk@38305 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex')
-rw-r--r-- | Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex | 1597 |
1 files changed, 881 insertions, 716 deletions
diff --git a/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex b/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex index 26b50c35a38..d6a472cf469 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex +++ b/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex @@ -81,8 +81,8 @@ %% ----------------------------------------------------------------------- \def\ExplFileName{expl3} \def\ExplFileDescription{L3 programming layer} -\def\ExplFileDate{2015/07/30} -\def\ExplFileVersion{5724} +\def\ExplFileDate{2015/09/06} +\def\ExplFileVersion{5925} \begingroup \def\next{\endgroup} \expandafter\ifx\csname PackageError\endcsname\relax @@ -241,7 +241,7 @@ } } \endgroup -\GetIdInfo$Id: l3bootstrap.dtx 5721 2015-07-30 11:46:45Z bruno $ +\GetIdInfo$Id: l3bootstrap.dtx 5729 2015-07-31 05:56:12Z joseph $ {L3 Bootstrap code} \begingroup \expandafter\ifx\csname directlua\endcsname\relax @@ -308,10 +308,11 @@ {% LaTeX3 requires the e-TeX primitives and \string\pdfstrcmp.\LineBreak \LineBreak - These are available in engine versions:\LineBreak - - pdfTeX 1.30\LineBreak - - XeTeX 0.9994\LineBreak - - LuaTeX 0.40\LineBreak + These are available in the engines\LineBreak + - pdfTeX v1.30\LineBreak + - XeTeX v0.9994\LineBreak + - LuaTeX v0.40\LineBreak + - e-(u)pTeX mid-2012\LineBreak or later.\LineBreak \LineBreak }% @@ -446,7 +447,7 @@ %% prior consultation with the LaTeX3 Project. %% %% ----------------------------------------------------------------------- -\GetIdInfo$Id: l3names.dtx 5705 2015-07-28 21:31:02Z joseph $ +\GetIdInfo$Id: l3names.dtx 5848 2015-08-17 05:27:13Z joseph $ {L3 Namespace for primitives} \let \tex_global:D \global \let \tex_let:D \let @@ -846,7 +847,7 @@ \__kernel_primitive:NN \unexpanded \etex_unexpanded:D \__kernel_primitive:NN \unless \etex_unless:D \__kernel_primitive:NN \widowpenalties \etex_widowpenalties:D - \__kernel_primitive:NN \pdfannot \pdttex_pdfannot:D + \__kernel_primitive:NN \pdfannot \pdftex_pdfannot:D \__kernel_primitive:NN \pdfcatalog \pdftex_pdfcatalog:D \__kernel_primitive:NN \pdfcompresslevel \pdftex_pdfcompresslevel:D \__kernel_primitive:NN \pdfcolorstack \pdftex_pdfcolorstack:D @@ -1388,7 +1389,7 @@ %% prior consultation with the LaTeX3 Project. %% %% ----------------------------------------------------------------------- -\GetIdInfo$Id: l3basics.dtx 5500 2015-01-27 14:37:04Z joseph $ +\GetIdInfo$Id: l3basics.dtx 5897 2015-08-28 09:06:29Z joseph $ {L3 Basic definitions} \tex_let:D \if_true: \tex_iftrue:D \tex_let:D \if_false: \tex_iffalse:D @@ -1411,9 +1412,13 @@ \tex_let:D \exp_after:wN \tex_expandafter:D \tex_let:D \exp_not:N \tex_noexpand:D \tex_let:D \exp_not:n \etex_unexpanded:D +\tex_let:D \exp:w \tex_romannumeral:D +\tex_chardef:D \exp_end: = 0 ~ + \tex_let:D \token_to_meaning:N \tex_meaning:D -\tex_let:D \token_to_str:N \tex_string:D \tex_let:D \cs_meaning:N \tex_meaning:D +\tex_let:D \tl_to_str:n \etex_detokenize:D +\tex_let:D \token_to_str:N \tex_string:D \tex_let:D \scan_stop: \tex_relax:D \tex_let:D \group_begin: \tex_begingroup:D \tex_let:D \group_end: \tex_endgroup:D @@ -1509,9 +1514,9 @@ \cs_set:Npn \use_none:nnnnnnnn #1#2#3#4#5#6#7#8 { } \cs_set:Npn \use_none:nnnnnnnnn #1#2#3#4#5#6#7#8#9 { } \cs_set_nopar:Npn \prg_return_true: - { \exp_after:wN \use_i:nn \__int_to_roman:w } + { \exp_after:wN \use_i:nn \exp:w } \cs_set_nopar:Npn \prg_return_false: - { \exp_after:wN \use_ii:nn \__int_to_roman:w} + { \exp_after:wN \use_ii:nn \exp:w} \cs_set_protected_nopar:Npn \prg_set_conditional:Npnn { \__prg_generate_conditional_parm:nnNpnn { set } { } } \cs_set_protected_nopar:Npn \prg_new_conditional:Npnn @@ -1561,7 +1566,7 @@ { \exp_not:N \__prg_generate_conditional:nnnnnnw \exp_not:n { {#4} {#5} {#1} {#2} {#6} {#8} } - \etex_detokenize:D {#7} + \tl_to_str:n {#7} \exp_not:n { , \q_recursion_tail , \q_recursion_stop } } } @@ -1592,7 +1597,7 @@ \fi: { \exp_args:cc { cs_ #2 #3 :Npn } { #4 _p: #5 } #6 - { #7 \c_zero \c_true_bool \c_false_bool } + { #7 \exp_end: \c_true_bool \c_false_bool } } { \__msg_kernel_error:nnx { kernel } { protected-predicate } @@ -1603,19 +1608,19 @@ #1 \q_stop #2#3#4#5#6#7 { \exp_args:cc { cs_ #2 #3 :Npn } { #4 : #5 T } #6 - { #7 \c_zero \use:n \use_none:n } + { #7 \exp_end: \use:n \use_none:n } } \cs_set_protected:Npn \__prg_generate_F_form:wnnnnnn #1 \q_stop #2#3#4#5#6#7 { \exp_args:cc { cs_ #2 #3 :Npn } { #4 : #5 F } #6 - { #7 \c_zero { } } + { #7 \exp_end: { } } } \cs_set_protected:Npn \__prg_generate_TF_form:wnnnnnn #1 \q_stop #2#3#4#5#6#7 { \exp_args:cc { cs_ #2 #3 :Npn } { #4 : #5 TF } #6 - { #7 \c_zero } + { #7 \exp_end: } } \cs_set_protected_nopar:Npn \prg_set_eq_conditional:NNn { \__prg_set_eq_conditional:NNNn \cs_set_eq:cc } @@ -1629,7 +1634,7 @@ \__cs_split_function:NN #2 \prg_do_nothing: \__cs_split_function:NN #3 \prg_do_nothing: \exp_not:N #1 - \etex_detokenize:D {#4} + \tl_to_str:n {#4} \exp_not:n { , \q_recursion_tail , \q_recursion_stop } } } @@ -1688,32 +1693,29 @@ \tex_chardef:D \c_false_bool = 0 ~ \cs_set_nopar:Npn \cs_to_str:N { - \__int_to_roman:w + \tex_romannumeral:D \if:w \token_to_str:N \ \__cs_to_str:w \fi: \exp_after:wN \__cs_to_str:N \token_to_str:N } \cs_set:Npn \__cs_to_str:N #1 { \c_zero } \cs_set:Npn \__cs_to_str:w #1 \__cs_to_str:N { - \__int_value:w \fi: \exp_after:wN \c_zero } -\group_begin: -\tex_lccode:D `\@ = `\: \scan_stop: -\tex_catcode:D `\@ = 12 ~ -\tex_lowercase:D +\cs_set:Npx \__cs_split_function:NN #1 { - \group_end: - \cs_set:Npn \__cs_split_function:NN #1 - { - \exp_after:wN \exp_after:wN - \exp_after:wN \__cs_split_function_auxi:w - \cs_to_str:N #1 \q_mark \c_true_bool - @ \q_mark \c_false_bool - \q_stop - } - \cs_set:Npn \__cs_split_function_auxi:w #1 @ #2 \q_mark #3#4 \q_stop #5 - { \__cs_split_function_auxii:w #5 #1 \q_mark \q_stop {#2} #3 } - \cs_set:Npn \__cs_split_function_auxii:w #1#2 \q_mark #3 \q_stop - { #1 {#2} } + \exp_not:N \exp_after:wN \exp_not:N \exp_after:wN + \exp_not:N \exp_after:wN \exp_not:N \__cs_split_function_auxi:w + \exp_not:N \cs_to_str:N #1 \exp_not:N \q_mark \c_true_bool + \token_to_str:N : \exp_not:N \q_mark \c_false_bool + \exp_not:N \q_stop } +\use:x + { + \cs_set:Npn \exp_not:N \__cs_split_function_auxi:w + ##1 \token_to_str:N : ##2 \exp_not:N \q_mark ##3##4 \exp_not:N \q_stop ##5 + } + { \__cs_split_function_auxii:w #5 #1 \q_mark \q_stop {#2} #3 } +\cs_set:Npn \__cs_split_function_auxii:w #1#2 \q_mark #3 \q_stop + { #1 {#2} } \cs_set:Npn \__cs_get_function_name:N #1 { \__cs_split_function:NN #1 \use_i:nnn } \cs_set:Npn \__cs_get_function_signature:N #1 @@ -1794,6 +1796,25 @@ { \tex_immediate:D \tex_write:D \c_minus_one } \cs_set_protected_nopar:Npn \iow_term:x { \tex_immediate:D \tex_write:D \c_sixteen } +\tex_ifodd:D \l@expl@log@functions@bool + \cs_set_protected_nopar:Npn \__chk_log:x { \iow_log:x } + \cs_set_protected_nopar:Npn \__chk_suspend_log: + { + \cs_set_protected_nopar:Npx \__chk_resume_log: + { + \cs_set_protected_nopar:Npn \__chk_resume_log: + { \exp_not:o { \__chk_resume_log: } } + \cs_set_protected_nopar:Npn \__chk_log:x + { \exp_not:o { \__chk_log:x } } + } + \cs_set_protected_nopar:Npn \__chk_log:x { \use_none:n } + } + \cs_set_protected_nopar:Npn \__chk_resume_log: { } +\else: + \cs_set_protected_nopar:Npn \__chk_log:x { \use_none:n } + \cs_set_protected_nopar:Npn \__chk_suspend_log: { } + \cs_set_protected_nopar:Npn \__chk_resume_log: { } +\fi: \cs_set_protected:Npn \__msg_kernel_error:nnxx #1#2#3#4 { \tex_newlinechar:D = `\^^J \tex_relax:D @@ -1829,7 +1850,7 @@ \__msg_kernel_error:nnxx { kernel } { command-already-defined } { \token_to_str:N #1 } { \token_to_meaning:N #1 } } - \iow_log:x { Defining~\token_to_str:N #1~ \msg_line_context: } + \__chk_log:x { Defining~\token_to_str:N #1~ \msg_line_context: } } \fi: \cs_set_protected_nopar:Npn \__chk_if_free_cs:c @@ -2078,32 +2099,13 @@ \cs_new_nopar:Npn \cs_if_eq:ccF { \exp_args:Ncc \cs_if_eq:NNF } \cs_new_protected:Npn \__kernel_register_show:N #1 { - \cs_if_exist:NTF #1 - { \tex_showthe:D \use:n {#1} } - { - \__msg_kernel_error:nnx { kernel } { variable-not-defined } - { \token_to_str:N #1 } - } + \__msg_show_variable:NNNnn #1 \cs_if_exist:NTF ? { } + { > ~ \token_to_str:N #1 = \tex_the:D #1 } } \cs_new_protected_nopar:Npn \__kernel_register_show:c { \exp_args:Nc \__kernel_register_show:N } -\group_begin: - \tex_lccode:D `? = `: \scan_stop: - \tex_catcode:D `? = 12 \scan_stop: -\tex_lowercase:D - { - \group_end: - \cs_new_protected:Npn \cs_show:N #1 - { - \__msg_show_variable:n - { - > ~ \token_to_str:N #1 = - \exp_after:wN \__cs_show:www \cs_meaning:N #1 - \use_none:nn ? \prg_do_nothing: - } - } - \cs_new:Npn \__cs_show:www #1 ? { #1 ? \\ } - } +\cs_new_protected:Npn \cs_show:N #1 + { \__msg_show_wrap:n { > ~ \token_to_str:N #1 = \cs_meaning:N #1 } } \cs_new_protected_nopar:Npn \cs_show:c { \group_begin: \exp_args:NNc \group_end: \cs_show:N } \cs_new_eq:NN \luatex_if_engine:T \use_none:n @@ -2153,7 +2155,7 @@ \cs_new_eq:NN \__prg_break_point: \prg_do_nothing: \cs_new:Npn \__prg_break: #1 \__prg_break_point: { } \cs_new:Npn \__prg_break:n #1#2 \__prg_break_point: {#1} -%% File: l3expan.dtx Copyright (C) 1990-2014 The LaTeX3 project +%% File: l3expan.dtx Copyright (C) 1990-2015 The LaTeX3 project %% %% It may be distributed and/or modified under the conditions of the %% LaTeX Project Public License (LPPL), either version 1.3c of this @@ -2185,7 +2187,7 @@ %% prior consultation with the LaTeX3 Project. %% %% ----------------------------------------------------------------------- -\GetIdInfo$Id: l3expan.dtx 5472 2014-11-27 09:10:40Z joseph $ +\GetIdInfo$Id: l3expan.dtx 5897 2015-08-28 09:06:29Z joseph $ {L3 Argument expansion} \cs_new:Npn \__exp_arg_next:nnn #1#2#3 { #2 \::: { #3 {#1} } } \cs_new:Npn \__exp_arg_next:Nnn #1#2#3 { #2 \::: { #3 #1 } } @@ -2200,7 +2202,7 @@ \cs_new:Npn \::f #1 \::: #2#3 { \exp_after:wN \__exp_arg_next:nnn - \exp_after:wN { \tex_romannumeral:D -`0 #3 } + \exp_after:wN { \exp:w \exp_end_continue_f:w #3 } {#1} {#2} } \use:nn { \cs_new_eq:NN \exp_stop_f: } { ~ } @@ -2212,13 +2214,13 @@ \cs_new:Npn \::V #1 \::: #2#3 { \exp_after:wN \__exp_arg_next:nnn - \exp_after:wN { \tex_romannumeral:D \__exp_eval_register:N #3 } + \exp_after:wN { \exp:w \__exp_eval_register:N #3 } {#1} {#2} } \cs_new:Npn \::v # 1\::: #2#3 { \exp_after:wN \__exp_arg_next:nnn - \exp_after:wN { \tex_romannumeral:D \__exp_eval_register:c {#3} } + \exp_after:wN { \exp:w \__exp_eval_register:c {#3} } {#1} {#2} } \cs_new:Npn \__exp_eval_register:N #1 @@ -2230,7 +2232,7 @@ \else: \exp_after:wN \use_i_ii:nnn \fi: - \exp_after:wN \c_zero \tex_the:D #1 + \exp_after:wN \exp_end: \tex_the:D #1 } \cs_new:Npn \__exp_eval_register:c #1 { \exp_after:wN \__exp_eval_register:N \cs:w #1 \cs_end: } @@ -2239,7 +2241,7 @@ \fi: \fi: \__msg_kernel_expandable_error:nnn { kernel } { bad-variable } {#2} - \c_zero + \exp_end: } \cs_new:Npn \exp_args:No #1#2 { \exp_after:wN #1 \exp_after:wN {#2} } \cs_new:Npn \exp_args:NNo #1#2#3 @@ -2258,34 +2260,34 @@ \cs:w #4 \cs_end: } \cs_new:Npn \exp_args:Nf #1#2 - { \exp_after:wN #1 \exp_after:wN { \tex_romannumeral:D -`0 #2 } } + { \exp_after:wN #1 \exp_after:wN { \exp:w \exp_end_continue_f:w #2 } } \cs_new:Npn \exp_args:Nv #1#2 { \exp_after:wN #1 \exp_after:wN - { \tex_romannumeral:D \__exp_eval_register:c {#2} } + { \exp:w \__exp_eval_register:c {#2} } } \cs_new:Npn \exp_args:NV #1#2 { \exp_after:wN #1 \exp_after:wN - { \tex_romannumeral:D \__exp_eval_register:N #2 } + { \exp:w \__exp_eval_register:N #2 } } \cs_new:Npn \exp_args:NNf #1#2#3 { \exp_after:wN #1 \exp_after:wN #2 - \exp_after:wN { \tex_romannumeral:D -`0 #3 } + \exp_after:wN { \exp:w \exp_end_continue_f:w #3 } } \cs_new:Npn \exp_args:NNv #1#2#3 { \exp_after:wN #1 \exp_after:wN #2 - \exp_after:wN { \tex_romannumeral:D \__exp_eval_register:c {#3} } + \exp_after:wN { \exp:w \__exp_eval_register:c {#3} } } \cs_new:Npn \exp_args:NNV #1#2#3 { \exp_after:wN #1 \exp_after:wN #2 - \exp_after:wN { \tex_romannumeral:D \__exp_eval_register:N #3 } + \exp_after:wN { \exp:w \__exp_eval_register:N #3 } } \cs_new:Npn \exp_args:Nco #1#2#3 { @@ -2297,21 +2299,21 @@ { \exp_after:wN #1 \cs:w #2 \exp_after:wN \cs_end: - \exp_after:wN { \tex_romannumeral:D -`0 #3 } + \exp_after:wN { \exp:w \exp_end_continue_f:w #3 } } \cs_new:Npn \exp_args:NVV #1#2#3 { \exp_after:wN #1 - \exp_after:wN { \tex_romannumeral:D \exp_after:wN + \exp_after:wN { \exp:w \exp_after:wN \__exp_eval_register:N \exp_after:wN #2 \exp_after:wN } - \exp_after:wN { \tex_romannumeral:D \__exp_eval_register:N #3 } + \exp_after:wN { \exp:w \__exp_eval_register:N #3 } } \cs_new:Npn \exp_args:NNNV #1#2#3#4 { \exp_after:wN #1 \exp_after:wN #2 \exp_after:wN #3 - \exp_after:wN { \tex_romannumeral:D \__exp_eval_register:N #4 } + \exp_after:wN { \exp:w \__exp_eval_register:N #4 } } \cs_new:Npn \exp_args:NcNc #1#2#3#4 { @@ -2355,6 +2357,7 @@ \cs_new_nopar:Npn \exp_args:Nnnc { \::n \::n \::c \::: } \cs_new_nopar:Npn \exp_args:Nnno { \::n \::n \::o \::: } \cs_new_nopar:Npn \exp_args:Nooo { \::o \::o \::o \::: } +\cs_new_protected_nopar:Npn \exp_args:NNNx { \::N \::N \::x \::: } \cs_new_protected_nopar:Npn \exp_args:NNnx { \::N \::n \::x \::: } \cs_new_protected_nopar:Npn \exp_args:NNox { \::N \::o \::x \::: } \cs_new_protected_nopar:Npn \exp_args:Nnnx { \::n \::n \::x \::: } @@ -2366,19 +2369,19 @@ \cs_new:Npn \::f_unbraced \::: #1#2 { \exp_after:wN \__exp_arg_last_unbraced:nn - \exp_after:wN { \tex_romannumeral:D -`0 #2 } {#1} + \exp_after:wN { \exp:w \exp_end_continue_f:w #2 } {#1} } \cs_new:Npn \::o_unbraced \::: #1#2 { \exp_after:wN \__exp_arg_last_unbraced:nn \exp_after:wN {#2} {#1} } \cs_new:Npn \::V_unbraced \::: #1#2 { \exp_after:wN \__exp_arg_last_unbraced:nn - \exp_after:wN { \tex_romannumeral:D \__exp_eval_register:N #2 } {#1} + \exp_after:wN { \exp:w \__exp_eval_register:N #2 } {#1} } \cs_new:Npn \::v_unbraced \::: #1#2 { \exp_after:wN \__exp_arg_last_unbraced:nn - \exp_after:wN { \tex_romannumeral:D \__exp_eval_register:c {#2} } {#1} + \exp_after:wN { \exp:w \__exp_eval_register:c {#2} } {#1} } \cs_new_protected:Npn \::x_unbraced \::: #1#2 { @@ -2386,25 +2389,25 @@ \l__exp_internal_tl } \cs_new:Npn \exp_last_unbraced:NV #1#2 - { \exp_after:wN #1 \tex_romannumeral:D \__exp_eval_register:N #2 } + { \exp_after:wN #1 \exp:w \__exp_eval_register:N #2 } \cs_new:Npn \exp_last_unbraced:Nv #1#2 - { \exp_after:wN #1 \tex_romannumeral:D \__exp_eval_register:c {#2} } + { \exp_after:wN #1 \exp:w \__exp_eval_register:c {#2} } \cs_new:Npn \exp_last_unbraced:No #1#2 { \exp_after:wN #1 #2 } \cs_new:Npn \exp_last_unbraced:Nf #1#2 - { \exp_after:wN #1 \tex_romannumeral:D -`0 #2 } + { \exp_after:wN #1 \exp:w \exp_end_continue_f:w #2 } \cs_new:Npn \exp_last_unbraced:Nco #1#2#3 { \exp_after:wN #1 \cs:w #2 \exp_after:wN \cs_end: #3 } \cs_new:Npn \exp_last_unbraced:NcV #1#2#3 { \exp_after:wN #1 \cs:w #2 \exp_after:wN \cs_end: - \tex_romannumeral:D \__exp_eval_register:N #3 + \exp:w \__exp_eval_register:N #3 } \cs_new:Npn \exp_last_unbraced:NNV #1#2#3 { \exp_after:wN #1 \exp_after:wN #2 - \tex_romannumeral:D \__exp_eval_register:N #3 + \exp:w \__exp_eval_register:N #3 } \cs_new:Npn \exp_last_unbraced:NNo #1#2#3 { \exp_after:wN #1 \exp_after:wN #2 #3 } @@ -2413,7 +2416,7 @@ \exp_after:wN #1 \exp_after:wN #2 \exp_after:wN #3 - \tex_romannumeral:D \__exp_eval_register:N #4 + \exp:w \__exp_eval_register:N #4 } \cs_new:Npn \exp_last_unbraced:NNNo #1#2#3#4 { \exp_after:wN #1 \exp_after:wN #2 \exp_after:wN #3 #4 } @@ -2429,17 +2432,22 @@ \cs_new:Npn \exp_not:o #1 { \etex_unexpanded:D \exp_after:wN {#1} } \cs_new:Npn \exp_not:c #1 { \exp_after:wN \exp_not:N \cs:w #1 \cs_end: } \cs_new:Npn \exp_not:f #1 - { \etex_unexpanded:D \exp_after:wN { \tex_romannumeral:D -`0 #1 } } + { \etex_unexpanded:D \exp_after:wN { \exp:w \exp_end_continue_f:w #1 } } \cs_new:Npn \exp_not:V #1 { \etex_unexpanded:D \exp_after:wN - { \tex_romannumeral:D \__exp_eval_register:N #1 } + { \exp:w \__exp_eval_register:N #1 } } \cs_new:Npn \exp_not:v #1 { \etex_unexpanded:D \exp_after:wN - { \tex_romannumeral:D \__exp_eval_register:c {#1} } + { \exp:w \__exp_eval_register:c {#1} } } +\tex_catcode:D `\^^@=13 +\cs_new_protected:Npn \exp_end_continue_f:w {`^^@} +\cs_new:Npn ^^@{\expansionERROR} +\cs_new:Npn \exp_end_continue_f:nw #1 { `^^@ #1 } +\tex_catcode:D `\^^@=15 \cs_new_protected:Npn \cs_generate_variant:Nn #1#2 { \__chk_if_exist_cs:N #1 @@ -2448,37 +2456,36 @@ \exp_after:wN #1 \exp_after:wN \__cs_generate_variant:nnNN \exp_after:wN #1 - \etex_detokenize:D {#2} , \scan_stop: , \q_recursion_stop + \tl_to_str:n {#2} , \scan_stop: , \q_recursion_stop + } +\cs_new_protected:Npx \__cs_generate_variant:N #1 + { + \exp_not:N \exp_after:wN \exp_not:N \if_meaning:w + \exp_not:N \exp_not:N #1 #1 + \cs_set_eq:NN \exp_not:N \__cs_tmp:w \cs_new_protected_nopar:Npx + \exp_not:N \else: + \exp_not:N \exp_after:wN \exp_not:N \__cs_generate_variant:ww + \exp_not:N \token_to_meaning:N #1 \tl_to_str:n { ma } + \exp_not:N \q_mark + \exp_not:N \q_mark \cs_new_protected_nopar:Npx + \tl_to_str:n { pr } + \exp_not:N \q_mark \cs_new_nopar:Npx + \exp_not:N \q_stop + \exp_not:N \fi: } -\group_begin: - \tex_catcode:D `\M = 12 \scan_stop: - \tex_catcode:D `\A = 12 \scan_stop: - \tex_catcode:D `\P = 12 \scan_stop: - \tex_catcode:D `\R = 12 \scan_stop: -\tex_lowercase:D +\use:x { - \group_end: - \cs_new_protected:Npn \__cs_generate_variant:N #1 - { - \exp_after:wN \if_meaning:w \exp_not:N #1 #1 - \cs_set_eq:NN \__cs_tmp:w \cs_new_protected_nopar:Npx - \else: - \exp_after:wN \__cs_generate_variant:ww - \token_to_meaning:N #1 MA \q_mark - \q_mark \cs_new_protected_nopar:Npx - PR - \q_mark \cs_new_nopar:Npx - \q_stop - \fi: - } - \cs_new_protected:Npn \__cs_generate_variant:ww #1 MA #2 \q_mark - { \__cs_generate_variant:wwNw #1 } - \cs_new_protected:Npn \__cs_generate_variant:wwNw - #1 PR #2 \q_mark #3 #4 \q_stop - { - \cs_set_eq:NN \__cs_tmp:w #3 - } + \cs_new_protected:Npn \exp_not:N \__cs_generate_variant:ww + ##1 \tl_to_str:n { ma } ##2 \exp_not:N \q_mark } + { \__cs_generate_variant:wwNw #1 } +\use:x + { + \cs_new_protected:Npn \exp_not:N \__cs_generate_variant:wwNw + ##1 \tl_to_str:n { pr } ##2 \exp_not:N \q_mark + ##3 ##4 \exp_not:N \q_stop + } + { \cs_set_eq:NN \__cs_tmp:w #3 } \cs_new_protected:Npn \__cs_generate_variant:nnNN #1#2#3#4 { \if_meaning:w \c_false_bool #3 @@ -2590,40 +2597,39 @@ \group_end: } { - \iow_log:x + \__chk_log:x { Variant~\token_to_str:N #4~% - already~defined;~ not~ changing~ it~on~line~% - \tex_the:D \tex_inputlineno:D + already~defined;~ not~ changing~ it~ \msg_line_context: } } } -\group_begin: - \tex_catcode:D `\X = 12 \scan_stop: - \tex_lccode:D `\N = `\N \scan_stop: -\tex_lowercase:D +\cs_new_protected:Npx \__cs_generate_internal_variant:n #1 { - \group_end: - \cs_new_protected:Npn \__cs_generate_internal_variant:n #1 - { - \__cs_generate_internal_variant:wwnNwnn - #1 \q_mark - { \cs_set_eq:NN \__cs_tmp:w \cs_new_protected_nopar:Npx } - \cs_new_protected_nopar:cpx - X \q_mark - { } - \cs_new_nopar:cpx - \q_stop - { exp_args:N #1 } - { \__cs_generate_internal_variant_loop:n #1 { : \use_i:nn } } - } - \cs_new_protected:Npn \__cs_generate_internal_variant:wwnNwnn - #1 X #2 \q_mark #3 #4 #5 \q_stop #6 #7 + \exp_not:N \__cs_generate_internal_variant:wwnNwnn + #1 \exp_not:N \q_mark + { \cs_set_eq:NN \exp_not:N \__cs_tmp:w \cs_new_protected_nopar:Npx } + \cs_new_protected_nopar:cpx + \token_to_str:N x \exp_not:N \q_mark + { } + \cs_new_nopar:cpx + \exp_not:N \q_stop + { exp_args:N #1 } { - #3 - \cs_if_free:cT {#6} { #4 {#6} {#7} } + \exp_not:N \__cs_generate_internal_variant_loop:n #1 + { : \exp_not:N \use_i:nn } } } +\use:x + { + \cs_new_protected:Npn \exp_not:N \__cs_generate_internal_variant:wwnNwnn + ##1 \token_to_str:N x ##2 \exp_not:N \q_mark + ##3 ##4 ##5 \exp_not:N \q_stop ##6 ##7 + } + { + #3 + \cs_if_free:cT {#6} { #4 {#6} {#7} } + } \cs_new:Npn \__cs_generate_internal_variant_loop:n #1 { \exp_after:wN \exp_not:N \cs:w :: #1 \cs_end: @@ -2661,7 +2667,7 @@ %% prior consultation with the LaTeX3 Project. %% %% ----------------------------------------------------------------------- -\GetIdInfo$Id: l3tl.dtx 5659 2015-07-14 18:58:00Z joseph $ +\GetIdInfo$Id: l3tl.dtx 5908 2015-09-02 14:50:27Z joseph $ {L3 Token lists} \cs_new_protected:Npn \tl_new:N #1 { @@ -2709,7 +2715,6 @@ \cs_generate_variant:Nn \tl_gconcat:NNN { ccc } \prg_new_eq_conditional:NNn \tl_if_exist:N \cs_if_exist:N { TF , T , F , p } \prg_new_eq_conditional:NNn \tl_if_exist:c \cs_if_exist:c { TF , T , F , p } -%% \tl_const:Nn \c_empty_tl { } \tl_const:Nx \c_job_name_tl { \tex_jobname:D } \tl_const:Nn \c_space_tl { ~ } @@ -2782,7 +2787,7 @@ \tex_ifodd:D \l@expl@check@declarations@bool \cs_set_protected:Npn \__cs_tmp:w #1 { - \if_meaning:w ? #1 + \if_meaning:w \q_recursion_tail #1 \exp_after:wN \use_none_delimit_by_q_recursion_stop:w \fi: \use:x @@ -2806,7 +2811,7 @@ \tl_put_right:No \tl_put_right:Nx \tl_gput_right:Nn \tl_gput_right:NV \tl_gput_right:No \tl_gput_right:Nx - ? \q_recursion_stop + \q_recursion_tail \q_recursion_stop \cs_set_protected:Npn \tl_set_eq:NN #1#2 { \__chk_if_exist_var:N #1 @@ -2845,30 +2850,90 @@ { \group_begin: \exp_args:No \etex_everyeof:D { \c__tl_rescan_marker_tl \exp_not:N } - \tex_endlinechar:D \c_minus_one - \tex_newlinechar:D \c_minus_one + \int_compare:nNnT \tex_endlinechar:D = { 32 } + { \tex_endlinechar:D \c_minus_one } + \tex_newlinechar:D \tex_endlinechar:D #3 \scan_stop: - \use:x - { - \group_end: - #1 \exp_not:N #2 - { - \exp_after:wN \__tl_rescan:w - \exp_after:wN \prg_do_nothing: - \etex_scantokens:D {#4} - } - } + \exp_args:No \__tl_set_rescan:n { \tl_to_str:n {#4} } + \exp_args:NNNo + \group_end: + #1 #2 \l__tl_internal_a_tl } -\use:x +\cs_new_protected:Npn \__tl_set_rescan_multi:n #1 { - \cs_new:Npn \exp_not:N \__tl_rescan:w ##1 - \c__tl_rescan_marker_tl - { \exp_not:N \exp_not:o { ##1 } } + \tl_set:Nx \l__tl_internal_a_tl + { + \exp_after:wN \__tl_rescan:w + \exp_after:wN \prg_do_nothing: + \etex_scantokens:D {#1} + } } +\exp_args:Nno \use:nn + { \cs_new:Npn \__tl_rescan:w #1 } \c__tl_rescan_marker_tl + { \exp_not:o {#1} } \cs_generate_variant:Nn \tl_set_rescan:Nnn { Nno , Nnx } \cs_generate_variant:Nn \tl_set_rescan:Nnn { c , cno , cnx } \cs_generate_variant:Nn \tl_gset_rescan:Nnn { Nno , Nnx } \cs_generate_variant:Nn \tl_gset_rescan:Nnn { c , cno } +\group_begin: + \tex_catcode:D `\^^@ = 12 \scan_stop: + \cs_new_protected:Npn \__tl_set_rescan:n #1 + { + \int_compare:nNnTF \tex_newlinechar:D < \c_zero + { \use_ii:nn } + { + \char_set_lccode:nn { 0 } { \tex_newlinechar:D } + \tl_to_lowercase:n { \__tl_set_rescan:NnTF ^^@ } {#1} + } + { \__tl_set_rescan_multi:n } + { \__tl_set_rescan_single:nn { ' } } + {#1} + } + \cs_new_protected:Npn \__tl_set_rescan:NnTF #1#2 + { \tl_if_in:nnTF {#2} {#1} } + \cs_new_protected:Npn \__tl_set_rescan_single:nn #1 + { + \int_compare:nNnTF + { \char_value_catcode:n { `#1 } / \c_three } = \c_four + { \__tl_set_rescan_single_aux:nn {#1} } + { + \int_compare:nNnTF { `#1 } < { `\~ } + { + \char_set_lccode:nn { 0 } { `#1 + 1 } + \tl_to_lowercase:n { \__tl_set_rescan_single:nn { ^^@ } } + } + { \__tl_set_rescan_single_aux:nn { } } + } + } + \cs_new_protected:Npn \__tl_set_rescan_single_aux:nn #1#2 + { + \tex_endlinechar:D \c_minus_one + \use:x + { + \exp_not:N \use:n + { + \exp_not:n { \cs_set:Npn \__tl_rescan:w ##1 } + \exp_after:wN \__tl_rescan:w + \exp_after:wN \prg_do_nothing: + \etex_scantokens:D {#1} + } + \c__tl_rescan_marker_tl + } + { \exp_not:o {##1} } + \tl_set:Nx \l__tl_internal_a_tl + { + \int_compare:nNnT + { + \char_value_catcode:n + { \exp_last_unbraced:Nf ` \str_head:n {#2} ~ } + } + = \c_ten { ~ } + \exp_after:wN \__tl_rescan:w + \exp_after:wN \prg_do_nothing: + \etex_scantokens:D { #2 #1 } + } + } +\group_end: \cs_new_protected:Npn \tl_to_lowercase:n #1 { \tex_lowercase:D {#1} } \cs_new_protected:Npn \tl_to_uppercase:n #1 @@ -2990,7 +3055,7 @@ \cs_new:Npn \__tl_if_empty_return:o #1 { \exp_after:wN \if_meaning:w \exp_after:wN \q_nil - \tl_to_str:n \exp_after:wN {#1} \q_nil + \etex_detokenize:D \exp_after:wN {#1} \q_nil \prg_return_true: \else: \prg_return_false: @@ -3058,22 +3123,22 @@ \cs_new:Npn \__tl_if_single:nnw #1#2#3 \q_stop {#2} \cs_new:Npn \tl_case:Nn #1#2 { - \tex_romannumeral:D + \exp:w \__tl_case:NnTF #1 {#2} { } { } } \cs_new:Npn \tl_case:NnT #1#2#3 { - \tex_romannumeral:D + \exp:w \__tl_case:NnTF #1 {#2} {#3} { } } \cs_new:Npn \tl_case:NnF #1#2#3 { - \tex_romannumeral:D + \exp:w \__tl_case:NnTF #1 {#2} { } {#3} } \cs_new:Npn \tl_case:NnTF #1#2 { - \tex_romannumeral:D + \exp:w \__tl_case:NnTF #1 {#2} } \cs_new:Npn \__tl_case:NnTF #1#2#3#4 @@ -3137,7 +3202,6 @@ { \__prg_map_break:Nn \tl_map_break: { } } \cs_new_nopar:Npn \tl_map_break:n { \__prg_map_break:Nn \tl_map_break: } -\cs_new_eq:NN \tl_to_str:n \etex_detokenize:D \cs_new:Npn \tl_to_str:N #1 { \etex_detokenize:D \exp_after:wN {#1} } \cs_generate_variant:Nn \tl_to_str:N { c } \cs_new:Npn \tl_use:N #1 @@ -3252,7 +3316,7 @@ {#3} #4 } \cs_new:Npn \__tl_act_end:wn #1 \__tl_act_result:n #2 - { \group_align_safe_end: \c_zero #2 } + { \group_align_safe_end: \exp_end: #2 } \cs_new:Npn \__tl_act_group:nwnNNN #1 #2 \q__tl_act_stop #3#4#5 { #5 {#3} {#1} @@ -3274,7 +3338,7 @@ { \etex_unexpanded:D \exp_after:wN { - \tex_romannumeral:D + \exp:w \__tl_act:NNNnn \__tl_reverse_normal:nN \__tl_reverse_group_preserve:nn @@ -3432,14 +3496,14 @@ } \prg_new_conditional:Npnn \tl_if_head_is_space:n #1 { p , T , F , TF } { - \tex_romannumeral:D \if_false: { \fi: + \exp:w \if_false: { \fi: \__tl_if_head_is_space:w ? #1 ? ~ } } \cs_new:Npn \__tl_if_head_is_space:w #1 ~ { \tl_if_empty:oTF { \use_none:n #1 } - { \exp_after:wN \c_zero \exp_after:wN \prg_return_true: } - { \exp_after:wN \c_zero \exp_after:wN \prg_return_false: } + { \exp_after:wN \exp_end: \exp_after:wN \prg_return_true: } + { \exp_after:wN \exp_end: \exp_after:wN \prg_return_false: } \exp_after:wN \use_none:n \exp_after:wN { \if_false: } \fi: } \cs_new:Npn \tl_item:nn #1#2 @@ -3468,16 +3532,12 @@ \cs_generate_variant:Nn \tl_item:Nn { c } \cs_new_protected:Npn \tl_show:N #1 { - \tl_if_exist:NTF #1 - { \cs_show:N #1 } - { - \__msg_kernel_error:nnx { kernel } { variable-not-defined } - { \token_to_str:N #1 } - } + \__msg_show_variable:NNNnn #1 \tl_if_exist:NTF ? { } + { > ~ \token_to_str:N #1 = \tl_to_str:N #1 } } \cs_generate_variant:Nn \tl_show:N { c } \cs_new_protected:Npn \tl_show:n #1 - { \__msg_show_variable:n { > ~ \tl_to_str:n {#1} } } + { \__msg_show_wrap:n { > ~ \tl_to_str:n {#1} } } \tl_new:N \g_tmpa_tl \tl_new:N \g_tmpb_tl \tl_new:N \l_tmpa_tl @@ -3514,7 +3574,7 @@ %% prior consultation with the LaTeX3 Project. %% %% ----------------------------------------------------------------------- -\GetIdInfo$Id: l3str.dtx 5659 2015-07-14 18:58:00Z joseph $ +\GetIdInfo$Id: l3str.dtx 5920 2015-09-05 07:55:06Z joseph $ {L3 Strings} \cs_new:Npn \str_head:n #1 { @@ -3583,22 +3643,22 @@ } \cs_new:Npn \str_case:nn #1#2 { - \tex_romannumeral:D + \exp:w \__str_case:nnTF {#1} {#2} { } { } } \cs_new:Npn \str_case:nnT #1#2#3 { - \tex_romannumeral:D + \exp:w \__str_case:nnTF {#1} {#2} {#3} { } } \cs_new:Npn \str_case:nnF #1#2 { - \tex_romannumeral:D + \exp:w \__str_case:nnTF {#1} {#2} { } } \cs_new:Npn \str_case:nnTF #1#2 { - \tex_romannumeral:D + \exp:w \__str_case:nnTF {#1} {#2} } \cs_new:Npn \__str_case:nnTF #1#2#3#4 @@ -3615,22 +3675,22 @@ } \cs_new:Npn \str_case_x:nn #1#2 { - \tex_romannumeral:D + \exp:w \__str_case_x:nnTF {#1} {#2} { } { } } \cs_new:Npn \str_case_x:nnT #1#2#3 { - \tex_romannumeral:D + \exp:w \__str_case_x:nnTF {#1} {#2} {#3} { } } \cs_new:Npn \str_case_x:nnF #1#2 { - \tex_romannumeral:D + \exp:w \__str_case_x:nnTF {#1} {#2} { } } \cs_new:Npn \str_case_x:nnTF #1#2 { - \tex_romannumeral:D + \exp:w \__str_case_x:nnTF {#1} {#2} } \cs_new:Npn \__str_case_x:nnTF #1#2#3#4 @@ -3645,6 +3705,7 @@ \cs_new:Npn \str_fold_case:n #1 { \__str_change_case:nn {#1} { fold } } \cs_new:Npn \str_lower_case:n #1 { \__str_change_case:nn {#1} { lower } } \cs_new:Npn \str_upper_case:n #1 { \__str_change_case:nn {#1} { upper } } +\cs_generate_variant:Nn \str_fold_case:n { V } \cs_generate_variant:Nn \str_lower_case:n { f } \cs_generate_variant:Nn \str_upper_case:n { f } \cs_new:Npn \__str_change_case:nn #1 @@ -3717,7 +3778,7 @@ %% prior consultation with the LaTeX3 Project. %% %% ----------------------------------------------------------------------- -\GetIdInfo$Id: l3seq.dtx 5681 2015-07-24 03:01:31Z bruno $ +\GetIdInfo$Id: l3seq.dtx 5777 2015-08-05 02:32:21Z bruno $ {L3 Sequences and stacks} \cs_new:Npn \__seq_item:n { @@ -4237,7 +4298,8 @@ \prg_new_eq_conditional:NNn \seq_gpop:cN \seq_gpop_left:cN { T , F , TF } \cs_new_protected:Npn \seq_show:N #1 { - \__msg_show_variable:Nnn #1 { seq } + \__msg_show_variable:NNNnn #1 + \seq_if_exist:NTF \seq_if_empty:NTF { seq } { \seq_map_function:NN #1 \__msg_show_item:n } } \cs_generate_variant:Nn \seq_show:N { c } @@ -4277,7 +4339,7 @@ %% prior consultation with the LaTeX3 Project. %% %% ----------------------------------------------------------------------- -\GetIdInfo$Id: l3int.dtx 5659 2015-07-14 18:58:00Z joseph $ +\GetIdInfo$Id: l3int.dtx 5885 2015-08-24 13:29:14Z mittelba $ {L3 Integers} \cs_new_eq:NN \__int_value:w \tex_number:D \cs_new_eq:NN \__int_eval:w \etex_numexpr:D @@ -4515,22 +4577,22 @@ } \cs_new:Npn \int_case:nnTF #1 { - \tex_romannumeral:D + \exp:w \exp_args:Nf \__int_case:nnTF { \int_eval:n {#1} } } \cs_new:Npn \int_case:nnT #1#2#3 { - \tex_romannumeral:D + \exp:w \exp_args:Nf \__int_case:nnTF { \int_eval:n {#1} } {#2} {#3} { } } \cs_new:Npn \int_case:nnF #1#2 { - \tex_romannumeral:D + \exp:w \exp_args:Nf \__int_case:nnTF { \int_eval:n {#1} } {#2} { } } \cs_new:Npn \int_case:nn #1#2 { - \tex_romannumeral:D + \exp:w \exp_args:Nf \__int_case:nnTF { \int_eval:n {#1} } {#2} { } { } } \cs_new:Npn \__int_case:nnTF #1#2#3#4 @@ -5025,10 +5087,18 @@ } \cs_new:Npn \__int_from_roman_error:w #1 \q_recursion_stop #2 { #2 * \c_zero - \c_one } -\cs_new_eq:NN \int_show:N \__kernel_register_show:N -\cs_new_eq:NN \int_show:c \__kernel_register_show:c -\cs_new_protected:Npn \int_show:n #1 - { \etex_showtokens:D \exp_after:wN { \int_use:N \__int_eval:w #1 } } +\cs_new_protected:Npn \int_show:N #1 + { + \use:x + { + \exp_not:n + { \__msg_show_variable:NNNnn #1 \cs_if_exist:NTF ? { } } + { > ~ \token_to_str:N #1 = \tex_the:D #1 } + } + } +\cs_generate_variant:Nn \int_show:N { c } +\cs_new_protected_nopar:Npn \int_show:n + { \__msg_show_wrap:Nn \int_eval:n } \int_const:Nn \c_one { 1 } \int_const:Nn \c_two { 2 } \int_const:Nn \c_three { 3 } @@ -5093,7 +5163,7 @@ %% prior consultation with the LaTeX3 Project. %% %% ----------------------------------------------------------------------- -\GetIdInfo$Id: l3quark.dtx 5659 2015-07-14 18:58:00Z joseph $ +\GetIdInfo$Id: l3quark.dtx 5855 2015-08-17 17:22:56Z mittelba $ {L3 Quarks} \cs_new_protected:Npn \quark_new:N #1 { \tl_const:Nn #1 {#1} } \quark_new:N \q_nil @@ -5233,11 +5303,11 @@ %% prior consultation with the LaTeX3 Project. %% %% ----------------------------------------------------------------------- -\GetIdInfo$Id: l3prg.dtx 5722 2015-07-30 12:54:33Z bruno $ +\GetIdInfo$Id: l3prg.dtx 5891 2015-08-25 08:00:59Z mittelba $ {L3 Control structures} %% -\tex_let:D \if_bool:N \tex_ifodd:D -\tex_let:D \if_predicate:w \tex_ifodd:D +\cs_new_eq:NN \if_bool:N \tex_ifodd:D +\cs_new_eq:NN \if_predicate:w \tex_ifodd:D \cs_new_protected:Npn \bool_new:N #1 { \cs_new_eq:NN #1 \c_false_bool } \cs_generate_variant:Nn \bool_new:N { c } \cs_new_protected:Npn \bool_set_true:N #1 @@ -5266,7 +5336,7 @@ { \tex_global:D \tex_chardef:D #1 = \bool_if_p:n {#2} } \cs_generate_variant:Nn \bool_set:Nn { c } \cs_generate_variant:Nn \bool_gset:Nn { c } -\tex_ifodd:D \l@expl@check@declarations@bool +\if_bool:N \l@expl@check@declarations@bool \cs_set_protected:Npn \bool_set_true:N #1 { \__chk_if_exist_var:N #1 @@ -5307,7 +5377,7 @@ \__chk_if_exist_var:N #1 \tex_global:D \tex_chardef:D #1 = \bool_if_p:n {#2} } -\tex_fi:D +\fi: \prg_new_conditional:Npnn \bool_if:N #1 { p , T , F , TF } { \if_meaning:w \c_true_bool #1 @@ -5322,22 +5392,13 @@ \cs_generate_variant:Nn \bool_if:NTF { c } \cs_new_protected:Npn \bool_show:N #1 { - \bool_if_exist:NTF #1 - { - \__msg_show_variable:n - { > \token_to_str:N #1 = \bool_if:NTF #1 { true } { false } } - } - { - \__msg_kernel_error:nnx { kernel } { variable-not-defined } - { \token_to_str:N #1 } - } - } -\cs_new_protected:Npn \bool_show:n #1 - { - \bool_if:nTF {#1} - { \__msg_show_variable:n { > ~ true } } - { \__msg_show_variable:n { > ~ false } } + \__msg_show_variable:NNNnn #1 \bool_if_exist:NTF ? { } + { > ~ \token_to_str:N #1 = \__bool_to_str:n {#1} } } +\cs_new_protected_nopar:Npn \bool_show:n + { \__msg_show_wrap:Nn \__bool_to_str:n } +\cs_new:Npn \__bool_to_str:n #1 + { \bool_if:nTF {#1} { true } { false } } \cs_generate_variant:Nn \bool_show:N { c } \bool_new:N \l_tmpa_bool \bool_new:N \l_tmpb_bool @@ -5477,7 +5538,7 @@ } \cs_new:Npn \prg_replicate:nn #1 { - \__int_to_roman:w + \exp:w \exp_after:wN \__prg_replicate_first:N \__int_value:w \__int_eval:w #1 \__int_eval_end: \cs_end: @@ -5509,19 +5570,19 @@ { \cs_end: {#1#1#1#1#1#1#1#1#1#1} #1#1#1#1#1#1#1#1#1 } \cs_new:cpn { __prg_replicate_first_-:n } #1 { - \c_zero + \exp_end: \__msg_kernel_expandable_error:nn { kernel } { negative-replication } } -\cs_new:cpn { __prg_replicate_first_0:n } #1 { \c_zero } -\cs_new:cpn { __prg_replicate_first_1:n } #1 { \c_zero #1 } -\cs_new:cpn { __prg_replicate_first_2:n } #1 { \c_zero #1#1 } -\cs_new:cpn { __prg_replicate_first_3:n } #1 { \c_zero #1#1#1 } -\cs_new:cpn { __prg_replicate_first_4:n } #1 { \c_zero #1#1#1#1 } -\cs_new:cpn { __prg_replicate_first_5:n } #1 { \c_zero #1#1#1#1#1 } -\cs_new:cpn { __prg_replicate_first_6:n } #1 { \c_zero #1#1#1#1#1#1 } -\cs_new:cpn { __prg_replicate_first_7:n } #1 { \c_zero #1#1#1#1#1#1#1 } -\cs_new:cpn { __prg_replicate_first_8:n } #1 { \c_zero #1#1#1#1#1#1#1#1 } -\cs_new:cpn { __prg_replicate_first_9:n } #1 { \c_zero #1#1#1#1#1#1#1#1#1 } +\cs_new:cpn { __prg_replicate_first_0:n } #1 { \exp_end: } +\cs_new:cpn { __prg_replicate_first_1:n } #1 { \exp_end: #1 } +\cs_new:cpn { __prg_replicate_first_2:n } #1 { \exp_end: #1#1 } +\cs_new:cpn { __prg_replicate_first_3:n } #1 { \exp_end: #1#1#1 } +\cs_new:cpn { __prg_replicate_first_4:n } #1 { \exp_end: #1#1#1#1 } +\cs_new:cpn { __prg_replicate_first_5:n } #1 { \exp_end: #1#1#1#1#1 } +\cs_new:cpn { __prg_replicate_first_6:n } #1 { \exp_end: #1#1#1#1#1#1 } +\cs_new:cpn { __prg_replicate_first_7:n } #1 { \exp_end: #1#1#1#1#1#1#1 } +\cs_new:cpn { __prg_replicate_first_8:n } #1 { \exp_end: #1#1#1#1#1#1#1#1 } +\cs_new:cpn { __prg_replicate_first_9:n } #1 { \exp_end: #1#1#1#1#1#1#1#1#1 } \prg_new_conditional:Npnn \mode_if_vertical: { p , T , F , TF } { \if_mode_vertical: \prg_return_true: \else: \prg_return_false: \fi: } \prg_new_conditional:Npnn \mode_if_horizontal: { p , T , F , TF } @@ -5534,44 +5595,11 @@ { \if_int_compare:w \if_false: { \fi: `} = \c_zero \fi: } \cs_new_nopar:Npn \group_align_safe_end: { \if_int_compare:w `{ = \c_zero } \fi: } -\cs_new_protected_nopar:Npn \scan_align_safe_stop: { } -\group_begin: - \tex_lccode:D `* = `g \scan_stop: - \tex_catcode:D `* = \c_twelve -\tl_to_lowercase:n - { - \group_end: - \cs_new:Npn \__prg_variable_get_scope:N #1 - { - \exp_after:wN \exp_after:wN - \exp_after:wN \__prg_variable_get_scope:w - \cs_to_str:N #1 \exp_stop_f: \q_stop - } - \cs_new:Npn \__prg_variable_get_scope:w #1#2 \q_stop - { \token_if_eq_meaning:NNT * #1 { g } } - } -\group_begin: - \tex_lccode:D `* = `_ \scan_stop: - \tex_catcode:D `* = \c_twelve -\tl_to_lowercase:n - { - \group_end: - \cs_new:Npn \__prg_variable_get_type:N #1 - { - \exp_after:wN \__prg_variable_get_type:w - \token_to_str:N #1 * a \q_stop - } - \cs_new:Npn \__prg_variable_get_type:w #1 * #2#3 \q_stop - { - \token_if_eq_meaning:NNTF a #2 - {#1} - { \__prg_variable_get_type:w #2#3 \q_stop } - } - } \int_new:N \g__prg_map_int +\cs_new_protected_nopar:Npn \scan_align_safe_stop: { } %% File: l3clist.dtx Copyright (C) 2004-2011 Frank Mittelbach, %% The LaTeX3 project -%% (C) 2012-2014 The LaTeX3 Project +%% (C) 2012-2015 The LaTeX3 Project %% %% It may be distributed and/or modified under the conditions of the %% LaTeX Project Public License (LPPL), either version 1.3c of this @@ -5603,7 +5631,7 @@ %% prior consultation with the LaTeX3 Project. %% %% ----------------------------------------------------------------------- -\GetIdInfo$Id: l3clist.dtx 5354 2014-08-23 01:35:39Z bruno $ +\GetIdInfo$Id: l3clist.dtx 5901 2015-09-02 05:59:23Z joseph $ {L3 Comma separated lists} \cs_new_eq:NN \c_empty_clist \c_empty_tl \tl_new:N \l__clist_internal_clist @@ -6125,20 +6153,23 @@ \cs_new:Npn \__clist_item_n_strip:w #1 , { \exp_not:n {#1} } \cs_new_protected:Npn \clist_show:N #1 { - \__msg_show_variable:Nnn #1 { clist } + \__msg_show_variable:NNNnn #1 + \clist_if_exist:NTF \clist_if_empty:NTF { clist } { \clist_map_function:NN #1 \__msg_show_item:n } } \cs_new_protected:Npn \clist_show:n #1 { - \clist_set:Nn \l__clist_internal_clist {#1} - \clist_show:N \l__clist_internal_clist + \__msg_show_pre:nnxxxx { LaTeX / kernel } { show-clist } + { } { \clist_if_empty:nF {#1} { ? } } { } { } + \__msg_show_wrap:n + { \clist_map_function:nN {#1} \__msg_show_item:n } } \cs_generate_variant:Nn \clist_show:N { c } \clist_new:N \l_tmpa_clist \clist_new:N \l_tmpb_clist \clist_new:N \g_tmpa_clist \clist_new:N \g_tmpb_clist -%% File: l3token.dtx Copyright (C) 2005-2014 The LaTeX3 Project +%% File: l3token.dtx Copyright (C) 2005-2015 The LaTeX3 Project %% %% It may be distributed and/or modified under the conditions of the %% LaTeX Project Public License (LPPL), either version 1.3c of this @@ -6170,14 +6201,80 @@ %% prior consultation with the LaTeX3 Project. %% %% ----------------------------------------------------------------------- -\GetIdInfo$Id: l3token.dtx 5422 2014-09-15 10:44:23Z joseph $ +\GetIdInfo$Id: l3token.dtx 5893 2015-08-26 16:16:52Z mittelba $ {L3 Experimental token manipulation} +\group_begin: +\tex_catcode:D `@ = \c_eleven +\tex_catcode:D \c_zero = \c_twelve \cs_new_protected:Npn \char_set_catcode:nn #1#2 - { \tex_catcode:D #1 = \__int_eval:w #2 \__int_eval_end: } + { + \group_begin: + \char_set_lccode:nn { 0 } {#1} + \tl_to_lowercase:n + { \group_end: \__char_set_catcode:Nn ^^@ } {#2} + } +\tex_catcode:D \c_zero = \c_thirteen +\cs_new_protected:Npn \__char_set_catcode:Nn #1#2 + { + \int_compare:nNnTF { \tex_catcode:D `#1 / \c_two } = \c_six + { + \__char_set_catcode:NnNNN #1 {#2} \int_compare:nNnF + \tl_put_right:Nn \seq_put_right:Nn + } + { + \__char_set_catcode:NnNNN #1 {#2} \int_compare:nNnT + \tl_remove_all:Nn \seq_remove_all:Nn + } + \int_compare:nNnT { \tex_catcode:D `#1 } = \c_thirteen + { + \group_begin: + \char_set_lccode:nn { 0 } { `#1 } + \tl_to_lowercase:n + { + \group_end: + \seq_if_in:NnF \l_char_active_seq { ^^@ } + { \seq_put_right:Nn \l_char_active_seq { ^^@ } } + } + } + } +\cs_new_protected:Npn \__char_set_catcode:NnNNN #1#2#3#4#5 + { + \tex_catcode:D `#1 = \__int_eval:w #2 \__int_eval_end: + #3 { \tex_catcode:D `#1 / \c_two } = \c_six + { + \group_begin: \exp_args:NNc \group_end: + \__char_set_catcode:NNN {#1} #4 #5 + } + } +\exp_args:Nnf \use:n + { \cs_new_protected:Npn \__char_set_catcode:NNN #1#2#3 } + { + \tl_if_exist:NT \dospecials + { + \tl_if_exist:NT \@sanitize { #2 \@sanitize { \@makeother #1 } } + #2 \dospecials { \do #1 } + } + #3 \l_char_special_seq {#1} + } +\tl_if_exist:NT \@sanitize + { + \exp_args:Nno \use:n + { \cs_gset_protected:Npn \__char_set_catcode:Nn #1#2 } + { + \__char_set_catcode:Nn {#1} {#2} + \int_compare:nNnT { \tex_catcode:D `#1 / \c_two } = \c_one + { + \group_begin: \exp_args:NNNx \group_end: + \tl_remove_all:Nn \@sanitize + { \exp_not:N \@makeother \exp_not:c {#1} } + } + } + } \cs_new:Npn \char_value_catcode:n #1 { \tex_the:D \tex_catcode:D \__int_eval:w #1\__int_eval_end: } \cs_new_protected:Npn \char_show_value_catcode:n #1 - { \int_show:n { \char_value_catcode:n {#1} } } + { \__msg_show_wrap:n { > ~ \char_value_catcode:n {#1} } } +\group_end: \cs_new_protected:Npn \char_set_catcode_escape:N #1 { \char_set_catcode:nn { `#1 } \c_zero } \cs_new_protected:Npn \char_set_catcode_group_begin:N #1 @@ -6243,29 +6340,61 @@ \cs_new_protected:Npn \char_set_catcode_invalid:n #1 { \char_set_catcode:nn {#1} \c_fifteen } \cs_new_protected:Npn \char_set_mathcode:nn #1#2 - { \tex_mathcode:D #1 = \__int_eval:w #2 \__int_eval_end: } + { + \tex_mathcode:D \__int_eval:w #1 \__int_eval_end: + = \__int_eval:w #2 \__int_eval_end: + } \cs_new:Npn \char_value_mathcode:n #1 { \tex_the:D \tex_mathcode:D \__int_eval:w #1\__int_eval_end: } \cs_new_protected:Npn \char_show_value_mathcode:n #1 - { \int_show:n { \char_value_mathcode:n {#1} } } + { \__msg_show_wrap:n { > ~ \char_value_mathcode:n {#1} } } \cs_new_protected:Npn \char_set_lccode:nn #1#2 - { \tex_lccode:D #1 = \__int_eval:w #2 \__int_eval_end: } + { + \tex_lccode:D \__int_eval:w #1 \__int_eval_end: + = \__int_eval:w #2 \__int_eval_end: + } \cs_new:Npn \char_value_lccode:n #1 { \tex_the:D \tex_lccode:D \__int_eval:w #1\__int_eval_end: } \cs_new_protected:Npn \char_show_value_lccode:n #1 - { \int_show:n { \char_value_lccode:n {#1} } } + { \__msg_show_wrap:n { > ~ \char_value_lccode:n {#1} } } \cs_new_protected:Npn \char_set_uccode:nn #1#2 - { \tex_uccode:D #1 = \__int_eval:w #2 \__int_eval_end: } + { + \tex_uccode:D \__int_eval:w #1 \__int_eval_end: + = \__int_eval:w #2 \__int_eval_end: + } \cs_new:Npn \char_value_uccode:n #1 { \tex_the:D \tex_uccode:D \__int_eval:w #1\__int_eval_end: } \cs_new_protected:Npn \char_show_value_uccode:n #1 - { \int_show:n { \char_value_uccode:n {#1} } } + { \__msg_show_wrap:n { > ~ \char_value_uccode:n {#1} } } \cs_new_protected:Npn \char_set_sfcode:nn #1#2 - { \tex_sfcode:D #1 = \__int_eval:w #2 \__int_eval_end: } + { + \tex_sfcode:D \__int_eval:w #1 \__int_eval_end: + = \__int_eval:w #2 \__int_eval_end: + } \cs_new:Npn \char_value_sfcode:n #1 { \tex_the:D \tex_sfcode:D \__int_eval:w #1\__int_eval_end: } \cs_new_protected:Npn \char_show_value_sfcode:n #1 - { \int_show:n { \char_value_sfcode:n {#1} } } + { \__msg_show_wrap:n { > ~ \char_value_sfcode:n {#1} } } +\seq_new:N \l_char_special_seq +\seq_set_split:Nnn \l_char_special_seq { } + { \ \" \# \$ \% \& \\ \^ \_ \{ \} \~ } +\seq_new:N \l_char_active_seq +\use:n + { + \group_begin: + \char_set_catcode_active:N \" + \char_set_catcode_active:N \$ + \char_set_catcode_active:N \& + \char_set_catcode_active:N \^ + \char_set_catcode_active:N \_ + \char_set_catcode_active:N \~ + \use:nn + { + \group_end: + \seq_set_split:Nnn \l_char_active_seq { } + } + } + { { " $ & ^ _ ~ } } %$ \cs_new_protected:Npn \token_new:Nn #1#2 { \cs_new_eq:NN #1 #2 } \group_begin: \__chk_if_free_cs:N \c_group_begin_token @@ -6289,26 +6418,6 @@ \char_set_catcode_active:N \* \tl_const:Nn \c_catcode_active_tl { \exp_not:N * } \group_end: -\seq_new:N \l_char_active_seq -\use:n - { - \group_begin: - \char_set_catcode_active:N \" - \char_set_catcode_active:N \$ - \char_set_catcode_active:N \& - \char_set_catcode_active:N \^ - \char_set_catcode_active:N \_ - \char_set_catcode_active:N \~ - \use:nn - { - \group_end: - \seq_set_split:Nnn \l_char_active_seq { } - } - } - { { " $ & ^ _ ~ } } %$ -\seq_new:N \l_char_special_seq -\seq_set_split:Nnn \l_char_special_seq { } - { \ \" \# \$ \% \& \\ \^ \_ \{ \} \~ } \prg_new_conditional:Npnn \token_if_group_begin:N #1 { p , T , F , TF } { \if_catcode:w \exp_not:N #1 \c_group_begin_token @@ -6747,7 +6856,7 @@ \if_meaning:w \l_peek_token \c_space_token \exp_after:wN \peek_after:Nw \exp_after:wN \__peek_ignore_spaces_execute_branches: - \tex_romannumeral:D -`0 + \exp:w \exp_end_continue_f:w \else: \exp_after:wN \__peek_execute_branches: \fi: @@ -6849,7 +6958,7 @@ } { \scan_stop: } } -%% File: l3prop.dtx Copyright (C) 1990-2014 The LaTeX3 Project +%% File: l3prop.dtx Copyright (C) 1990-2015 The LaTeX3 Project %% %% It may be distributed and/or modified under the conditions of the %% LaTeX Project Public License (LPPL), either version 1.3c of this @@ -6881,7 +6990,7 @@ %% prior consultation with the LaTeX3 Project. %% %% ----------------------------------------------------------------------- -\GetIdInfo$Id: l3prop.dtx 5354 2014-08-23 01:35:39Z bruno $ +\GetIdInfo$Id: l3prop.dtx 5777 2015-08-05 02:32:21Z bruno $ {L3 Property lists} \__scan_new:N \s__prop \cs_new:Npn \__prop_pair:wn #1 \s__prop #2 @@ -7147,7 +7256,8 @@ { \__prg_map_break:Nn \prop_map_break: } \cs_new_protected:Npn \prop_show:N #1 { - \__msg_show_variable:Nnn #1 { prop } + \__msg_show_variable:NNNnn #1 + \prop_if_exist:NTF \prop_if_empty:NTF { prop } { \prop_map_function:NN #1 \__msg_show_item:nn } } \cs_generate_variant:Nn \prop_show:N { c } @@ -7185,7 +7295,7 @@ %% prior consultation with the LaTeX3 Project. %% %% ----------------------------------------------------------------------- -\GetIdInfo$Id: l3msg.dtx 5537 2015-02-26 21:25:23Z joseph $ +\GetIdInfo$Id: l3msg.dtx 5891 2015-08-25 08:00:59Z mittelba $ {L3 Messages} \tl_new:N \l__msg_internal_tl \tl_const:Nn \c__msg_text_prefix_tl { msg~text~>~ } @@ -7203,7 +7313,7 @@ {#1} {#2} } } -\tex_ifodd:D \l@expl@log@functions@bool +\if_bool:N \l@expl@log@functions@bool \cs_gset_protected:Npn \__chk_if_free_msg:nn #1#2 { \msg_if_exist:nnT {#1} {#2} @@ -7211,7 +7321,7 @@ \__msg_kernel_error:nnxx { kernel } { message-already-defined } {#1} {#2} } - \iow_log:x { Defining~message~ #1 / #2 ~\msg_line_context: } + \__chk_log:x { Defining~message~ #1 / #2 ~\msg_line_context: } } \fi: \cs_new_protected:Npn \msg_new:nnnn #1#2 @@ -7810,30 +7920,36 @@ { Zero~step~size~for~step~function~#1. } \__msg_kernel_new:nnn { kernel } { show-clist } { - The~comma~list~ - \str_if_eq:nnF {#1} { \l__clist_internal_clist } { \token_to_str:N #1~} - \clist_if_empty:NTF #1 + The~comma~list~ \tl_if_empty:nF {#1} { #1 ~ } + \tl_if_empty:nTF {#2} { is~empty } { contains~the~items~(without~outer~braces): } } \__msg_kernel_new:nnn { kernel } { show-prop } { - The~property~list~\token_to_str:N #1~ - \prop_if_empty:NTF #1 + The~property~list~#1~ + \tl_if_empty:nTF {#2} { is~empty } { contains~the~pairs~(without~outer~braces): } } \__msg_kernel_new:nnn { kernel } { show-seq } { - The~sequence~\token_to_str:N #1~ - \seq_if_empty:NTF #1 + The~sequence~#1~ + \tl_if_empty:nTF {#2} { is~empty } { contains~the~items~(without~outer~braces): } } -\__msg_kernel_new:nnn { kernel } { show-no-stream } - { No~ #1 ~streams~are~open } -\__msg_kernel_new:nnn { kernel } { show-open-streams } - { The~following~ #1 ~streams~are~in~use: } +\__msg_kernel_new:nnn { kernel } { show-streams } + { + \tl_if_empty:nTF {#2} { No~ } { The~following~ } + \str_case:nn {#1} + { + { ior } { input ~ } + { iow } { output ~ } + } + streams~are~ + \tl_if_empty:nTF {#2} { open } { in~use: } + } \group_begin: \char_set_catcode_math_superscript:N \^ \char_set_lccode:nn { `^ } { `\ } @@ -7846,11 +7962,11 @@ { \exp_not:n { - \tex_romannumeral:D + \exp:w \exp_after:wN \exp_after:wN \exp_after:wN \__msg_expandable_error:w \exp_after:wN \exp_after:wN - \exp_after:wN \c_zero + \exp_after:wN \exp_end: } \exp_not:N \use:n { \exp_not:c { LaTeX3~error: } ^ #1 } ^ } @@ -7886,48 +8002,72 @@ \__msg_kernel_expandable_error:nnnnnn {#1} {#2} { } { } { } { } } -\cs_new_protected:Npn \__msg_term:nnnnnn #1#2#3#4#5#6 +\bool_new:N \g__msg_log_next_bool +\cs_new_protected_nopar:Npn \__msg_log_next: + { \bool_gset_true:N \g__msg_log_next_bool } +\cs_new_protected:Npn \__msg_show_pre:nnnnnn #1#2#3#4#5#6 { - \iow_wrap:nnnN - { \use:c { \c__msg_text_prefix_tl #1 / #2 } {#3} {#4} {#5} {#6} } - { } { } \iow_term:n + \exp_args:Nx \iow_wrap:nnnN + { + \exp_not:c { \c__msg_text_prefix_tl #1 / #2 } + { \tl_to_str:n {#3} } + { \tl_to_str:n {#4} } + { \tl_to_str:n {#5} } + { \tl_to_str:n {#6} } + } + { } { } \__msg_show_pre_aux:n } -\cs_generate_variant:Nn \__msg_term:nnnnnn { nnnnnV } -\cs_new_protected:Npn \__msg_term:nnnnn #1#2#3#4#5 - { \__msg_term:nnnnnn {#1} {#2} {#3} {#4} {#5} { } } -\cs_new_protected:Npn \__msg_term:nnn #1#2#3 - { \__msg_term:nnnnnn {#1} {#2} {#3} { } { } { } } -\cs_new_protected:Npn \__msg_term:nn #1#2 - { \__msg_term:nnnnnn {#1} {#2} { } { } { } { } } -\cs_new_protected:Npn \__msg_show_variable:Nnn #1#2#3 +\cs_new_protected:Npn \__msg_show_pre:nnxxxx #1#2#3#4#5#6 { - \cs_if_exist:NTF #1 + \use:x + { \exp_not:n { \__msg_show_pre:nnnnnn {#1} {#2} } {#3} {#4} {#5} {#6} } + } +\cs_generate_variant:Nn \__msg_show_pre:nnnnnn { nnnnnV } +\cs_new_protected_nopar:Npn \__msg_show_pre_aux:n + { \bool_if:NTF \g__msg_log_next_bool { \iow_log:n } { \iow_term:n } } +\cs_new_protected:Npn \__msg_show_variable:NNNnn #1#2#3#4#5 + { + #2 #1 { - \__msg_term:nnn { LaTeX / kernel } { show- #2 } {#1} - \__msg_show_variable:n {#3} + \tl_if_empty:nF {#4} + { + \__msg_show_pre:nnxxxx { LaTeX / kernel } { show- #4 } + { \token_to_str:N #1 } { #3 #1 { } { ? } } { } { } + } + \__msg_show_wrap:n {#5} } { \__msg_kernel_error:nnx { kernel } { variable-not-defined } { \token_to_str:N #1 } + \bool_gset_false:N \g__msg_log_next_bool } } -\cs_new_protected:Npn \__msg_show_variable:n #1 - { \iow_wrap:nnnN {#1} { } { } \__msg_show_variable_aux:n } -\cs_new_protected:Npn \__msg_show_variable_aux:n #1 +\cs_new_protected:Npn \__msg_show_wrap:Nn #1#2 + { \exp_args:Nx \__msg_show_wrap:n { > ~ \tl_to_str:n {#2} = #1 {#2} } } +\cs_new_protected:Npn \__msg_show_wrap:n #1 + { \iow_wrap:nnnN { #1 . } { } { } \__msg_show_wrap_aux:n } +\cs_new_protected:Npn \__msg_show_wrap_aux:n #1 { - \tl_if_empty:nTF {#1} + \tl_if_single:nTF {#1} { \tl_clear:N \l__msg_internal_tl } - { \tl_set:Nf \l__msg_internal_tl { \__msg_show_variable_aux:w #1 } } - \__iow_with:Nnn \tex_newlinechar:D { 10 } + { \tl_set:Nf \l__msg_internal_tl { \__msg_show_wrap_aux:w #1 \q_stop } } + \bool_if:NTF \g__msg_log_next_bool { - \__iow_with:Nnn \tex_errorcontextlines:D \c_minus_one + \iow_log:x { > ~ \l__msg_internal_tl . } + \bool_gset_false:N \g__msg_log_next_bool + } + { + \__iow_with:Nnn \tex_newlinechar:D { 10 } { - \etex_showtokens:D \exp_after:wN \exp_after:wN \exp_after:wN - { \exp_after:wN \l__msg_internal_tl } + \__iow_with:Nnn \tex_errorcontextlines:D \c_minus_one + { + \etex_showtokens:D \exp_after:wN \exp_after:wN \exp_after:wN + { \exp_after:wN \l__msg_internal_tl } + } } } } -\cs_new:Npn \__msg_show_variable_aux:w #1 > { } +\cs_new:Npn \__msg_show_wrap_aux:w #1 > #2 . \q_stop {#2} \cs_new:Npn \__msg_show_item:n #1 { \\ > \ \ \{ \tl_to_str:n {#1} \} @@ -7974,7 +8114,7 @@ %% prior consultation with the LaTeX3 Project. %% %% ----------------------------------------------------------------------- -\GetIdInfo$Id: l3file.dtx 5714 2015-07-30 00:51:47Z bruno $ +\GetIdInfo$Id: l3file.dtx 5786 2015-08-05 16:18:39Z bruno $ {L3 File and I/O operations} \tl_new:N \g_file_current_name_tl \cs_if_exist:NT \@currname @@ -8215,13 +8355,12 @@ } \cs_generate_variant:Nn \ior_close:N { c } \cs_new_protected_nopar:Npn \ior_list_streams: - { \__ior_list_streams:Nn \g__ior_streams_prop { input } } + { \__ior_list_streams:Nn \g__ior_streams_prop { ior } } \cs_new_protected:Npn \__ior_list_streams:Nn #1#2 { - \__msg_term:nnn { LaTeX / kernel } - { \prop_if_empty:NTF #1 { show-no-stream } { show-open-streams } } - {#2} - \__msg_show_variable:n + \__msg_show_pre:nnxxxx { LaTeX / kernel } { show-streams } + {#2} { \prop_if_empty:NF #1 { ? } } { } { } + \__msg_show_wrap:n { \prop_map_function:NN #1 \__msg_show_item_unbraced:nn } } \cs_new_eq:NN \if_eof:w \tex_ifeof:D @@ -8310,7 +8449,7 @@ } \cs_generate_variant:Nn \iow_close:N { c } \cs_new_protected_nopar:Npn \iow_list_streams: - { \__iow_list_streams:Nn \g__iow_streams_prop { output } } + { \__iow_list_streams:Nn \g__iow_streams_prop { iow } } \cs_new_eq:NN \__iow_list_streams:Nn \__ior_list_streams:Nn \cs_new_protected:Npn \iow_shipout_x:Nn #1#2 { \tex_write:D #1 {#2} } @@ -8406,10 +8545,7 @@ \cs_set_eq:NN \iow_indent:n \__iow_indent_error:n \tl_set:Nx \l__iow_newline_tl { \iow_newline: #2 } \tl_set:Nx \l__iow_newline_tl { \tl_to_str:N \l__iow_newline_tl } - \tl_replace_all:Nnn \l__iow_newline_tl { ~ } { \c_space_tl } - \int_set:Nn \l__iow_target_count_int - { \l_iow_line_count_int - \tl_count:N \l__iow_newline_tl + \c_one } - \int_zero:N \l__iow_current_indentation_int + \int_set_eq:NN \l__iow_target_count_int \l_iow_line_count_int \tl_clear:N \l__iow_current_indentation_tl \int_zero:N \l__iow_current_line_int \tl_set:Nn \l__iow_current_line_tl { \use_none:n } @@ -8428,6 +8564,16 @@ #4 \l__iow_wrap_tl } \cs_new_eq:NN \__iow_wrap_set:Nx \protected@edef +\cs_new_protected_nopar:Npn \__iow_wrap_set_target: + { + \cs_set_protected_nopar:Npn \__iow_wrap_set_target: + { + \cs_set_protected_nopar:Npn \__iow_wrap_set_target: { } + \tl_replace_all:Nnn \l__iow_newline_tl { ~ } { \c_space_tl } + \int_set:Nn \l__iow_target_count_int + { \l_iow_line_count_int - \tl_count:N \l__iow_newline_tl + \c_one } + } + } \cs_new_protected:Npn \__iow_wrap_loop:w #1 ~ % { \tl_set:Nn \l__iow_current_word_tl {#1} @@ -8463,6 +8609,7 @@ } \cs_new_protected_nopar:Npn \__iow_wrap_word_newline: { + \__iow_wrap_set_target: \tl_put_right:Nx \l__iow_wrap_tl { \l__iow_current_line_tl \l__iow_newline_tl } \int_set:Nn \l__iow_current_line_int @@ -8482,6 +8629,7 @@ } \cs_new_protected_nopar:Npn \__iow_wrap_newline: { + \__iow_wrap_set_target: \tl_put_right:Nx \l__iow_wrap_tl { \l__iow_current_line_tl \l__iow_newline_tl } \int_zero:N \l__iow_current_line_int @@ -8585,7 +8733,7 @@ %% prior consultation with the LaTeX3 Project. %% %% ----------------------------------------------------------------------- -\GetIdInfo$Id: l3skip.dtx 5659 2015-07-14 18:58:00Z joseph $ +\GetIdInfo$Id: l3skip.dtx 5893 2015-08-26 16:16:52Z mittelba $ {L3 Dimensions and skips} \cs_new_eq:NN \if_dim:w \tex_ifdim:D \cs_new_eq:NN \__dim_eval:w \etex_dimexpr:D @@ -8684,7 +8832,7 @@ } \cs_new:Npn \__dim_compare:w #1 \__prg_compare_error: { - \exp_after:wN \if_false: \tex_romannumeral:D -`0 + \exp_after:wN \if_false: \exp:w \exp_end_continue_f:w \__dim_compare:wNN #1 ? { = \__dim_compare_end:w \else: } \q_stop } \exp_args:Nno \use:nn @@ -8715,22 +8863,22 @@ { #1 \prg_return_false: \else: \prg_return_true: \fi: } \cs_new:Npn \dim_case:nnTF #1 { - \tex_romannumeral:D + \exp:w \exp_args:Nf \__dim_case:nnTF { \dim_eval:n {#1} } } \cs_new:Npn \dim_case:nnT #1#2#3 { - \tex_romannumeral:D + \exp:w \exp_args:Nf \__dim_case:nnTF { \dim_eval:n {#1} } {#2} {#3} { } } \cs_new:Npn \dim_case:nnF #1#2 { - \tex_romannumeral:D + \exp:w \exp_args:Nf \__dim_case:nnTF { \dim_eval:n {#1} } {#2} { } } \cs_new:Npn \dim_case:nn #1#2 { - \tex_romannumeral:D + \exp:w \exp_args:Nf \__dim_case:nnTF { \dim_eval:n {#1} } {#2} { } { } } \cs_new:Npn \__dim_case:nnTF #1#2#3#4 @@ -8831,8 +8979,8 @@ } \cs_new_eq:NN \dim_show:N \__kernel_register_show:N \cs_generate_variant:Nn \dim_show:N { c } -\cs_new_protected:Npn \dim_show:n #1 - { \etex_showtokens:D \exp_after:wN { \dim_use:N \__dim_eval:w #1 } } +\cs_new_protected_nopar:Npn \dim_show:n + { \__msg_show_wrap:Nn \dim_eval:n } \dim_const:Nn \c_zero_dim { 0 pt } \dim_const:Nn \c_max_dim { 16383.99999 pt } \dim_new:N \l_tmpa_dim @@ -8921,8 +9069,8 @@ \cs_generate_variant:Nn \skip_vertical:N { c } \cs_new_eq:NN \skip_show:N \__kernel_register_show:N \cs_generate_variant:Nn \skip_show:N { c } -\cs_new_protected:Npn \skip_show:n #1 - { \etex_showtokens:D \exp_after:wN { \tex_the:D \etex_glueexpr:D #1 } } +\cs_new_protected_nopar:Npn \skip_show:n + { \__msg_show_wrap:Nn \skip_eval:n } \skip_const:Nn \c_zero_skip { \c_zero_dim } \skip_const:Nn \c_max_skip { \c_max_dim } \skip_new:N \l_tmpa_skip @@ -8983,8 +9131,8 @@ \cs_generate_variant:Nn \muskip_use:N { c } \cs_new_eq:NN \muskip_show:N \__kernel_register_show:N \cs_generate_variant:Nn \muskip_show:N { c } -\cs_new_protected:Npn \muskip_show:n #1 - { \etex_showtokens:D \exp_after:wN { \tex_the:D \etex_muexpr:D #1 } } +\cs_new_protected_nopar:Npn \muskip_show:n + { \__msg_show_wrap:Nn \muskip_eval:n } \muskip_const:Nn \c_zero_muskip { 0 mu } \muskip_const:Nn \c_max_muskip { 16383.99999 mu } \muskip_new:N \l_tmpa_muskip @@ -9025,7 +9173,7 @@ %% prior consultation with the LaTeX3 Project. %% %% ----------------------------------------------------------------------- -\GetIdInfo$Id: l3keys.dtx 5684 2015-07-26 07:23:48Z joseph $ +\GetIdInfo$Id: l3keys.dtx 5869 2015-08-20 01:19:17Z bruno $ {L3 Key-value interfaces} \int_new:N \g__keyval_level_int \tl_new:N \l__keyval_key_tl @@ -9217,7 +9365,7 @@ } \cs_if_exist:cF { \c__keys_code_root_tl #1 } { - \__chk_if_free_cs:c { \c__keys_code_root_tl #1 } + \__chk_log:x { Defining~key~#1~ \msg_line_context: } \cs_set_protected:cpn { \c__keys_code_root_tl #1 } ##1 { } } } @@ -9758,7 +9906,34 @@ { \prg_return_false: } } \cs_new_protected:Npn \keys_show:nn #1#2 - { \cs_show:c { \c__keys_code_root_tl #1 / \tl_to_str:n {#2} } } + { + \keys_if_exist:nnTF {#1} {#2} + { + \__msg_show_pre:nnxxxx { LaTeX / kernel } { show-key } + { \tl_to_str:n { #1 / #2 } } { t } { } { } + \exp_args:Ncc \__keys_show:NN + { \c__keys_code_root_tl \tl_to_str:n { #1 / #2 } } + { \c__keys_info_root_tl \tl_to_str:n { #1 / #2 } } + } + { + \__msg_show_pre:nnxxxx { LaTeX / kernel } { show-key } + { \tl_to_str:n { #1 / #2 } } { f } { } { } + \__msg_show_wrap:n { } + } + } +\cs_new_protected:Npn \__keys_show:NN #1#2 + { + \use:x + { + \__msg_show_wrap:n + { + \exp_not:N \__msg_show_item_unbraced:nn { code } + { \token_get_replacement_spec:N #1 } + \exp_not:n + { \prop_map_function:NN #2 \__msg_show_item_unbraced:nn } + } + } + } \__msg_kernel_new:nnnn { kernel } { boolean-values-only } { Key~'#1'~accepts~boolean~values~only. } { The~key~'#1'~only~accepts~the~values~'true'~and~'false'. } @@ -9786,7 +9961,7 @@ \__msg_kernel_new:nnnn { kernel } { key-unknown } { The~key~'#1'~is~unknown~and~is~being~ignored. } { - The~module~'#2'~does~not~have~a~key~called~#1'.\\ + The~module~'#2'~does~not~have~a~key~called~'#1'.\\ Check~that~you~have~spelled~the~key~name~correctly. } \__msg_kernel_new:nnnn { kernel } { nested-choice-key } @@ -9816,10 +9991,10 @@ this~property~is~not~defined. } \__msg_kernel_new:nnnn { kernel } { value-forbidden } - { The~key~'#1'~does~not~taken~a~value. } + { The~key~'#1'~does~not~take~a~value. } { The~key~'#1'~should~be~given~without~a~value.\\ - LaTeX~will~ignore~the~given~value~'#2'. + The~value~'#2'~was~present:~the~key~will~be~ignored. } \__msg_kernel_new:nnnn { kernel } { value-required } { The~key~'#1'~requires~a~value. } @@ -9827,11 +10002,18 @@ The~key~'#1'~must~have~a~value.\\ No~value~was~present:~the~key~will~be~ignored. } +\__msg_kernel_new:nnn { kernel } { show-key } + { + The~key~#1~ + \str_if_eq:nnTF {#2} { t } + { has~the~properties: } + { is~undefined. } + } \cs_new_protected_nopar:cpn { \c__keys_props_root_tl .value_forbidden: } { \__keys_value_requirement:nn { forbidden } { true } } \cs_new_protected_nopar:cpn { \c__keys_props_root_tl .value_required: } { \__keys_value_requirement:nn { required } { true } } -%% File: l3fp.dtx Copyright (C) 2011-2014 The LaTeX3 Project +%% File: l3fp.dtx Copyright (C) 2011-2015 The LaTeX3 Project %% %% It may be distributed and/or modified under the conditions of the %% LaTeX Project Public License (LPPL), either version 1.3c of this @@ -9864,7 +10046,7 @@ %% %% ----------------------------------------------------------------------- %% -\GetIdInfo$Id: l3fp.dtx 5652 2015-07-09 13:11:22Z joseph $ +\GetIdInfo$Id: l3fp.dtx 5890 2015-08-25 07:47:22Z joseph $ {L3 Floating points} %% File: l3fp-aux.dtx Copyright(C) 2011-2014 The LaTeX3 Project %% @@ -9997,7 +10179,7 @@ \else: \exp_after:wN \__fp_exp_after_special:nNNw \fi: - { \tex_romannumeral:D -`0 #1 } + { \exp:w \exp_end_continue_f:w #1 } #2 } \cs_new:Npn \__fp_exp_after_special:nNNw #1#2#3#4; @@ -10055,7 +10237,7 @@ \if_int_compare:w \__int_eval:w #1 > \c_sixteen tiny \else: - \tex_romannumeral:D \__int_eval:w #1 + \__int_to_roman:w \__int_eval:w #1 \fi: :Nnnnn \cs_end: @@ -10165,7 +10347,7 @@ } \cs_new:Npn \__fp_expand_loop:nwnN #1#2 \s__fp_mark #3 #4 { - \exp_after:wN #4 \tex_romannumeral:D -`0 + \exp_after:wN #4 \exp:w \exp_end_continue_f:w #2 \s__fp_mark { #3 #1 } #4 } @@ -10390,7 +10572,7 @@ { Invalid~operation~ #1 (#2) } \__msg_kernel_new:nnn { kernel } { fp-invalid-ii } { Invalid~operation~ (#1) #3 (#2) } -%% File: l3fp-round.dtx Copyright(C) 2011-2012,2014 The LaTeX3 Project +%% File: l3fp-round.dtx Copyright(C) 2011-2012,2014,2015 The LaTeX3 Project %% %% It may be distributed and/or modified under the conditions of the %% LaTeX Project Public License (LPPL), either version 1.3c of this @@ -10424,7 +10606,7 @@ %% ----------------------------------------------------------------------- %% \cs_new:Npn \__fp_round_return_one: - { \exp_after:wN \c_one \tex_romannumeral:D } + { \exp_after:wN \c_one \exp:w } \cs_new:Npn \__fp_round_to_ninf:NNN #1 #2 #3 { \if_meaning:w 2 #1 @@ -10457,6 +10639,39 @@ \fi: \c_zero } +\cs_new:Npn \__fp_round_to_nearest_ninf:NNN #1 #2 #3 + { + \if_int_compare:w #3 > \c_five + \__fp_round_return_one: + \else: + \if_meaning:w 5 #3 + \if_meaning:w 2 #1 + \__fp_round_return_one: + \fi: + \fi: + \fi: + \c_zero + } +\cs_new:Npn \__fp_round_to_nearest_zero:NNN #1 #2 #3 + { + \if_int_compare:w #3 > \c_five + \__fp_round_return_one: + \fi: + \c_zero + } +\cs_new:Npn \__fp_round_to_nearest_pinf:NNN #1 #2 #3 + { + \if_int_compare:w #3 > \c_five + \__fp_round_return_one: + \else: + \if_meaning:w 5 #3 + \if_meaning:w 0 #1 + \__fp_round_return_one: + \fi: + \fi: + \fi: + \c_zero + } \cs_new_eq:NN \__fp_round:NNN \__fp_round_to_nearest:NNN \cs_new:Npn \__fp_round_s:NNNw #1 #2 #3 #4; { @@ -10485,15 +10700,7 @@ \fi: #1 } -\cs_new:Npn \__fp_round_to_ninf_neg:NNN #1 #2 #3 - { - \if_meaning:w 0 #1 - \if_int_compare:w #3 > \c_zero - \__fp_round_return_one: - \fi: - \fi: - \c_zero - } +\cs_new_eq:NN \__fp_round_to_ninf_neg:NNN \__fp_round_to_pinf:NNN \cs_new:Npn \__fp_round_to_zero_neg:NNN #1 #2 #3 { \if_int_compare:w #3 > \c_zero @@ -10501,29 +10708,53 @@ \fi: \c_zero } -\cs_new:Npn \__fp_round_to_pinf_neg:NNN #1 #2 #3 +\cs_new_eq:NN \__fp_round_to_pinf_neg:NNN \__fp_round_to_ninf:NNN +\cs_new_eq:NN \__fp_round_to_nearest_neg:NNN \__fp_round_to_nearest:NNN +\cs_new_eq:NN \__fp_round_to_nearest_ninf_neg:NNN \__fp_round_to_nearest_pinf:NNN +\cs_new:Npn \__fp_round_to_nearest_zero_neg:NNN #1 #2 #3 { - \if_meaning:w 2 #1 - \if_int_compare:w #3 > \c_zero - \__fp_round_return_one: - \fi: + \if_int_compare:w #3 > \c_four + \__fp_round_return_one: \fi: \c_zero } -\cs_new_eq:NN \__fp_round_to_nearest_neg:NNN \__fp_round_to_nearest:NNN +\cs_new_eq:NN \__fp_round_to_nearest_pinf_neg:NNN \__fp_round_to_nearest_ninf:NNN \cs_new_eq:NN \__fp_round_neg:NNN \__fp_round_to_nearest_neg:NNN \cs_new:Npn \__fp_round_o:Nw #1#2 @ { \if_case:w \__int_eval:w \__fp_array_count:n {#2} - \c_one \__int_eval_end: - \__fp_round:Nwn #1 #2 {0} \tex_romannumeral:D - \or: \__fp_round:Nww #1 #2 \tex_romannumeral:D - \else: - \__fp_error:nffn { num-args } - { \__fp_round_name_from_cs:N #1 () } { 1 } { 2 } - \exp_after:wN \c_nan_fp \tex_romannumeral:D + \__fp_round:Nwn #1 #2 {0} \exp:w + \or: \__fp_round:Nww #1 #2 \exp:w + \else: \__fp_round:Nwww #1 #2 @ \exp:w \fi: - -`0 + \exp_end_continue_f:w + } +\cs_new:Npn \__fp_round:Nwww #1#2 ; #3 ; \s__fp \__fp_chk:w #4#5#6 ; #7 @ + { + \cs_if_eq:NNTF #1 \__fp_round_to_nearest:NNN + { + \tl_if_empty:nTF {#7} + { + \exp_args:Nc \__fp_round:Nww + { + __fp_round_to_nearest + \if_meaning:w 0 #4 _zero \else: + \if_case:w #5 \exp_stop_f: _pinf \or: \else: _ninf \fi: \fi: + :NNN + } + #2 ; #3 ; + } + { + \__fp_error:nnnn { num-args } { round () } { 1 } { 3 } + \exp_after:wN \c_nan_fp + } + } + { + \__fp_error:nffn { num-args } + { \__fp_round_name_from_cs:N #1 () } { 1 } { 2 } + \exp_after:wN \c_nan_fp + } } \cs_new:Npn \__fp_round_name_from_cs:N #1 { @@ -10596,7 +10827,7 @@ } \cs_new:Npn \__fp_round_normal_end:wwNnn #1;#2;#3#4#5 { - \exp_after:wN \__fp_exp_after_o:w \tex_romannumeral:D -`0 + \exp_after:wN \__fp_exp_after_o:w \exp:w \exp_end_continue_f:w \__fp_sanitize:Nw #3 #4 ; #1 ; } \cs_new:Npn \__fp_round_special:NwwNnn #1#2;#3;#4#5#6 @@ -10614,10 +10845,10 @@ } \cs_new:Npn \__fp_round_special_aux:Nw #1#2; { - \exp_after:wN \__fp_exp_after_o:w \tex_romannumeral:D -`0 + \exp_after:wN \__fp_exp_after_o:w \exp:w \exp_end_continue_f:w \__fp_sanitize:Nw #1#2; {1000}{0000}{0000}{0000}; } -%% File: l3fp-parse.dtx Copyright (C) 2011-2014 The LaTeX3 Project +%% File: l3fp-parse.dtx Copyright (C) 2011-2015 The LaTeX3 Project %% %% It may be distributed and/or modified under the conditions of the %% LaTeX Project Public License (LPPL), either version 1.3c of this @@ -10650,7 +10881,7 @@ %% %% ----------------------------------------------------------------------- %% -\cs_new:Npn \__fp_parse_expand:w #1 { -`0 #1 } +\cs_new:Npn \__fp_parse_expand:w #1 { \exp_end_continue_f:w #1 } \cs_new:Npn \__fp_parse_return_semicolon:w #1 \fi: \__fp_parse_expand:w { \fi: ; #1 } \group_begin: @@ -10673,7 +10904,7 @@ \cs_new:cpn { __fp_parse_digits_ #1 :N } ##1 { \if_int_compare:w \c_nine < 1 \token_to_str:N ##1 \exp_stop_f: - \token_to_str:N ##1 \exp_after:wN #2 \tex_romannumeral:D + \token_to_str:N ##1 \exp_after:wN #2 \exp:w \else: \__fp_parse_return_semicolon:w #3 ##1 \fi: @@ -10691,6 +10922,9 @@ \cs_new:Npn \__fp_parse_one:Nw #1 #2 { \if_catcode:w \scan_stop: \exp_not:N #2 + \exp_after:wN \if_meaning:w \exp_not:N #2 #2 \else: + \exp_after:wN \reverse_if:N + \fi: \if_meaning:w \scan_stop: #2 \exp_after:wN \exp_after:wN \exp_after:wN \__fp_parse_one_fp:NN @@ -10714,30 +10948,46 @@ \cs:w __fp_exp_after \__fp_type_from_scan:N #2 _f:nw \cs_end: { \exp_after:wN \__fp_parse_infix:NN - \exp_after:wN #1 \tex_romannumeral:D \__fp_parse_expand:w + \exp_after:wN #1 \exp:w \__fp_parse_expand:w } #2 } \cs_new:Npn \__fp_exp_after_mark_f:nw #1 { \__msg_kernel_expandable_error:nn { kernel } { fp-early-end } - \exp_after:wN \c_nan_fp \tex_romannumeral:D -`0 #1 + \exp_after:wN \c_nan_fp \exp:w \exp_end_continue_f:w #1 } \cs_new:cpn { __fp_exp_after_?_f:nw } #1#2 { \__msg_kernel_expandable_error:nnn { kernel } { bad-variable } {#2} - \exp_after:wN \c_nan_fp \tex_romannumeral:D -`0 #1 + \exp_after:wN \c_nan_fp \exp:w \exp_end_continue_f:w #1 } +\group_begin: + \char_set_catcode_letter:N \@ + \cs_if_exist:NT \@unexpandable@protect + { + \cs_gset:cpn { __fp_exp_after_?_f:nw } #1#2 + { + \exp_after:wN \c_nan_fp \exp:w \exp_end_continue_f:w #1 + \str_if_eq:nnTF {#2} { \protect } + { + \cs_if_eq:NNTF #2 \@unexpandable@protect { \use_i:nn } { \use:n } + { \__msg_kernel_expandable_error:nnn { kernel } { fp-robust-cmd } } + } + { \__msg_kernel_expandable_error:nnn { kernel } { bad-variable } {#2} } + } + } +\group_end: \cs_new:Npn \__fp_parse_one_register:NN #1#2 { \exp_after:wN \__fp_parse_infix_after_operand:NwN \exp_after:wN #1 - \tex_romannumeral:D -`0 + \exp:w \exp_end_continue_f:w \exp_after:wN \__fp_parse_one_register_aux:Nw \exp_after:wN #2 \__int_value:w \exp_after:wN \__fp_parse_exponent:N - \tex_romannumeral:D \__fp_parse_expand:w + \exp:w \__fp_parse_expand:w } \group_begin: \char_set_catcode_other:N \P @@ -10751,7 +11001,7 @@ { \exp_after:wN \use:nn \exp_after:wN \__fp_parse_one_register_auxii:wwwNw - \exp_after:wN { \tex_the:D \exp_not:N #1 } + \exp_after:wN { \tex_the:D #1 } ; \__fp_parse_one_register_dim:ww PT ; \__fp_parse_one_register_mu:www . PT ; \__fp_parse_one_register_int:www @@ -10774,7 +11024,7 @@ { \exp_after:wN \__fp_parse_infix_after_operand:NwN \exp_after:wN #1 - \tex_romannumeral:D -`0 + \exp:w \exp_end_continue_f:w \exp_after:wN \__fp_sanitize:wN \int_use:N \__int_eval:w \c_zero \__fp_parse_trim_zeros:N } @@ -10787,8 +11037,8 @@ \exp_after:wN \__fp_parse_word:Nw \exp_after:wN #1 \exp_after:wN #2 - \tex_romannumeral:D \exp_after:wN \__fp_parse_letters:N - \tex_romannumeral:D + \exp:w \exp_after:wN \__fp_parse_letters:N + \exp:w \else: \exp_after:wN \__fp_parse_prefix:NNN \exp_after:wN #1 @@ -10797,7 +11047,7 @@ __fp_parse_prefix_ \token_to_str:N #2 :Nw \exp_after:wN \cs_end: - \tex_romannumeral:D + \exp:w \fi: \__fp_parse_expand:w } @@ -10807,14 +11057,14 @@ { \__msg_kernel_expandable_error:nnn { kernel } { unknown-fp-word } {#2} - \exp_after:wN \c_nan_fp \tex_romannumeral:D -`0 + \exp_after:wN \c_nan_fp \exp:w \exp_end_continue_f:w \__fp_parse_infix:NN } #1 } \cs_new:Npn \__fp_parse_letters:N #1 { - -`0 + \exp_end_continue_f:w \if_int_compare:w \if_catcode:w \scan_stop: \exp_not:N #1 \c_zero @@ -10825,8 +11075,8 @@ \fi: = \c_three \exp_after:wN #1 - \tex_romannumeral:D \exp_after:wN \__fp_parse_letters:N - \tex_romannumeral:D + \exp:w \exp_after:wN \__fp_parse_letters:N + \exp:w \else: \__fp_parse_return_semicolon:w #1 \fi: @@ -10846,7 +11096,7 @@ { \__msg_kernel_expandable_error:nnn { kernel } { fp-missing-number } {#1} - \exp_after:wN \c_nan_fp \tex_romannumeral:D -`0 + \exp_after:wN \c_nan_fp \exp:w \exp_end_continue_f:w \__fp_parse_infix:NN #3 #1 } { @@ -10859,11 +11109,11 @@ { \if:w 0 \exp_not:N #1 \exp_after:wN \__fp_parse_trim_zeros:N - \tex_romannumeral:D + \exp:w \else: \if:w . \exp_not:N #1 \exp_after:wN \__fp_parse_strim_zeros:N - \tex_romannumeral:D + \exp:w \else: \__fp_parse_trim_end:w #1 \fi: @@ -10885,7 +11135,7 @@ { \if:w 0 \exp_not:N #1 - \c_one - \exp_after:wN \__fp_parse_strim_zeros:N \tex_romannumeral:D + \exp_after:wN \__fp_parse_strim_zeros:N \exp:w \else: \__fp_parse_strim_end:w #1 \fi: @@ -10913,7 +11163,7 @@ \exp_after:wN \__fp_parse_small_leading:wwNN \__int_value:w 1 \exp_after:wN \__fp_parse_digits_vii:N - \tex_romannumeral:D \__fp_parse_expand:w + \exp:w \__fp_parse_expand:w } \cs_new:Npn \__fp_parse_small_leading:wwNN 1 #1 ; #2; #3 #4 { @@ -10926,7 +11176,7 @@ \exp_after:wN \__fp_parse_small_trailing:wwNN \__int_value:w 1 \exp_after:wN \__fp_parse_digits_vi:N - \tex_romannumeral:D + \exp:w \else: 0000 0000 \__fp_parse_exponent:Nw #4 \fi: @@ -10939,7 +11189,7 @@ \token_to_str:N #4 \exp_after:wN \__fp_parse_small_round:NN \exp_after:wN #4 - \tex_romannumeral:D + \exp:w \else: 0 \__fp_parse_exponent:Nw #4 \fi: @@ -10963,7 +11213,7 @@ \exp_after:wN \__fp_parse_large_leading:wwNN \__int_value:w 1 \token_to_str:N #1 \exp_after:wN \__fp_parse_digits_vii:N - \tex_romannumeral:D \__fp_parse_expand:w + \exp:w \__fp_parse_expand:w } \cs_new:Npn \__fp_parse_large_leading:wwNN 1 #1 ; #2; #3 #4 { @@ -10974,17 +11224,17 @@ \exp_after:wN \__fp_parse_large_trailing:wwNN \__int_value:w 1 \token_to_str:N #4 \exp_after:wN \__fp_parse_digits_vi:N - \tex_romannumeral:D + \exp:w \else: \if:w . \exp_not:N #4 \exp_after:wN \__fp_parse_small_leading:wwNN \__int_value:w 1 \cs:w __fp_parse_digits_ - \tex_romannumeral:D #3 + \__int_to_roman:w #3 :N \exp_after:wN \cs_end: - \tex_romannumeral:D + \exp:w \else: #2 \exp_after:wN \__fp_parse_pack_trailing:NNNNNNww @@ -11003,7 +11253,7 @@ \int_use:N \__int_eval:w 1 #1 \token_to_str:N #4 \exp_after:wN \__fp_parse_large_round:NN \exp_after:wN #4 - \tex_romannumeral:D + \exp:w \else: \exp_after:wN \__fp_parse_pack_trailing:NNNNNNww \int_use:N \__int_eval:w \c_seven - #3 \exp_stop_f: @@ -11013,10 +11263,10 @@ \__int_value:w 1 \cs:w __fp_parse_digits_ - \tex_romannumeral:D #3 + \__int_to_roman:w #3 :N \exp_after:wN \cs_end: - \tex_romannumeral:D + \exp:w \else: #2 0 \__fp_parse_exponent:Nw #4 \fi: @@ -11029,10 +11279,10 @@ + \c_one \if:w 0 \token_to_str:N #1 \exp_after:wN \__fp_parse_round_loop:N - \tex_romannumeral:D + \exp:w \else: \exp_after:wN \__fp_parse_round_up:N - \tex_romannumeral:D + \exp:w \fi: \else: \__fp_parse_return_semicolon:w \c_zero #1 @@ -11044,7 +11294,7 @@ \if_int_compare:w \c_nine < 1 \token_to_str:N #1 \exp_stop_f: + \c_one \exp_after:wN \__fp_parse_round_up:N - \tex_romannumeral:D + \exp:w \else: \__fp_parse_return_semicolon:w \c_one #1 \fi: @@ -11067,7 +11317,7 @@ \exp_after:wN \__fp_parse_round_after:wN \int_use:N \__int_eval:w \c_zero * \__int_eval:w \c_zero \exp_after:wN \__fp_parse_round_loop:N - \tex_romannumeral:D + \exp:w \else: \__fp_parse_exponent:Nw #2 \fi: @@ -11096,7 +11346,7 @@ \if:w . \exp_not:N #2 \exp_after:wN \__fp_parse_small_round:NN \exp_after:wN #1 - \tex_romannumeral:D + \exp:w \else: \__fp_parse_exponent:Nw #2 \fi: @@ -11110,7 +11360,7 @@ \if:w . \exp_not:N #3 + \c_zero * \__int_eval:w \c_zero \exp_after:wN \__fp_parse_round_loop:N - \tex_romannumeral:D \exp_after:wN \__fp_parse_expand:w + \exp:w \exp_after:wN \__fp_parse_expand:w \else: \exp_after:wN ; \exp_after:wN \c_zero @@ -11126,7 +11376,7 @@ { \if:w e \exp_not:N #1 \exp_after:wN \__fp_parse_exponent_aux:N - \tex_romannumeral:D + \exp:w \else: 0 \__fp_parse_return_semicolon:w #1 \fi: @@ -11146,7 +11396,7 @@ { \if:w + \if:w - \exp_not:N #1 + \fi: \token_to_str:N #1 \exp_after:wN \__fp_parse_exponent_sign:N - \tex_romannumeral:D \exp_after:wN \__fp_parse_expand:w + \exp:w \exp_after:wN \__fp_parse_expand:w \else: \exp_after:wN \__fp_parse_exponent_body:N \exp_after:wN #1 @@ -11157,13 +11407,13 @@ \if_int_compare:w \c_nine < 1 \token_to_str:N #1 \exp_stop_f: \token_to_str:N #1 \exp_after:wN \__fp_parse_exponent_digits:N - \tex_romannumeral:D + \exp:w \else: \__fp_parse_exponent_keep:NTF #1 { \__fp_parse_return_semicolon:w #1 } { \exp_after:wN ; - \tex_romannumeral:D + \exp:w } \fi: \__fp_parse_expand:w @@ -11173,7 +11423,7 @@ \if_int_compare:w \c_nine < 1 \token_to_str:N #1 \exp_stop_f: \token_to_str:N #1 \exp_after:wN \__fp_parse_exponent_digits:N - \tex_romannumeral:D + \exp:w \else: \__fp_parse_return_semicolon:w #1 \fi: @@ -11218,7 +11468,7 @@ \cs_new:Npn \__fp_parse_apply_unary:NNNwN #1#2#3#4@#5 { #3 #2 #4 @ - \tex_romannumeral:D -`0 #5 #1 + \exp:w \exp_end_continue_f:w #5 #1 } \cs_set_protected:Npn \__fp_tmp:w #1#2#3#4 { @@ -11228,7 +11478,7 @@ \exp_after:wN ##1 \exp_after:wN #4 \exp_after:wN #3 - \tex_romannumeral:D + \exp:w \if_int_compare:w #2 < ##1 \__fp_parse_operand:Nw ##1 \else: @@ -11243,7 +11493,7 @@ { \exp_after:wN \__fp_parse_infix_after_operand:NwN \exp_after:wN #1 - \tex_romannumeral:D -`0 + \exp:w \exp_end_continue_f:w \exp_after:wN \__fp_sanitize:wN \int_use:N \__int_eval:w \c_zero \__fp_parse_strim_zeros:N } @@ -11254,7 +11504,7 @@ { \exp_after:wN \__fp_parse_lparen_after:NwN \exp_after:wN #1 - \tex_romannumeral:D + \exp:w \if_int_compare:w #1 = \c_sixteen \__fp_parse_operand:Nw \c_one \else: @@ -11269,7 +11519,7 @@ \__fp_exp_after_array_f:w #2 \s__fp_stop \exp_after:wN \__fp_parse_infix:NN \exp_after:wN #1 - \tex_romannumeral:D \__fp_parse_expand:w + \exp:w \__fp_parse_expand:w } { \__msg_kernel_expandable_error:nnn @@ -11281,7 +11531,7 @@ \cs_set_protected:Npn \__fp_tmp:w #1 #2 { \cs_new_nopar:cpn { __fp_parse_word_#1:N } - { \exp_after:wN #2 \tex_romannumeral:D -`0 \__fp_parse_infix:NN } + { \exp_after:wN #2 \exp:w \exp_end_continue_f:w \__fp_parse_infix:NN } } \__fp_tmp:w { inf } \c_inf_fp \__fp_tmp:w { nan } \c_nan_fp @@ -11315,7 +11565,7 @@ \exp_after:wN \__fp_from_dim_test:ww \exp_after:wN 0 \exp_after:wN , \__int_value:w \__dim_eval:w 1 #1 \exp_after:wN ; - \tex_romannumeral:D -`0 \__fp_parse_infix:NN + \exp:w \exp_end_continue_f:w \__fp_parse_infix:NN } } \cs_new:Npn \__fp_parse_unary_function:nNN #1#2#3 @@ -11324,7 +11574,7 @@ \exp_after:wN #3 \exp_after:wN #2 \cs:w __fp_#1_o:w \exp_after:wN \cs_end: - \tex_romannumeral:D + \exp:w \__fp_parse_operand:Nw \c_fifteen \__fp_parse_expand:w } \cs_new:Npn \__fp_parse_function:NNN #1#2#3 @@ -11333,7 +11583,7 @@ \exp_after:wN #3 \exp_after:wN #2 \exp_after:wN #1 - \tex_romannumeral:D + \exp:w \__fp_parse_operand:Nw \c_sixteen \__fp_parse_expand:w } \cs_new_nopar:Npn \__fp_parse_word_acot:N @@ -11394,9 +11644,9 @@ #1 #2 \__fp_round_to_nearest:NNN #3#4 { #2 #1 #3 } \cs_new:Npn \__fp_parse:n #1 { - \tex_romannumeral:D + \exp:w \exp_after:wN \__fp_parse_after:ww - \tex_romannumeral:D + \exp:w \__fp_parse_operand:Nw \c_minus_one \__fp_parse_expand:w #1 \s__fp_mark \__fp_parse_infix_end:N @@ -11404,24 +11654,24 @@ } \cs_new:Npn \__fp_parse_after:ww #1@ \__fp_parse_infix_end:N \s__fp_stop - { \c_zero #1 } + { \exp_end: #1 } \cs_new:Npn \__fp_parse_operand:Nw #1 { - -`0 + \exp_end_continue_f:w \exp_after:wN \__fp_parse_continue:NwN \exp_after:wN #1 - \tex_romannumeral:D -`0 + \exp:w \exp_end_continue_f:w \exp_after:wN \__fp_parse_one:Nw \exp_after:wN #1 - \tex_romannumeral:D + \exp:w } \cs_new:Npn \__fp_parse_continue:NwN #1 #2 @ #3 { #3 #1 #2 @ } \cs_new:Npn \__fp_parse_apply_binary:NwNwN #1 #2@ #3 #4@ #5 { \exp_after:wN \__fp_parse_continue:NwN \exp_after:wN #1 - \tex_romannumeral:D -`0 \cs:w __fp_#3_o:ww \cs_end: #2 #4 - \tex_romannumeral:D -`0 #5 #1 + \exp:w \exp_end_continue_f:w \cs:w __fp_#3_o:ww \cs_end: #2 #4 + \exp:w \exp_end_continue_f:w #5 #1 } \cs_new:Npn \__fp_parse_infix_after_operand:NwN #1 #2; { @@ -11472,7 +11722,7 @@ \else: \exp_after:wN #1 \exp_after:wN #2 - \tex_romannumeral:D \exp_after:wN \__fp_parse_expand:w + \exp:w \exp_after:wN \__fp_parse_expand:w \fi: } \group_end: @@ -11487,7 +11737,7 @@ \__msg_kernel_expandable_error:nnn { kernel } { fp-extra } { ) } \exp_after:wN \__fp_parse_infix:NN \exp_after:wN #1 - \tex_romannumeral:D \exp_after:wN \__fp_parse_expand:w + \exp:w \exp_after:wN \__fp_parse_expand:w \else: \exp_after:wN @ \exp_after:wN \use_none:n @@ -11506,10 +11756,10 @@ \else: \if_int_compare:w #1 = \c_one \exp_after:wN \__fp_parse_infix_comma:w - \tex_romannumeral:D + \exp:w \else: \exp_after:wN \__fp_parse_infix_comma_gobble:w - \tex_romannumeral:D + \exp:w \fi: \__fp_parse_operand:Nw \c_one \exp_after:wN \__fp_parse_expand:w @@ -11538,7 +11788,7 @@ \exp_after:wN @ \exp_after:wN \__fp_parse_apply_binary:NwNwN \exp_after:wN #2 - \tex_romannumeral:D + \exp:w \__fp_parse_operand:Nw #4 \exp_after:wN \__fp_parse_expand:w \else: @@ -11563,7 +11813,7 @@ \if_int_compare:w #1 < \c_ten \exp_after:wN @ \exp_after:wN \__fp_parse_apply_juxtapose:NwwN - \tex_romannumeral:D + \exp:w \__fp_parse_operand:Nw \c_ten \exp_after:wN \__fp_parse_expand:w \else: @@ -11605,7 +11855,7 @@ \if:w | \exp_not:N #2 \exp_after:wN \__fp_parse_infix_|:N \exp_after:wN #1 - \tex_romannumeral:D \exp_after:wN \__fp_parse_expand:w + \exp:w \exp_after:wN \__fp_parse_expand:w \else: \exp_after:wN \__fp_parse_infix_or:N \exp_after:wN #1 @@ -11617,7 +11867,7 @@ \if:w & \exp_not:N #2 \exp_after:wN \__fp_parse_infix_&:N \exp_after:wN #1 - \tex_romannumeral:D \exp_after:wN \__fp_parse_expand:w + \exp:w \exp_after:wN \__fp_parse_expand:w \else: \exp_after:wN \__fp_parse_infix_and:N \exp_after:wN #1 @@ -11632,7 +11882,7 @@ \if_int_compare:w #1 < \c_three \exp_after:wN @ \exp_after:wN \__fp_ternary:NwwN - \tex_romannumeral:D + \exp:w \__fp_parse_operand:Nw \c_three \exp_after:wN \__fp_parse_expand:w \else: @@ -11648,7 +11898,7 @@ { kernel } { fp-missing } { ? } { ~for~?: } \exp_after:wN @ \exp_after:wN \__fp_ternary_auxii:NwwN - \tex_romannumeral:D + \exp:w \__fp_parse_operand:Nw \c_two \exp_after:wN \__fp_parse_expand:w \else: @@ -11723,7 +11973,7 @@ \exp_after:wN #3 \exp_after:wN #4 \exp_after:wN #5 - \tex_romannumeral:D \exp_after:wN \__fp_parse_expand:w + \exp:w \exp_after:wN \__fp_parse_expand:w } \cs_new:Npn \__fp_parse_compare_end:NNNNw #1#2#3#4#5 \fi: { @@ -11735,7 +11985,7 @@ \exp_after:wN #2 \exp_after:wN #3 \exp_after:wN #4 - \tex_romannumeral:D + \exp:w \__fp_parse_operand:Nw \c_seven \__fp_parse_expand:w #5 } \cs_new:Npn \__fp_parse_apply_compare:NwNNNNNwN @@ -11763,15 +12013,15 @@ \exp_after:wN \__fp_parse_continue_compare:NNwNN \exp_after:wN #1 \exp_after:wN #2 - \tex_romannumeral:D -`0 + \exp:w \exp_end_continue_f:w \__fp_exp_after_o:w #3; - \tex_romannumeral:D -`0 + \exp:w \exp_end_continue_f:w \else: \exp_after:wN \__fp_parse_continue:NwN \exp_after:wN #2 - \tex_romannumeral:D -`0 + \exp:w \exp_end_continue_f:w \exp_after:wN #1 - \tex_romannumeral:D -`0 + \exp:w \exp_end_continue_f:w \fi: #4 #2 } @@ -11781,7 +12031,7 @@ { \exp_after:wN \__fp_function_apply:nw \exp_after:wN #1 - \tex_romannumeral:D + \exp:w \__fp_parse_operand:Nw \c_sixteen \__fp_parse_expand:w } \cs_new_protected:Npn \fp_new_function:Npn #1#2# @@ -11801,7 +12051,7 @@ \exp_after:wN #2 \__int_value:w #3 \exp_after:wN ; \exp_after:wN } - \tex_romannumeral:D + \exp:w \__fp_parse_operand:Nw \c_sixteen \__fp_parse_expand:w } \cs_new:Npn #2 #4 {#5} @@ -11852,6 +12102,11 @@ { Unexpected~comma:~extra~arguments~ignored. } \__msg_kernel_new:nnn { kernel } { fp-num-args } { #1~expects~between~#2~and~#3~arguments. } +\cs_if_exist:cT { @unexpandable@protect } + { + \__msg_kernel_new:nnn { kernel } { fp-robust-cmd } + { Robust~command~#1 invalid~in~fp~expression! } + } %% File: l3fp-logic.dtx Copyright (C) 2011-2014 The LaTeX3 Project %% %% It may be distributed and/or modified under the conditions of the @@ -11890,7 +12145,7 @@ \prg_new_conditional:Npnn \fp_compare:n #1 { p , T , F , TF } { \exp_after:wN \__fp_compare_return:w - \tex_romannumeral:D -`0 \__fp_parse:n {#1} + \exp:w \exp_end_continue_f:w \__fp_parse:n {#1} } \cs_new:Npn \__fp_compare_return:w \s__fp \__fp_chk:w #1#2; { @@ -11904,7 +12159,7 @@ { \if_int_compare:w \exp_after:wN \__fp_compare_aux:wn - \tex_romannumeral:D -`0 \__fp_parse:n {#1} {#3} + \exp:w \exp_end_continue_f:w \__fp_parse:n {#1} {#3} = \__int_eval:w `#2 - `= \__int_eval_end: \prg_return_true: \else: @@ -11914,7 +12169,7 @@ \cs_new:Npn \__fp_compare_aux:wn #1; #2 { \exp_after:wN \__fp_compare_back:ww - \tex_romannumeral:D -`0 \__fp_parse:n {#2} #1; + \exp:w \exp_end_continue_f:w \__fp_parse:n {#2} #1; } \cs_new:Npn \__fp_compare_back:ww \s__fp \__fp_chk:w #1 #2 #3; @@ -12090,10 +12345,10 @@ \s__fp \__fp_chk:w { \__fp_ternary_loop_break:w } ; \__fp_ternary_break_point:n { \exp_after:wN \__fp_ternary_auxi:NwwN } \exp_after:wN #1 - \tex_romannumeral:D -`0 + \exp:w \exp_end_continue_f:w \__fp_exp_after_array_f:w #3 \s__fp_stop \exp_after:wN @ - \tex_romannumeral:D + \exp:w \__fp_parse_operand:Nw \c_two \__fp_parse_expand:w \else: @@ -12101,7 +12356,7 @@ { kernel } { fp-missing } { : } { ~for~?: } \exp_after:wN \__fp_parse_continue:NwN \exp_after:wN #1 - \tex_romannumeral:D -`0 + \exp:w \exp_end_continue_f:w \__fp_exp_after_array_f:w #3 \s__fp_stop \exp_after:wN #4 \exp_after:wN #1 @@ -12125,7 +12380,7 @@ { \exp_after:wN \__fp_parse_continue:NwN \exp_after:wN #1 - \tex_romannumeral:D -`0 + \exp:w \exp_end_continue_f:w \__fp_exp_after_array_f:w #2 \s__fp_stop #4 #1 } @@ -12133,7 +12388,7 @@ { \exp_after:wN \__fp_parse_continue:NwN \exp_after:wN #1 - \tex_romannumeral:D -`0 + \exp:w \exp_end_continue_f:w \__fp_exp_after_array_f:w #3 \s__fp_stop #4 #1 } @@ -13151,7 +13406,7 @@ { \exp_after:wN \__fp_ep_to_fixed_auxi:www \int_use:N \__int_eval:w 1 0000 0000 + #2 \exp_after:wN ; - \tex_romannumeral:D -`0 + \exp:w \exp_end_continue_f:w \prg_replicate:nn { \c_four - \int_max:nn {#1} { -32 } } { 0 } ; } \cs_new:Npn \__fp_ep_to_fixed_auxi:www 1#1; #2; #3#4#5#6#7; @@ -13499,7 +13754,7 @@ \cs_new:Npn \__fp_ln_x_ii:wnnnn #1; #2#3#4#5 { \exp_after:wN \__fp_ln_div_after:Nw - \cs:w c__fp_ln_ \tex_romannumeral:D #1 _fixed_tl \exp_after:wN \cs_end: + \cs:w c__fp_ln_ \__int_to_roman:w #1 _fixed_tl \exp_after:wN \cs_end: \__int_value:w \exp_after:wN \__fp_ln_x_iv:wnnnnnnnn \int_use:N \__int_eval:w @@ -13708,11 +13963,11 @@ \exp_after:wN \__fp_add_big_i_o:wNww \int_use:N \__int_eval:w \c_one - #4 ; 0 {1000}{0000}{0000}{0000} ; #5; - \tex_romannumeral:D + \exp:w \else: \if_int_compare:w #4 > \c_five % cf \c__fp_max_exponent_int \exp_after:wN \__fp_exp_overflow: - \tex_romannumeral:D + \exp:w \else: \if_int_compare:w #4 < \c_zero \exp_after:wN \use_i:nn @@ -13731,7 +13986,7 @@ #5 {#4} #1 #2 0 - \tex_romannumeral:D + \exp:w \fi: \fi: \exp_after:wN \c_zero @@ -13768,7 +14023,7 @@ \cs_new:Npn \__fp_exp_pos_large:NnnNwn #1#2#3 #4#5; #6 { \exp_after:wN \exp_after:wN - \cs:w __fp_exp_large_\tex_romannumeral:D #6:wN \exp_after:wN \cs_end: + \cs:w __fp_exp_large_ \__int_to_roman:w #6 :wN \exp_after:wN \cs_end: \exp_after:wN \c__fp_one_fixed_tl \exp_after:wN ; \__int_value:w #3 #4 \exp_stop_f: @@ -13889,7 +14144,7 @@ \__fp_case_return_o:Nw \c_nan_fp \else: \exp_after:wN \__fp_pow_neg:www - \tex_romannumeral:D -`0 \exp_after:wN \use:nn + \exp:w \exp_end_continue_f:w \exp_after:wN \use:nn \fi: { \if_meaning:w 1 #1 @@ -14059,7 +14314,7 @@ \or: \if_int_compare:w \__int_eval:w #1 / \c_two = \c_one \__fp_invalid_operation_o:Nww ^ #3; #4; - \tex_romannumeral:D -`0 + \exp:w \exp_end_continue_f:w \exp_after:wN \exp_after:wN \exp_after:wN \__fp_use_none_until_s:w \fi: @@ -14280,7 +14535,7 @@ \exp_after:wN \__fp_pack_twice_four:wNNNNNNNN \exp_after:wN \__fp_trigd_large_auxi:nnnnwNNNN \exp_after:wN ; - \tex_romannumeral:D -`0 + \exp:w \exp_end_continue_f:w \prg_replicate:nn { \int_max:nn { 22 - #1 } { 0 } } { 0 } #2#3#4#5#6#7 0000 0000 0000 ! } @@ -14672,12 +14927,12 @@ \if_case:w \__int_eval:w \__fp_array_count:n {#5} - \c_one \__int_eval_end: \exp_after:wN #1 \exp_after:wN #4 \c_one_fp #5 - \tex_romannumeral:D - \or: #2 #4 #5 \tex_romannumeral:D + \exp:w + \or: #2 #4 #5 \exp:w \else: \__msg_kernel_expandable_error:nnnnn { kernel } { fp-num-args } { #3() } { 1 } { 2 } - \exp_after:wN \c_nan_fp \tex_romannumeral:D + \exp_after:wN \c_nan_fp \exp:w \fi: \exp_after:wN \c_zero } @@ -14976,7 +15231,7 @@ \cs_new_nopar:Npn \fp_to_scientific:n { \exp_after:wN \__fp_to_scientific_dispatch:w - \tex_romannumeral:D -`0 \__fp_parse:n + \exp:w \exp_end_continue_f:w \__fp_parse:n } \group_begin: \char_set_catcode_other:N E @@ -14985,7 +15240,7 @@ \group_end: \cs_new:Npn \__fp_to_scientific_dispatch:w \s__fp \__fp_chk:w #1#2 { - \if_meaning:w 2 #2 \exp_after:wN - \tex_romannumeral:D -`0 \fi: + \if_meaning:w 2 #2 \exp_after:wN - \exp:w \exp_end_continue_f:w \fi: \if_case:w #1 \exp_stop_f: \__fp_case_return:nw { 0 } \or: \exp_after:wN \__fp_to_scientific_normal:wnnnnn @@ -15031,11 +15286,11 @@ \cs_new_nopar:Npn \fp_to_decimal:n { \exp_after:wN \__fp_to_decimal_dispatch:w - \tex_romannumeral:D -`0 \__fp_parse:n + \exp:w \exp_end_continue_f:w \__fp_parse:n } \cs_new:Npn \__fp_to_decimal_dispatch:w \s__fp \__fp_chk:w #1#2 { - \if_meaning:w 2 #2 \exp_after:wN - \tex_romannumeral:D -`0 \fi: + \if_meaning:w 2 #2 \exp_after:wN - \exp:w \exp_end_continue_f:w \fi: \if_case:w #1 \exp_stop_f: \__fp_case_return:nw { 0 } \or: \exp_after:wN \__fp_to_decimal_normal:wnnnnn @@ -15080,7 +15335,7 @@ \exp_after:wN \__fp_trim_zeros:w \exp_after:wN 0 \exp_after:wN . - \tex_romannumeral:D -`0 \prg_replicate:nn { - #2 } { 0 } + \exp:w \exp_end_continue_f:w \prg_replicate:nn { - #2 } { 0 } #3#4#5#6 ; } } @@ -15099,11 +15354,11 @@ \cs_new_nopar:Npn \fp_to_tl:n { \exp_after:wN \__fp_to_tl_dispatch:w - \tex_romannumeral:D -`0 \__fp_parse:n + \exp:w \exp_end_continue_f:w \__fp_parse:n } \cs_new:Npn \__fp_to_tl_dispatch:w \s__fp \__fp_chk:w #1#2 { - \if_meaning:w 2 #2 \exp_after:wN - \tex_romannumeral:D -`0 \fi: + \if_meaning:w 2 #2 \exp_after:wN - \exp:w \exp_end_continue_f:w \fi: \if_case:w #1 \exp_stop_f: \__fp_case_return:nw { 0 } \or: \exp_after:wN \__fp_to_tl_normal:nnnnn @@ -15136,11 +15391,11 @@ \cs_new_nopar:Npn \fp_to_int:n { \exp_after:wN \__fp_to_int_dispatch:w - \tex_romannumeral:D -`0 \__fp_parse:n + \exp:w \exp_end_continue_f:w \__fp_parse:n } \cs_new:Npn \__fp_to_int_dispatch:w #1; { - \exp_after:wN \__fp_to_decimal_dispatch:w \tex_romannumeral:D -`0 + \exp_after:wN \__fp_to_decimal_dispatch:w \exp:w \exp_end_continue_f:w \__fp_round:Nwn \__fp_round_to_nearest:NNN #1; { 0 } } \cs_new:Npn \dim_to_fp:n #1 @@ -15206,13 +15461,14 @@ { \exp_not:N \exp_after:wN , \exp_not:N \exp_after:wN \c_space_tl - \exp_not:N \tex_romannumeral:D -`0 + \exp_not:N \exp:w + \exp_not:N \exp_end_continue_f:w \exp_not:N \__fp_to_tl_dispatch:w #1 #2 ; } \exp_not:N \__fp_array_to_clist_loop:Nw } %% -%% File: l3fp-assign.dtx Copyright (C) 2011-2014 The LaTeX3 project +%% File: l3fp-assign.dtx Copyright (C) 2011-2015 The LaTeX3 project %% %% It may be distributed and/or modified under the conditions of the %% LaTeX Project Public License (LPPL), either version 1.3c of this @@ -15283,15 +15539,11 @@ \cs_generate_variant:Nn \fp_gsub:Nn { c } \cs_new_protected:Npn \fp_show:N #1 { - \fp_if_exist:NTF #1 - { \__msg_show_variable:n { > ~ \fp_to_tl:N #1 } } - { - \__msg_kernel_error:nnx { kernel } { variable-not-defined } - { \token_to_str:N #1 } - } + \__msg_show_variable:NNNnn #1 \fp_if_exist:NTF ? { } + { > ~ \token_to_str:N #1 = \fp_to_tl:N #1 } } -\cs_new_protected:Npn \fp_show:n #1 - { \__msg_show_variable:n { > ~ \fp_to_tl:n {#1} } } +\cs_new_protected_nopar:Npn \fp_show:n + { \__msg_show_wrap:Nn \fp_to_tl:n } \cs_generate_variant:Nn \fp_show:N { c } \fp_const:Nn \c_e_fp { 2.718 2818 2845 9045 } \fp_const:Nn \c_one_fp { 1 } @@ -15301,7 +15553,7 @@ \fp_new:N \l_tmpb_fp \fp_new:N \g_tmpa_fp \fp_new:N \g_tmpb_fp -%% File: l3box.dtx Copyright (C) 2005-2014 The LaTeX3 Project +%% File: l3box.dtx Copyright (C) 2005-2015 The LaTeX3 Project %% %% It may be distributed and/or modified under the conditions of the %% LaTeX Project Public License (LPPL), either version 1.3c of this @@ -15333,7 +15585,7 @@ %% prior consultation with the LaTeX3 Project. %% %% ----------------------------------------------------------------------- -\GetIdInfo$Id: l3box.dtx 5354 2014-08-23 01:35:39Z bruno $ +\GetIdInfo$Id: l3box.dtx 5822 2015-08-09 16:41:04Z joseph $ {L3 Experimental boxes} \cs_new_protected:Npn \box_new:N #1 { @@ -15455,6 +15707,7 @@ \int_set:Nn \tex_showboxbreadth:D {#3} \int_set:Nn \tex_showboxdepth:D {#4} \int_set_eq:NN \tex_tracingonline:D #1 + \int_set_eq:NN \tex_errorcontextlines:D \c_minus_one \box_if_exist:NTF #2 { \tex_showbox:D \use:n {#2} } { @@ -15463,7 +15716,7 @@ } \group_end: } -\cs_new_protected:Npn \hbox:n { \tex_hbox:D \scan_stop: } +\cs_new_protected:Npn \hbox:n #1 { \tex_hbox:D \scan_stop: {#1} } \cs_new_protected:Npn \hbox_set:Nn #1#2 { \tex_setbox:D #1 \tex_hbox:D {#2} } \cs_new_protected:Npn \hbox_gset:Nn { \tex_global:D \hbox_set:Nn } @@ -15483,12 +15736,6 @@ \cs_generate_variant:Nn \hbox_gset:Nw { c } \cs_new_eq:NN \hbox_set_end: \c_group_end_token \cs_new_eq:NN \hbox_gset_end: \c_group_end_token -\cs_new_eq:NN \hbox_set_inline_begin:N \hbox_set:Nw -\cs_new_eq:NN \hbox_set_inline_begin:c \hbox_set:cw -\cs_new_eq:NN \hbox_set_inline_end: \hbox_set_end: -\cs_new_eq:NN \hbox_gset_inline_begin:N \hbox_gset:Nw -\cs_new_eq:NN \hbox_gset_inline_begin:c \hbox_gset:cw -\cs_new_eq:NN \hbox_gset_inline_end: \hbox_gset_end: \cs_new_protected:Npn \hbox_to_wd:nn #1#2 { \tex_hbox:D to \__dim_eval:w #1 \__dim_eval_end: {#2} } \cs_new_protected:Npn \hbox_to_zero:n #1 { \tex_hbox:D to \c_zero_dim {#1} } @@ -15538,19 +15785,13 @@ \c_group_end_token } \cs_new_eq:NN \vbox_gset_end: \vbox_set_end: -\cs_new_eq:NN \vbox_set_inline_begin:N \vbox_set:Nw -\cs_new_eq:NN \vbox_set_inline_begin:c \vbox_set:cw -\cs_new_eq:NN \vbox_set_inline_end: \vbox_set_end: -\cs_new_eq:NN \vbox_gset_inline_begin:N \vbox_gset:Nw -\cs_new_eq:NN \vbox_gset_inline_begin:c \vbox_gset:cw -\cs_new_eq:NN \vbox_gset_inline_end: \vbox_gset_end: \cs_new_eq:NN \vbox_unpack:N \tex_unvcopy:D \cs_new_eq:NN \vbox_unpack_clear:N \tex_unvbox:D \cs_generate_variant:Nn \vbox_unpack:N { c } \cs_generate_variant:Nn \vbox_unpack_clear:N { c } \cs_new_protected:Npn \vbox_set_split_to_ht:NNn #1#2#3 { \tex_setbox:D #1 \tex_vsplit:D #2 to \__dim_eval:w #3 \__dim_eval_end: } -%% File: l3coffins.dtx Copyright(C) 2010-2014 The LaTeX3 Project +%% File: l3coffins.dtx Copyright(C) 2010-2015 The LaTeX3 Project %% %% It may be distributed and/or modified under the conditions of the %% LaTeX Project Public License (LPPL), either version 1.3c of this @@ -15583,7 +15824,7 @@ %% %% ----------------------------------------------------------------------- %% -\GetIdInfo$Id: l3coffins.dtx 5354 2014-08-23 01:35:39Z bruno $ +\GetIdInfo$Id: l3coffins.dtx 5789 2015-08-06 02:32:11Z bruno $ {L3 Coffin code layer} \box_new:N \l__coffin_internal_box \dim_new:N \l__coffin_internal_dim @@ -15651,12 +15892,14 @@ \cs_new_protected:Npn \coffin_new:N #1 { \box_new:N #1 + \__chk_suspend_log: \prop_clear_new:c { l__coffin_corners_ \__int_value:w #1 _prop } \prop_clear_new:c { l__coffin_poles_ \__int_value:w #1 _prop } \prop_gset_eq:cN { l__coffin_corners_ \__int_value:w #1 _prop } \c__coffin_corners_prop \prop_gset_eq:cN { l__coffin_poles_ \__int_value:w #1 _prop } \c__coffin_poles_prop + \__chk_resume_log: } \cs_generate_variant:Nn \coffin_new:N { c } \cs_new_protected:Npn \hcoffin_set:Nn #1#2 @@ -16345,7 +16588,12 @@ { \__coffin_if_exist:NT #1 { - \__msg_show_variable:Nnn #1 { coffins } + \__msg_show_pre:nnxxxx { LaTeX / kernel } { show-coffin } + { \token_to_str:N #1 } + { \dim_eval:n { \coffin_ht:N #1 } } + { \dim_eval:n { \coffin_dp:N #1 } } + { \dim_eval:n { \coffin_wd:N #1 } } + \__msg_show_wrap:n { \prop_map_function:cN { l__coffin_poles_ \__int_value:w #1 _prop } @@ -16372,13 +16620,13 @@ LaTeX~was~asked~to~find~a~typesetting~pole~for~a~coffin,~ but~either~the~coffin~does~not~exist~or~the~pole~name~is~wrong. } -\__msg_kernel_new:nnn { kernel } { show-coffins } +\__msg_kernel_new:nnn { kernel } { show-coffin } { - Size~of~coffin~\token_to_str:N #1 : \\ - > ~ ht~=~\dim_use:N \box_ht:N #1 \\ - > ~ dp~=~\dim_use:N \box_dp:N #1 \\ - > ~ wd~=~\dim_use:N \box_wd:N #1 \\ - Poles~of~coffin~\token_to_str:N #1 : + Size~of~coffin~#1 : \\ + > ~ ht~=~#2 \\ + > ~ dp~=~#3 \\ + > ~ wd~=~#4 \\ + Poles~of~coffin~#1 : } %% File: l3color.dtx Copyright(C) 2011,2012,2014 The LaTeX3 Project %% @@ -16470,35 +16718,14 @@ %% %% ----------------------------------------------------------------------- %% -\GetIdInfo$Id: l3candidates.dtx 5677 2015-07-22 14:47:23Z joseph $ +\GetIdInfo$Id: l3candidates.dtx 5911 2015-09-03 08:24:00Z joseph $ {L3 Experimental additions to l3kernel} -\group_begin: - \tex_lccode:D `? = `: \scan_stop: - \tex_catcode:D `? = 12 \scan_stop: -\tex_lowercase:D - { - \group_end: - \cs_new_protected:Npn \cs_log:N #1 - { - \__msg_log_wrap:n - { - > ~ \token_to_str:N #1 = - \exp_after:wN \__cs_show:www \cs_meaning:N #1 - \use_none:nn ? \prg_do_nothing: - } - } - } +\cs_new_protected_nopar:Npn \cs_log:N + { \__msg_log_next: \cs_show:N } \cs_new_protected_nopar:Npn \cs_log:c - { \group_begin: \exp_args:NNc \group_end: \cs_log:N } -\cs_new_protected:Npn \__kernel_register_log:N #1 - { - \cs_if_exist:NTF #1 - { \__msg_log_value:x { \token_to_str:N #1 = \tex_the:D #1 } } - { - \__msg_kernel_error:nnx { kernel } { variable-not-defined } - { \token_to_str:N #1 } - } - } + { \__msg_log_next: \cs_show:c } +\cs_new_protected_nopar:Npn \__kernel_register_log:N + { \__msg_log_next: \__kernel_register_show:N } \cs_generate_variant:Nn \__kernel_register_log:N { c } \fp_new:N \l__box_angle_fp \fp_new:N \l__box_cos_fp @@ -16886,16 +17113,10 @@ \box_set_eq:NN #1 \l__box_internal_box } \cs_generate_variant:Nn \box_viewport:Nnnnn { c } -\cs_new_protected:Npn \clist_log:N #1 - { - \__msg_log_variable:Nnn #1 { clist } - { \clist_map_function:NN #1 \__msg_show_item:n } - } -\cs_new_protected:Npn \clist_log:n #1 - { - \clist_set:Nn \l__clist_internal_clist {#1} - \clist_log:N \l__clist_internal_clist - } +\cs_new_protected_nopar:Npn \clist_log:N + { \__msg_log_next: \clist_show:N } +\cs_new_protected_nopar:Npn \clist_log:n + { \__msg_log_next: \clist_show:n } \cs_generate_variant:Nn \clist_log:N { c } \fp_new:N \l__coffin_sin_fp \fp_new:N \l__coffin_cos_fp @@ -17126,18 +17347,8 @@ {#5} {#6} } } -\cs_new_protected:Npn \coffin_log_structure:N #1 - { - \__coffin_if_exist:NT #1 - { - \__msg_log_variable:Nnn #1 { coffins } - { - \prop_map_function:cN - { l__coffin_poles_ \__int_value:w #1 _prop } - \__msg_show_item_unbraced:nn - } - } - } +\cs_new_protected_nopar:Npn \coffin_log_structure:N + { \__msg_log_next: \coffin_show_structure:N } \cs_generate_variant:Nn \coffin_log_structure:N { c } \cs_new_protected:Npn \file_if_exist_input:n #1 { @@ -17197,83 +17408,52 @@ } \tl_new:N \l__ior_internal_tl \cs_new_protected_nopar:Npn \ior_log_streams: - { \__ior_log_streams:Nn \g__ior_streams_prop { input } } -\cs_new_protected:Npn \__ior_log_streams:Nn #1#2 - { - \__msg_log:nnn { LaTeX / kernel } - { \prop_if_empty:NTF #1 { show-no-stream } { show-open-streams } } - {#2} - \__msg_log_wrap:n - { \prop_map_function:NN #1 \__msg_show_item_unbraced:nn } - } + { \__msg_log_next: \ior_list_streams: } \cs_new_protected_nopar:Npn \iow_log_streams: - { \__iow_log_streams:Nn \g__iow_streams_prop { output } } -\cs_new_protected:Npn \__iow_log_streams:Nn #1#2 - { - \__msg_log:nnn { LaTeX / kernel } - { \prop_if_empty:NTF #1 { show-no-stream } { show-open-streams } } - {#2} - \__msg_log_wrap:n - { \prop_map_function:NN #1 \__msg_show_item_unbraced:nn } - } -\cs_new_protected:Npn \fp_log:N #1 - { - \fp_if_exist:NTF #1 - { \__msg_log_value:x { \token_to_str:N #1 = \fp_to_tl:N #1 } } - { - \__msg_kernel_error:nnx { kernel } { variable-not-defined } - { \token_to_str:N #1 } - } - } -\cs_new_protected:Npn \fp_log:n #1 - { \__msg_log_value:x { \fp_to_tl:n {#1} } } + { \__msg_log_next: \iow_list_streams: } +\cs_new_protected_nopar:Npn \fp_log:N + { \__msg_log_next: \fp_show:N } +\cs_new_protected_nopar:Npn \fp_log:n + { \__msg_log_next: \fp_show:n } \cs_generate_variant:Nn \fp_log:N { c } -\cs_new_eq:NN \int_log:N \__kernel_register_log:N -\cs_new_eq:NN \int_log:c \__kernel_register_log:c -\cs_new_protected:Npn \int_log:n #1 - { \__msg_log_value:x { \int_eval:n {#1} } } -\cs_new_protected:Npn \keys_log:nn #1#2 - { \cs_log:c { \c__keys_code_root_tl #1 / \tl_to_str:n {#2} } } -\cs_new_protected:Npn \__msg_log:nnn #1#2#3 - { - \iow_wrap:nnnN - { \use:c { \c__msg_text_prefix_tl #1 / #2 } {#3} { } { } { } } - { } { } \iow_log:n - } -\cs_new_protected:Npn \__msg_log_variable:Nnn #1#2#3 +\cs_new_protected_nopar:Npn \int_log:N + { \__msg_log_next: \int_show:N } +\cs_generate_variant:Nn \int_log:N { c } +\cs_new_protected_nopar:Npn \int_log:n + { \__msg_log_next: \int_show:n } +\cs_new_protected_nopar:Npn \keys_log:nn + { \__msg_log_next: \keys_show:nn } +\cs_new:Npn \msg_expandable_error:nnnnnn #1#2#3#4#5#6 { - \cs_if_exist:NTF #1 + \exp_args:Nf \__msg_expandable_error_module:nn { - \__msg_log:nnn { LaTeX / kernel } { show- #2 } {#1} - \__msg_log_wrap:n {#3} - } - { - \__msg_kernel_error:nnx { kernel } { variable-not-defined } - { \token_to_str:N #1 } + \exp_args:Nf \tl_to_str:n + { \use:c { \c__msg_text_prefix_tl #1 / #2 } {#3} {#4} {#5} {#6} } } + {#1} } -\cs_new_protected:Npn \__msg_log_wrap:n #1 - { \iow_wrap:nnnN { #1 . } { } { } \__msg_log:n } -\cs_new_protected:Npn \__msg_log:n #1 - { \iow_log:x { \tl_if_single:nT {#1} { > ~ } #1 } } -\cs_new_protected:Npn \__msg_log_value:n #1 - { \iow_log:n { >~ #1 . } } -\cs_generate_variant:Nn \__msg_log_value:n { x } -\cs_new_protected:Npn \bool_log:N #1 +\cs_new:Npn \msg_expandable_error:nnnnn #1#2#3#4#5 + { \msg_expandable_error:nnnnnn {#1} {#2} {#3} {#4} {#5} { } } +\cs_new:Npn \msg_expandable_error:nnnn #1#2#3#4 + { \msg_expandable_error:nnnnnn {#1} {#2} {#3} {#4} { } { } } +\cs_new:Npn \msg_expandable_error:nnn #1#2#3 + { \msg_expandable_error:nnnnnn {#1} {#2} {#3} { } { } { } } +\cs_new:Npn \msg_expandable_error:nn #1#2 + { \msg_expandable_error:nnnnnn {#1} {#2} { } { } { } { } } +\cs_generate_variant:Nn \msg_expandable_error:nnnnnn { nnffff } +\cs_generate_variant:Nn \msg_expandable_error:nnnnn { nnfff } +\cs_generate_variant:Nn \msg_expandable_error:nnnn { nnff } +\cs_generate_variant:Nn \msg_expandable_error:nnn { nnf } +\cs_new:Npn \__msg_expandable_error_module:nn #1#2 { - \bool_if_exist:NTF #1 - { - \__msg_log_value:x - { \token_to_str:N #1 = \__bool_to_word:n {#1} } - } - { - \__msg_kernel_error:nnx { kernel } { variable-not-defined } - { \token_to_str:N #1 } - } + \exp_after:wN \exp_after:wN + \exp_after:wN \use_none_delimit_by_q_stop:w + \use:n { \::error ! ~ #2 : ~ #1 } \q_stop } -\cs_new_protected:Npn \bool_log:n #1 - { \__msg_log_value:x { \__bool_to_word:n {#1} } } -\cs_new:Npn \__bool_to_word:n #1 { \bool_if:nTF {#1} { true } { false } } +\cs_new_protected_nopar:Npn \bool_log:N + { \__msg_log_next: \bool_show:N } +\cs_new_protected_nopar:Npn \bool_log:n + { \__msg_log_next: \bool_show:n } \cs_generate_variant:Nn \bool_log:N { c } \cs_new:Npn \prop_map_tokens:Nn #1#2 { @@ -17290,11 +17470,8 @@ \__prop_map_tokens:nwwn {#1} } \cs_generate_variant:Nn \prop_map_tokens:Nn { c } -\cs_new_protected:Npn \prop_log:N #1 - { - \__msg_log_variable:Nnn #1 { prop } - { \prop_map_function:NN #1 \__msg_show_item:nn } - } +\cs_new_protected_nopar:Npn \prop_log:N + { \__msg_log_next: \prop_show:N } \cs_generate_variant:Nn \prop_log:N { c } \cs_new:Npn \seq_mapthread_function:NNN #1#2#3 { \exp_after:wN \__seq_mapthread_function:wNN #2 \q_stop #1 #3 } @@ -17339,11 +17516,8 @@ #1 #2 { #3 } \__seq_pop_item_def: } -\cs_new_protected:Npn \seq_log:N #1 - { - \__msg_log_variable:Nnn #1 { seq } - { \seq_map_function:NN #1 \__msg_show_item:n } - } +\cs_new_protected_nopar:Npn \seq_log:N + { \__msg_log_next: \seq_show:N } \cs_generate_variant:Nn \seq_log:N { c } \cs_new:Npn \skip_split_finite_else_action:nnNN #1#2#3#4 { @@ -17360,16 +17534,16 @@ } \cs_new_eq:NN \dim_log:N \__kernel_register_log:N \cs_new_eq:NN \dim_log:c \__kernel_register_log:c -\cs_new_protected:Npn \dim_log:n #1 - { \__msg_log_value:x { \dim_eval:n {#1} } } +\cs_new_protected_nopar:Npn \dim_log:n + { \__msg_log_next: \dim_show:n } \cs_new_eq:NN \skip_log:N \__kernel_register_log:N \cs_new_eq:NN \skip_log:c \__kernel_register_log:c -\cs_new_protected:Npn \skip_log:n #1 - { \__msg_log_value:x { \skip_eval:n {#1} } } +\cs_new_protected_nopar:Npn \skip_log:n + { \__msg_log_next: \skip_show:n } \cs_new_eq:NN \muskip_log:N \__kernel_register_log:N \cs_new_eq:NN \muskip_log:c \__kernel_register_log:c -\cs_new_protected:Npn \muskip_log:n #1 - { \__msg_log_value:x { \muskip_eval:n {#1} } } +\cs_new_protected_nopar:Npn \muskip_log:n + { \__msg_log_next: \muskip_show:n } \prg_new_conditional:Npnn \tl_if_single_token:n #1 { p , T , F , TF } { \tl_if_head_is_N_type:nTF {#1} @@ -17377,14 +17551,14 @@ { \tl_if_empty:nTF {#1} { \prg_return_false: } - { \__tl_if_empty_return:o { \tex_romannumeral:D -`0 #1 } } + { \__tl_if_empty_return:o { \exp:w \exp_end_continue_f:w #1 } } } } \cs_new:Npn \tl_reverse_tokens:n #1 { \etex_unexpanded:D \exp_after:wN { - \tex_romannumeral:D + \exp:w \__tl_act:NNNnn \__tl_reverse_normal:nN \__tl_reverse_group:nn @@ -17434,7 +17608,7 @@ { \etex_unexpanded:D \exp_after:wN { - \tex_romannumeral:D + \exp:w \__tl_act_case_aux:nn { \c__tl_act_uppercase_tl } {#1} } } @@ -17442,7 +17616,7 @@ { \etex_unexpanded:D \exp_after:wN { - \tex_romannumeral:D + \exp:w \__tl_act_case_aux:nn { \c__tl_act_lowercase_tl } {#1} } } @@ -17467,7 +17641,7 @@ \exp_after:wN \__tl_act_output:n \exp_after:wN { \exp_after:wN - { \tex_romannumeral:D \__tl_act_case_aux:nn {#1} {#2} } + { \exp:w \__tl_act_case_aux:nn {#1} {#2} } } } \cs_new_protected_nopar:Npn \tl_set_from_file:Nnn @@ -17525,7 +17699,7 @@ { \etex_unexpanded:D \exp_after:wN { - \tex_romannumeral:D + \exp:w \__tl_change_case_aux:nnn {#1} {#2} {#3} } } @@ -17553,7 +17727,7 @@ \cs_new:Npn \__tl_change_case_end:wn #1 \__tl_change_case_result:n #2 { \group_align_safe_end: - \c_zero + \exp_end: #2 } \cs_new:Npn \__tl_change_case_group:nwnn #1#2 \q_recursion_stop #3#4 @@ -17562,7 +17736,7 @@ { \exp_after:wN { - \tex_romannumeral:D + \exp:w \__tl_change_case_aux:nnn {#3} {#4} {#1} } } @@ -17980,7 +18154,7 @@ { \etex_unexpanded:D \exp_after:wN { - \tex_romannumeral:D + \exp:w \__tl_mixed_case_aux:nn {#1} {#2} } } @@ -18008,7 +18182,7 @@ { \exp_after:wN { - \tex_romannumeral:D + \exp:w \__tl_mixed_case_aux:nn {#3} {#1} } } @@ -18411,36 +18585,27 @@ \UHORN { \exp_stop_f: \uhorn } } \group_end: -\cs_new_protected:Npn \tl_log:N #1 - { - \tl_if_exist:NTF #1 - { \cs_log:N #1 } - { - \__msg_kernel_error:nnx { kernel } { variable-not-defined } - { \token_to_str:N #1 } - } - } +\cs_new_protected_nopar:Npn \tl_log:N + { \__msg_log_next: \tl_show:N } \cs_generate_variant:Nn \tl_log:N { c } -\cs_new_protected:Npn \tl_log:n #1 - { \__msg_log_wrap:n { > ~ \tl_to_str:n {#1} } } +\cs_new_protected_nopar:Npn \tl_log:n + { \__msg_log_next: \tl_show:n } \group_begin: \char_set_catcode_active:N \^^@ - \cs_set:Npn \char_tmp:NN #1#2 + \cs_set_protected:Npn \__char_tmp:nN #1#2 { - \cs_new:Npn #1 ##1 + \cs_new_protected:cpn { #1 :nN } ##1 { - \char_set_catcode_active:n { `##1 } \group_begin: - \char_set_lccode:nn { `\^^@ } { `##1 } - \tl_to_lowercase:n { \group_end: #2 ^^@ } + \char_set_catcode_active:n { ##1 } + \char_set_lccode:nn { `\^^@ } { ##1 } + \tex_lowercase:D { \group_end: #2 ^^@ } } + \cs_new_protected:cpx { #1 :NN } ##1 + { \exp_not:c { #1 : nN } { `##1 } } } - \char_tmp:NN \char_set_active:Npn \cs_set:Npn - \char_tmp:NN \char_set_active:Npx \cs_set:Npx - \char_tmp:NN \char_gset_active:Npn \cs_gset:Npn - \char_tmp:NN \char_gset_active:Npx \cs_gset:Npx - \char_tmp:NN \char_set_active_eq:NN \cs_set_eq:NN - \char_tmp:NN \char_gset_active_eq:NN \cs_gset_eq:NN + \__char_tmp:nN { char_set_active_eq } \cs_set_eq:NN + \__char_tmp:nN { char_gset_active_eq } \cs_gset_eq:NN \group_end: \group_begin: \char_set_catcode_other:N \O |