From 5887a5eebe6eb65039f6e778d037d710d689a42d Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Thu, 5 Mar 2020 01:01:48 +0000 Subject: l3 (4mar20) git-svn-id: svn://tug.org/texlive/trunk@54099 c570f23f-e606-0410-a88d-b1316a301751 --- .../texmf-dist/tex/latex/l3kernel/expl3-code.tex | 268 +++++++++++---------- .../tex/latex/l3kernel/expl3-generic.tex | 2 +- Master/texmf-dist/tex/latex/l3kernel/expl3.ltx | 16 +- Master/texmf-dist/tex/latex/l3kernel/expl3.sty | 13 +- .../tex/latex/l3packages/l3keys2e/l3keys2e.sty | 2 +- Master/texmf-dist/tex/latex/l3packages/xfp/xfp.sty | 2 +- .../tex/latex/l3packages/xfrac/xfrac.sty | 2 +- .../tex/latex/l3packages/xparse/xparse.sty | 131 +++++++--- .../tex/latex/l3packages/xtemplate/xtemplate.sty | 2 +- 9 files changed, 267 insertions(+), 171 deletions(-) (limited to 'Master/texmf-dist/tex/latex') diff --git a/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex b/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex index f70cee03eb5..2a8cd31429e 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex +++ b/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex @@ -67,7 +67,7 @@ %% and all files in that bundle must be distributed together. %% %% File: expl3.dtx -\def\ExplFileDate{2020-02-25}% +\def\ExplFileDate{2020-03-03}% \begingroup \def\next{\endgroup}% \expandafter\ifx\csname PackageError\endcsname\relax @@ -928,6 +928,8 @@ \__kernel_primitive:NN \dviextension \tex_dviextension:D \__kernel_primitive:NN \dvifeedback \tex_dvifeedback:D \__kernel_primitive:NN \dvivariable \tex_dvivariable:D + \__kernel_primitive:NN \eTeXglueshrinkorder \tex_eTeXglueshrinkorder:D + \__kernel_primitive:NN \eTeXgluestretchorder \tex_eTeXgluestretchorder:D \__kernel_primitive:NN \etoksapp \tex_etoksapp:D \__kernel_primitive:NN \etokspre \tex_etokspre:D \__kernel_primitive:NN \exceptionpenalty \tex_exceptionpenalty:D @@ -1236,9 +1238,11 @@ \__kernel_primitive:NN \hfi \tex_hfi:D \__kernel_primitive:NN \ifdbox \tex_ifdbox:D \__kernel_primitive:NN \ifddir \tex_ifddir:D + \__kernel_primitive:NN \ifjfont \tex_ifjfont:D \__kernel_primitive:NN \ifmbox \tex_ifmbox:D \__kernel_primitive:NN \ifmdir \tex_ifmdir:D \__kernel_primitive:NN \iftbox \tex_iftbox:D + \__kernel_primitive:NN \iftfont \tex_iftfont:D \__kernel_primitive:NN \iftdir \tex_iftdir:D \__kernel_primitive:NN \ifybox \tex_ifybox:D \__kernel_primitive:NN \ifydir \tex_ifydir:D @@ -1280,6 +1284,7 @@ \__kernel_primitive:NN \ybaselineshift \tex_ybaselineshift:D \__kernel_primitive:NN \yoko \tex_yoko:D \__kernel_primitive:NN \vfi \tex_vfi:D + \__kernel_primitive:NN \currentcjktoken \tex_currentcjktoken:D \__kernel_primitive:NN \disablecjktoken \tex_disablecjktoken:D \__kernel_primitive:NN \enablecjktoken \tex_enablecjktoken:D \__kernel_primitive:NN \forcecjktoken \tex_forcecjktoken:D @@ -8856,7 +8861,9 @@ { \tl_to_str:n {#2} } { \char_generate:nn {#1} { 12 } } } -\cs_if_exist:NF \tex_Uchar:D +\bool_lazy_or:nnF + { \cs_if_exist_p:N \tex_luatexversion:D } + { \cs_if_exist_p:N \tex_XeTeXversion:D } { \cs_set:Npn \__char_str_change_case:nN #1#2 { \tl_to_str:n {#2} } @@ -12523,147 +12530,159 @@ \muskip_new:N \g_tmpa_muskip \muskip_new:N \g_tmpb_muskip %% File: l3keys.dtx -\tl_new:N \l__keyval_key_tl -\tl_new:N \l__keyval_value_tl -\tl_new:N \l__keyval_sanitise_tl -\cs_new_protected:Npn \keyval_parse:NNn #1#2#3 - { - \tl_set:Nn \l__keyval_sanitise_tl {#3} - \__keyval_sanitise_equals: - \__keyval_sanitise_comma: - \exp_after:wN \__keyval_loop:NNw \exp_after:wN #1 \exp_after:wN #2 - \exp_after:wN \q_mark \l__keyval_sanitise_tl , \q_recursion_tail , - } +\scan_new:N \s__keyval_nil +\scan_new:N \s__keyval_mark +\scan_new:N \s__keyval_stop +\scan_new:N \s__keyval_tail \group_begin: - \char_set_catcode_active:n { `\= } - \char_set_catcode_active:n { `\, } - \cs_new_protected:Npn \__keyval_sanitise_equals: + \cs_set_protected:Npn \__keyval_tmp:NN #1#2 { - \exp_after:wN \__keyval_sanitise_equals_auxi:w \l__keyval_sanitise_tl - \q_mark = \q_nil = - \exp_after:wN \__keyval_sanitise_aux:w \l__keyval_sanitise_tl - } - \cs_new_protected:Npn \__keyval_sanitise_equals_auxi:w #1 = - { - \tl_set:Nn \l__keyval_sanitise_tl {#1} - \__keyval_sanitise_equals_auxii:w - } - \cs_new_protected:Npn \__keyval_sanitise_equals_auxii:w #1 = - { - \if_meaning:w \q_nil #1 \scan_stop: - \else: - \tl_set:Nx \l__keyval_sanitise_tl + \cs_new:Npn \keyval_parse:NNn ##1 ##2 ##3 + { + \__keyval_loop_active:NNw ##1 ##2 \s__keyval_mark ##3 #1 \s__keyval_tail #1 + } + \cs_new:Npn \__keyval_loop_active:NNw ##1 ##2 ##3 #1 + { + \__keyval_if_recursion_tail:w ##3 + \__keyval_end_loop_active:w \s__keyval_mark \s__keyval_tail + \__keyval_loop_other:NNw ##1 ##2 ##3 , \s__keyval_tail , + \__keyval_loop_active:NNw ##1 ##2 \s__keyval_mark + } + \cs_new:Npn \__keyval_loop_other:NNw ##1 ##2 ##3 , + { + \__keyval_if_recursion_tail:w ##3 + \__keyval_end_loop_other:w \s__keyval_mark \s__keyval_tail + \__keyval_if_has_equal_other:w ##3 = \s__keyval_stop + \__keyval_has_false:w \s__keyval_mark \s__keyval_stop \use_i:nn { - \exp_not:o \l__keyval_sanitise_tl - \token_to_str:N = - \exp_not:n {#1} + \__keyval_if_has_equal_active:w ##3 #2 \s__keyval_stop + \__keyval_has_false:w \s__keyval_mark \s__keyval_stop \use_i:nn + \__keyval_misplaced_equal_error: + { \__keyval_split_other:w ##3 = \s__keyval_stop ##2 } } - \exp_after:wN \__keyval_sanitise_equals_auxii:w - \fi: - } - \cs_new_protected:Npn \__keyval_sanitise_comma: - { - \exp_after:wN \__keyval_sanitise_comma_auxi:w \l__keyval_sanitise_tl - \q_mark , \q_nil , - \exp_after:wN \__keyval_sanitise_aux:w \l__keyval_sanitise_tl - } - \cs_new_protected:Npn \__keyval_sanitise_comma_auxi:w #1 , - { - \tl_set:Nn \l__keyval_sanitise_tl {#1} - \__keyval_sanitise_comma_auxii:w - } - \cs_new_protected:Npn \__keyval_sanitise_comma_auxii:w #1 , - { - \if_meaning:w \q_nil #1 \scan_stop: - \else: - \tl_set:Nx \l__keyval_sanitise_tl { - \exp_not:o \l__keyval_sanitise_tl - \token_to_str:N , - \exp_not:n {#1} + \__keyval_if_has_equal_active:w ##3 #2 \s__keyval_stop + \__keyval_has_false:w \s__keyval_mark \s__keyval_stop \use_i:nn + { \__keyval_split_active:w ##3 #2 \s__keyval_stop ##2 } + { + \__keyval_if_blank:w ##3 \s__keyval_nil \s__keyval_stop + \__keyval_blank_true:w \s__keyval_mark \s__keyval_stop \use:n + { \__keyval_trim:nN { ##3 } \__keyval_key:nN ##1 } + } } - \exp_after:wN \__keyval_sanitise_comma_auxii:w - \fi: - } + \__keyval_loop_other:NNw ##1 ##2 \s__keyval_mark + } + \cs_new:Npn \__keyval_split_active:w ##1 #2 + { + \__keyval_trim:nN { ##1 } \__keyval_split_active:nw \s__keyval_mark + } + \cs_new:Npn \__keyval_split_active:nw ##1 ##2 #2 ##3 \s__keyval_stop + { + \__keyval_if_empty:w \s__keyval_mark ##3 \s__keyval_stop + \__keyval_has_false:w \s__keyval_mark \s__keyval_stop \use_i:nn + { \__keyval_misplaced_equal_error: \use_none:n } + { \__keyval_trim:nN { ##2 } \__keyval_key_val:nnN { ##1 } } + } + \cs_new:Npn \__keyval_if_has_equal_active:w ##1 #2 + { + \__keyval_if_empty:w \s__keyval_mark + } + } + \char_set_catcode_active:n { `\, } + \char_set_catcode_active:n { `\= } + \__keyval_tmp:NN , = \group_end: -\cs_new_protected:Npn \__keyval_sanitise_aux:w #1 \q_mark - { \tl_set:Nn \l__keyval_sanitise_tl {#1} } -\cs_new_protected:Npn \__keyval_loop:NNw #1#2#3 , +\cs_new:Npn \__keyval_end_loop_active:w + \s__keyval_mark \s__keyval_tail + \__keyval_loop_other:NNw #1 , \s__keyval_tail , + \__keyval_loop_active:NNw #2 \s__keyval_mark + {} +\cs_new:Npn \__keyval_end_loop_other:w + \s__keyval_mark \s__keyval_tail + \__keyval_if_has_equal_other:w #1 = \s__keyval_stop + \__keyval_has_false:w \s__keyval_mark \s__keyval_stop \use_i:nn + #2 + \__keyval_loop_other:NNw #3 \s__keyval_mark + {} +\cs_new:Npn \__keyval_split_other:w #1 = { - \exp_after:wN \if_meaning:w \exp_after:wN \q_recursion_tail - \use_none:n #3 \prg_do_nothing: - \else: - \__keyval_split:NNw #1#2#3 == \q_stop - \exp_after:wN \__keyval_loop:NNw \exp_after:wN #1 \exp_after:wN #2 - \exp_after:wN \q_mark - \fi: + \__keyval_trim:nN { #1 } \__keyval_split_other:nw \s__keyval_mark } -\cs_new_protected:Npn \__keyval_split:NNw #1#2#3 = + \cs_new:Npn \__keyval_split_other:nw #1 #2 = #3 \s__keyval_stop + { + \__keyval_if_empty:w \s__keyval_mark #3 \s__keyval_stop + \__keyval_has_false:w \s__keyval_mark \s__keyval_stop \use_i:nn + { \__keyval_misplaced_equal_error: \use_none:n } + { \__keyval_trim:nN { #2 } \__keyval_key_val:nnN { #1 } } + } +\cs_new:Npn \__keyval_key:nN #1 #2 { - \__keyval_def:Nn \l__keyval_key_tl {#3} - \if_meaning:w \l__keyval_key_tl \c_empty_tl - \exp_after:wN \__keyval_split_tidy:w - \else: - \exp_after:wN \__keyval_split_value:NNw - \exp_after:wN #1 - \exp_after:wN #2 - \exp_after:wN \q_mark - \fi: + \exp_not:n { #2 { #1 } } } -\cs_new_protected:Npn \__keyval_split_value:NNw #1#2#3 = #4 \q_stop +\cs_new:Npn \__keyval_key_val:nnN #1 #2 #3 { - \if:w \scan_stop: \tl_to_str:n {#4} \scan_stop: - \cs_set:Npx \__keyval_action: - { \exp_not:N #1 { \exp_not:o \l__keyval_key_tl } } - \else: - \if:w - \scan_stop: - \__kernel_tl_to_str:w \exp_after:wN { \use_none:n #4 } - \scan_stop: - \__keyval_def:Nn \l__keyval_value_tl {#3} - \cs_set:Npx \__keyval_action: - { - \exp_not:N #2 - { \exp_not:o \l__keyval_key_tl } - { \exp_not:o \l__keyval_value_tl } - } - \else: - \cs_set:Npn \__keyval_action: - { - \__kernel_msg_error:nn { kernel } - { misplaced-equals-sign } - } - \fi: - \fi: - \__keyval_action: + \__keyval_if_empty:w \s__keyval_mark #2 \s__keyval_stop + \__keyval_empty_key:w \s__keyval_mark \s__keyval_stop + \exp_not:n { #3 { #2 } { #1 } } } -\cs_new_protected:Npn \__keyval_split_tidy:w #1 \q_stop +\cs_new:Npn \__keyval_if_empty:w #1 \s__keyval_mark \s__keyval_stop {} +\cs_new:Npn \__keyval_if_blank:w \s__keyval_mark #1 { \__keyval_if_empty:w \s__keyval_mark } +\cs_new:Npn \__keyval_if_recursion_tail:w #1 \s__keyval_mark \s__keyval_tail {} +\cs_new:Npn \__keyval_has_false:w \s__keyval_mark \s__keyval_stop \use_i:nn #1 #2 { #2 } +\cs_new:Npn \__keyval_blank_true:w \s__keyval_mark \s__keyval_stop \use:n #1 {} +\cs_new:Npn \__keyval_empty_key:w \s__keyval_mark \s__keyval_stop \exp_not:n #1 { - \if:w - \scan_stop: - \__kernel_tl_to_str:w \exp_after:wN { \use_none:n #1 } - \scan_stop: - \else: - \exp_after:wN \__keyval_empty_key: - \fi: + \__keyval_misplaced_equal_error: } -\cs_new:Npn \__keyval_action: { } -\cs_new_protected:Npn \__keyval_empty_key: - { \__kernel_msg_error:nn { kernel } { misplaced-equals-sign } } -\cs_new_protected:Npn \__keyval_def:Nn #1#2 +\cs_new:Npn \__keyval_if_has_equal_other:w #1 = { - \tl_set:Nx #1 - { \tl_trim_spaces_apply:oN { \use_none:n #2 } \__keyval_def_aux:n } + \__keyval_if_empty:w \s__keyval_mark } -\cs_new:Npn \__keyval_def_aux:n #1 - { \__keyval_def_aux:w #1 \q_stop } -\cs_new:Npn \__keyval_def_aux:w #1 \q_stop { \exp_not:n {#1} } -\__kernel_msg_new:nnnn { kernel } { misplaced-equals-sign } - { Misplaced~equals~sign~in~key-value~input~\msg_line_context: } +\cs_new:Npn \__keyval_misplaced_equal_error: { - LaTeX~is~attempting~to~parse~some~key-value~input~but~found~ - two~equals~signs~not~separated~by~a~comma. + \__kernel_msg_expandable_error:nn { kernel } { misplaced-equals-sign } } +\__kernel_msg_new:nnn { kernel } { misplaced-equals-sign } + { Misplaced~equals~sign~in~key-value~input~\msg_line_context: } +\group_begin: + \cs_set_protected:Npn \__keyval_tmp:n #1 + { + \cs_new:Npn \__keyval_trim:nN ##1 + { + \__keyval_trim_auxi:w + ##1 + \s__keyval_nil + \s__keyval_mark #1 {} + \s__keyval_mark \__keyval_trim_auxii:w + \__keyval_trim_auxiii:w + #1 \s__keyval_nil + \__keyval_trim_auxiv:w + \s__keyval_stop + } + \cs_new:Npn \__keyval_trim_auxi:w ##1 \s__keyval_mark #1 ##2 \s__keyval_mark ##3 + { + ##3 + \__keyval_trim_auxi:w + \s__keyval_mark + ##2 + \s__keyval_mark #1 {##1} + } + \cs_new:Npn \__keyval_trim_auxii:w \__keyval_trim_auxi:w \s__keyval_mark \s__keyval_mark ##1 + { + \__keyval_trim_auxiii:w + ##1 + } + \cs_new:Npn \__keyval_trim_auxiii:w ##1 #1 \s__keyval_nil ##2 + { + ##2 + ##1 \s__keyval_nil + \__keyval_trim_auxiii:w + } + \cs_new:Npn \__keyval_trim_auxiv:w \s__keyval_mark ##1 \s__keyval_nil ##2 \s__keyval_stop ##3 + { ##3 { ##1 } } + } + \__keyval_tmp:n { ~ } +\group_end: \str_const:Nn \c__keys_code_root_str { key~code~>~ } \str_const:Nn \c__keys_default_root_str { key~default~>~ } \str_const:Nn \c__keys_groups_root_str { key~groups~>~ } @@ -13590,7 +13609,6 @@ { \exp_after:wN \__keys_trim_spaces_auxi:w \tl_to_str:n {#1} / \q_nil \q_stop - } \cs_new:Npn \__keys_trim_spaces_auxi:w #1 / #2 \q_stop { diff --git a/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex b/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex index 656b30eb931..e406ede95eb 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex +++ b/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex @@ -19,7 +19,7 @@ %% and all files in that bundle must be distributed together. %% %% File: expl3.dtx -\def\ExplFileDate{2020-02-25}% +\def\ExplFileDate{2020-03-03}% \let\ExplLoaderFileDate\ExplFileDate \begingroup \def\tempa{LaTeX2e}% diff --git a/Master/texmf-dist/tex/latex/l3kernel/expl3.ltx b/Master/texmf-dist/tex/latex/l3kernel/expl3.ltx index 541df3b46eb..978a95d7f3f 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/expl3.ltx +++ b/Master/texmf-dist/tex/latex/l3kernel/expl3.ltx @@ -19,7 +19,7 @@ %% and all files in that bundle must be distributed together. %% %% File: expl3.dtx -\def\ExplFileDate{2020-02-25}% +\def\ExplFileDate{2020-03-03}% \let\ExplLoaderFileDate\ExplFileDate \everyjob\expandafter{\the\everyjob \message{L3 programming layer <\ExplFileDate>}% @@ -50,6 +50,9 @@ \expandafter\ifx\csname tex\string _let:D\endcsname\relax \expandafter\endinput \fi +\ifdefined\@pushfilenameaux + \ExplSyntaxOn +\fi \cs_if_exist:NF \c__expl_def_ext_tl { \tl_const:Nn \c__expl_def_ext_tl { def } } \cs_gset_protected:Npn \__kernel_sys_configuration_load:n #1 @@ -76,7 +79,7 @@ \sys_load_debug: \debug_on:n { log-functions } } , - suppress-backend-headers .bool_set_inverse:N + suppress-backend-headers .bool_gset_inverse:N = \g__kernel_backend_header_bool , suppress-backend-headers .initial:n = false , undo-recent-deprecations .code:n = @@ -129,15 +132,18 @@ { \ExplSyntaxOff } { \exp_after:wN \__expl_status_pop:w \l__expl_status_stack_tl \q_stop } } -\cs_new_protected:Npn \__expl_status_pop:w #1#2 \q_stop +\cs_gset_protected:Npn \__expl_status_pop:w #1#2 \q_stop { \tl_set:Nn \l__expl_status_stack_tl {#2} \int_if_odd:nTF {#1} { \ExplSyntaxOn } { \ExplSyntaxOff } } -\tl_new:N \l__expl_status_stack_tl -\tl_set:Nn \l__expl_status_stack_tl { 0 } +\tl_if_exist:NF \l__expl_status_stack_tl + { + \tl_new:N \l__expl_status_stack_tl + \tl_set:Nn \l__expl_status_stack_tl { 0 } + } \ExplSyntaxOff %% %% diff --git a/Master/texmf-dist/tex/latex/l3kernel/expl3.sty b/Master/texmf-dist/tex/latex/l3kernel/expl3.sty index 0e730c8395e..50b2f0b478c 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/expl3.sty +++ b/Master/texmf-dist/tex/latex/l3kernel/expl3.sty @@ -19,7 +19,7 @@ %% and all files in that bundle must be distributed together. %% %% File: expl3.dtx -\def\ExplFileDate{2020-02-25}% +\def\ExplFileDate{2020-03-03}% \let\ExplLoaderFileDate\ExplFileDate \ProvidesPackage{expl3} [% @@ -94,7 +94,7 @@ \sys_load_debug: \debug_on:n { log-functions } } , - suppress-backend-headers .bool_set_inverse:N + suppress-backend-headers .bool_gset_inverse:N = \g__kernel_backend_header_bool , suppress-backend-headers .initial:n = false , undo-recent-deprecations .code:n = @@ -149,15 +149,18 @@ { \ExplSyntaxOff } { \exp_after:wN \__expl_status_pop:w \l__expl_status_stack_tl \q_stop } } -\cs_new_protected:Npn \__expl_status_pop:w #1#2 \q_stop +\cs_gset_protected:Npn \__expl_status_pop:w #1#2 \q_stop { \tl_set:Nn \l__expl_status_stack_tl {#2} \int_if_odd:nTF {#1} { \ExplSyntaxOn } { \ExplSyntaxOff } } -\tl_new:N \l__expl_status_stack_tl -\tl_set:Nn \l__expl_status_stack_tl { 0 } +\tl_if_exist:NF \l__expl_status_stack_tl + { + \tl_new:N \l__expl_status_stack_tl + \tl_set:Nn \l__expl_status_stack_tl { 0 } + } \cs_gset_eq:NN \__kernel_sys_configuration_load:n \__kernel_sys_configuration_load_std:n %% diff --git a/Master/texmf-dist/tex/latex/l3packages/l3keys2e/l3keys2e.sty b/Master/texmf-dist/tex/latex/l3packages/l3keys2e/l3keys2e.sty index 9efae7c423e..61eba78735f 100644 --- a/Master/texmf-dist/tex/latex/l3packages/l3keys2e/l3keys2e.sty +++ b/Master/texmf-dist/tex/latex/l3packages/l3keys2e/l3keys2e.sty @@ -32,7 +32,7 @@ }% \endinput } -\ProvidesExplPackage{l3keys2e}{2020-02-25}{} +\ProvidesExplPackage{l3keys2e}{2020-03-03}{} {LaTeX2e option processing using LaTeX3 keys} \cs_generate_variant:Nn \clist_put_right:Nn { Nv } \cs_generate_variant:Nn \keys_if_exist:nnT { nx } diff --git a/Master/texmf-dist/tex/latex/l3packages/xfp/xfp.sty b/Master/texmf-dist/tex/latex/l3packages/xfp/xfp.sty index 47575d64cd9..3dec6878540 100644 --- a/Master/texmf-dist/tex/latex/l3packages/xfp/xfp.sty +++ b/Master/texmf-dist/tex/latex/l3packages/xfp/xfp.sty @@ -33,7 +33,7 @@ \endinput } \RequirePackage{xparse} -\ProvidesExplPackage{xfp}{2020-02-25}{} +\ProvidesExplPackage{xfp}{2020-03-03}{} {L3 Floating point unit} \NewExpandableDocumentCommand \fpeval { m } { \fp_eval:n {#1} } \NewExpandableDocumentCommand \inteval { m } { \int_eval:n {#1} } diff --git a/Master/texmf-dist/tex/latex/l3packages/xfrac/xfrac.sty b/Master/texmf-dist/tex/latex/l3packages/xfrac/xfrac.sty index 8cd79cadcb4..b7e157493c7 100644 --- a/Master/texmf-dist/tex/latex/l3packages/xfrac/xfrac.sty +++ b/Master/texmf-dist/tex/latex/l3packages/xfrac/xfrac.sty @@ -34,7 +34,7 @@ \endinput } \RequirePackage{amstext,graphicx,l3keys2e,textcomp,xparse,xtemplate} -\ProvidesExplPackage{xfrac}{2020-02-25}{} +\ProvidesExplPackage{xfrac}{2020-03-03}{} {L3 Experimental split-level fractions} \keys_define:nn { xfrac } { diff --git a/Master/texmf-dist/tex/latex/l3packages/xparse/xparse.sty b/Master/texmf-dist/tex/latex/l3packages/xparse/xparse.sty index 38b099379ce..4965ed65475 100644 --- a/Master/texmf-dist/tex/latex/l3packages/xparse/xparse.sty +++ b/Master/texmf-dist/tex/latex/l3packages/xparse/xparse.sty @@ -32,7 +32,7 @@ }% \endinput } -\ProvidesExplPackage{xparse}{2020-02-25}{} +\ProvidesExplPackage{xparse}{2020-03-03}{} {L3 Experimental document command parser} \tl_new:N \l__xparse_arg_spec_tl \tl_new:N \l__xparse_args_tl @@ -503,8 +503,8 @@ \cs_new_protected:Npn \__xparse_normalize_type_D:w #1#2#3 { \quark_if_recursion_tail_stop_do:nn {#3} { \__xparse_bad_arg_spec:wn } - \__xparse_single_char_check:n {#1} - \__xparse_single_char_check:n {#2} + \__xparse_single_token_check:n {#1} \__xparse_allowed_token_check:N #1 + \__xparse_single_token_check:n {#2} \__xparse_add_arg_spec:n { D #1 #2 {#3} } \tl_put_right:Nn \l__xparse_last_delimiters_tl {#1} \bool_set_false:N \l__xparse_grab_expandably_bool @@ -514,7 +514,8 @@ { \quark_if_recursion_tail_stop_do:nn {#2} { \__xparse_bad_arg_spec:wn } \tl_if_blank:nT {#1} { \__xparse_bad_arg_spec:wn } - \tl_map_function:nN {#1} \__xparse_single_char_check:n + \tl_map_function:nN {#1} \__xparse_single_token_check:n + \tl_map_function:nN {#1} \__xparse_allowed_token_check:N \__xparse_normalize_E_unique_check:w #1 \q_nil \q_stop \int_compare:nNnT { \tl_count:n {#2} } > { \tl_count:n {#1} } { \__xparse_bad_arg_spec:wn } @@ -543,7 +544,7 @@ \cs_new_protected:Npn \__xparse_normalize_type_t:w #1 { \quark_if_recursion_tail_stop_do:Nn #1 { \__xparse_bad_arg_spec:wn } - \__xparse_single_char_check:n {#1} + \__xparse_single_token_check:n {#1} \__xparse_allowed_token_check:N #1 \tl_put_right:Nx \l__xparse_arg_spec_tl { \bool_if:NT \l__xparse_obey_spaces_bool { ! } @@ -570,8 +571,8 @@ \cs_new_protected:Npn \__xparse_normalize_type_R:w #1#2#3 { \quark_if_recursion_tail_stop_do:nn {#3} { \__xparse_bad_arg_spec:wn } - \__xparse_single_char_check:n {#1} - \__xparse_single_char_check:n {#2} + \__xparse_single_token_check:n {#1} \__xparse_allowed_token_check:N #1 + \__xparse_single_token_check:n {#2} \__xparse_delimiter_check:nnn {#1} { R/r } { \tl_to_str:n {#1} } \bool_set_false:N \l__xparse_grab_expandably_bool \__xparse_add_arg_spec_mandatory:n { R #1 #2 {#3} } @@ -607,23 +608,32 @@ { \tl_to_str:n {#1} } \__xparse_bad_def:wn } -\cs_new_protected:Npn \__xparse_single_char_check:n #1 +\cs_new_protected:Npn \__xparse_single_token_check:n #1 { - \tl_trim_spaces_apply:nN {#1} \tl_if_single_token:nTF + \tl_trim_spaces_apply:nN {#1} \tl_if_single_token:nF { - \group_begin: - \tex_escapechar:D = 92 \scan_stop: - \exp_args:Nx \tl_if_single_token:nF - { \exp_args:No \tl_to_str:n { \use:nn #1 { } } } - { - \__kernel_msg_warning:nnxx { xparse } { not-single-char } - { \__xparse_environment_or_command: } { \tl_to_str:n {#1} } - } - \group_end: + \__kernel_msg_error:nnxx { xparse } { not-single-token } + { \__xparse_environment_or_command: } { \tl_to_str:n {#1} } + \__xparse_bad_def:wn } + } +\cs_new_protected:Npn \__xparse_allowed_token_check:N #1 + { + \token_if_eq_meaning:NNTF #1 \c_group_begin_token + { \use:n } + { + \token_if_eq_meaning:NNTF #1 \c_group_end_token + { \use:n } + { \use_none:n } + } { - \__kernel_msg_error:nnxx { xparse } { not-single-char } + \__kernel_msg_error:nnxxx + { xparse } { forbidden-implicit-group-token } { \__xparse_environment_or_command: } { \tl_to_str:n {#1} } + { + \token_if_eq_meaning:NNTF #1 \c_group_begin_token + { begin } { end } + } \__xparse_bad_def:wn } } @@ -1055,12 +1065,12 @@ \cs_new_protected:Npn \__xparse_grab_D_obey_spaces:w #1#2#3 \__xparse_run_code: { \__xparse_grab_D_aux:NNnNN #1 #2 {#3} \cs_set_protected_nopar:Npn - \peek_meaning_remove:NTF + \__xparse_peek_meaning_remove:NTF } \cs_new_protected:Npn \__xparse_grab_D_long_obey_spaces:w #1#2#3 \__xparse_run_code: { \__xparse_grab_D_aux:NNnNN #1 #2 {#3} \cs_set_protected:Npn - \peek_meaning_remove:NTF + \__xparse_peek_meaning_remove:NTF } \cs_new_protected:Npn \__xparse_grab_D_aux:NNnNN #1#2#3#4#5 { @@ -1134,8 +1144,15 @@ \l__xparse_fn_tl \char_generate:nn { `#1 } { 11 } } { - \exp_after:wN \l__xparse_fn_tl - \token_to_str:N #1 + \__xparse_token_if_cs:NTF #1 + { + \exp_after:wN \l__xparse_fn_tl + \cs:w \cs_to_str:N #1 ~ \cs_end: + } + { + \exp_after:wN \l__xparse_fn_tl + \token_to_str:N #1 + } } } \cs_new_protected:Npn \__xparse_grab_E:w #1#2 \__xparse_run_code: @@ -1154,13 +1171,13 @@ { \__xparse_grab_E:nnNN {#1} {#2} \cs_set_protected_nopar:Npn - \peek_meaning_remove:NTF + \__xparse_peek_meaning_remove:NTF } \cs_new_protected:Npn \__xparse_grab_E_long_obey_spaces:w #1#2 \__xparse_run_code: { \__xparse_grab_E:nnNN {#1} {#2} \cs_set_protected:Npn - \peek_meaning_remove:NTF + \__xparse_peek_meaning_remove:NTF } \cs_new_protected:Npn \__xparse_grab_E:nnNN #1#2#3#4 { @@ -1327,7 +1344,7 @@ \cs_new_protected:Npn \__xparse_grab_t:w { \__xparse_grab_t_aux:NNw \__xparse_peek_nonspace_remove:NTF } \cs_new_protected:Npn \__xparse_grab_t_obey_spaces:w - { \__xparse_grab_t_aux:NNw \peek_meaning_remove:NTF } + { \__xparse_grab_t_aux:NNw \__xparse_peek_meaning_remove:NTF } \cs_new_protected:Npn \__xparse_grab_t_aux:NNw #1#2#3 \__xparse_run_code: { \tl_set:Nn \l__xparse_signature_tl {#3} @@ -1878,6 +1895,15 @@ } } \group_end: +\cs_new_protected:Npn \__xparse_token_if_cs:NTF #1 + { + \group_begin: + \int_set:Nn \tex_escapechar:D { 92 } + \exp_args:Nx \tl_if_empty:nTF + { \exp_args:No \str_tail:n { \token_to_str:N #1 } } + { \group_end: \use_ii:nn } + { \group_end: \use_i:nn } + } \cs_new:Npn \__xparse_tl_mapthread_function:NNN #1#2#3 { \exp_after:wN \exp_after:wN @@ -1922,15 +1948,51 @@ } \cs_new:Npn \__xparse_cmd_if_xparse_aux:w #1 ~ #2 \q_stop {#1} \cs_new_protected:Npn \__xparse_peek_nonspace:NTF - { \__xparse_peek_nonspace_aux:nNNTF { } \peek_meaning:NTF } + { \__xparse_peek_nonspace_aux:nNNTF { } \__xparse_peek_meaning:NTF } \cs_new_protected:Npn \__xparse_peek_nonspace_remove:NTF - { \__xparse_peek_nonspace_aux:nNNTF { } \peek_meaning_remove:NTF } + { \__xparse_peek_nonspace_aux:nNNTF { } \__xparse_peek_meaning_remove:NTF } \cs_new_protected:Npn \__xparse_peek_nonspace_aux:nNNTF #1#2#3#4#5 { \peek_meaning_remove:NTF \c_space_token { \__xparse_peek_nonspace_aux:nNNTF { #1 ~ } #2 #3 {#4} {#5} } { #2 #3 { #4 } { #5 #1 } } } +\cs_new_protected:Npn \__xparse_peek_meaning:NTF + { \__xparse_peek_meaning_aux:NNTF \c_false_bool } +\cs_new_protected:Npn \__xparse_peek_meaning_remove:NTF + { \__xparse_peek_meaning_aux:NNTF \c_true_bool } +\cs_new_protected:Npn \__xparse_peek_meaning_aux:NNTF #1#2#3#4 + { + \tl_set:Nn \l__xparse_tmpa_tl {#3} + \tl_set:Nn \l__xparse_tmpb_tl {#4} + \peek_meaning:NTF #2 + { + \token_if_eq_meaning:NNTF #2 \c_group_begin_token + { \__xparse_peek_true_remove:Nw #1 } + { + \__xparse_token_if_cs:NTF #2 + { \__xparse_peek_cs_check_equal:NNN #1 #2 } + { \__xparse_peek_true_remove:Nw #1 } + } + } + { \l__xparse_tmpb_tl } + } +\cs_new_protected:Npn \__xparse_peek_cs_check_equal:NNN #1#2#3 + { + \str_if_eq:nnTF {#2} {#3} + { \__xparse_peek_true_remove:Nw #1 } + { \l__xparse_tmpb_tl } + #3 + } +\cs_new_protected:Npn \__xparse_peek_true_remove:Nw #1 + { + \bool_if:NTF #1 + { + \tex_afterassignment:D \l__xparse_tmpa_tl + \cs_set_eq:NN \__xparse_tmp:w + } + { \l__xparse_tmpa_tl } + } \cs_new:Npn \__xparse_environment_or_command: { \bool_if:NTF \l__xparse_environment_bool @@ -2049,14 +2111,21 @@ token.~Perhaps~a~backslash~is~missing? \c__xparse_ignore_def_tl } -\__kernel_msg_new:nnnn { xparse } { not-single-char } +\__kernel_msg_new:nnnn { xparse } { not-single-token } { Argument~delimiter~'#2'~for~the~#1~should~be~ - a~single~character. + a~single~non-space~token. } { The~argument~specification~provided~was~not~valid:~in~a~place~ - where~a~single~character~is~required,~LaTeX~found~'#2'. + where~a~single~token~is~required,~LaTeX~found~'#2'. + \c__xparse_ignore_def_tl + } +\__kernel_msg_new:nnnn { xparse } { forbidden-implicit-group-token } + { Argument~delimiter~'#2'~for~the~#1~is~not~allowed. } + { + The~argument~specification~provided~was~not~valid:~the~implicit~ + #3-group~token~'#2'~is~not~allowed~as~an~argument~delimiter. \c__xparse_ignore_def_tl } \__kernel_msg_new:nnnn { xparse } { processor-in-expandable } diff --git a/Master/texmf-dist/tex/latex/l3packages/xtemplate/xtemplate.sty b/Master/texmf-dist/tex/latex/l3packages/xtemplate/xtemplate.sty index f2a76f35ec2..539568fc4a7 100644 --- a/Master/texmf-dist/tex/latex/l3packages/xtemplate/xtemplate.sty +++ b/Master/texmf-dist/tex/latex/l3packages/xtemplate/xtemplate.sty @@ -32,7 +32,7 @@ }% \endinput } -\ProvidesExplPackage{xtemplate}{2020-02-25}{} +\ProvidesExplPackage{xtemplate}{2020-03-03}{} {L3 Experimental prototype document functions} \tl_const:Nn \c__xtemplate_code_root_tl { template~code~>~ } \tl_const:Nn \c__xtemplate_defaults_root_tl { template~defaults~>~ } -- cgit v1.2.3