summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/l3kernel
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2019-03-05 22:35:14 +0000
committerKarl Berry <karl@freefriends.org>2019-03-05 22:35:14 +0000
commit68872ff6a2a91fa0e84763fc9316493d82075c95 (patch)
tree0546ec4c414553802e31a423aec44f74d252f645 /Master/texmf-dist/tex/latex/l3kernel
parent541c4ddf7c5b402b9cfe8af5ef4e49ffa15d3e83 (diff)
l3 (5mar19)
git-svn-id: svn://tug.org/texlive/trunk@50246 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/l3kernel')
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex2028
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex3
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/expl3.sty10
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3doc.cls60
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3dvipdfmx.def2
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3dvips.def2
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3dvisvgm.def2
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3pdfmode.def2
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3xdvipdfmx.def2
9 files changed, 1191 insertions, 920 deletions
diff --git a/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex b/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex
index b8e24f7b71a..16f72cdf764 100644
--- a/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex
+++ b/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex
@@ -63,7 +63,7 @@
%% and all files in that bundle must be distributed together.
%%
%% File: expl3.dtx
-\def\ExplFileDate{2019-02-15}%
+\def\ExplFileDate{2019-03-05}%
\begingroup
\def\next{\endgroup}%
\expandafter\ifx\csname PackageError\endcsname\relax
@@ -122,65 +122,6 @@
}%
%% File: l3bootstrap.dtx
\begingroup
- \csname protected\endcsname\gdef\GetIdInfo
- {%
- \begingroup
- \catcode 32 = 10 %
- \GetIdInfoAuxI
- }%
- \csname protected\endcsname\gdef\GetIdInfoAuxI$#1$#2%
- {%
- \def\tempa{#1}%
- \def\tempb{Id}%
- \ifx\tempa\tempb
- \def\tempa
- {%
- \endgroup
- \def\ExplFileDate{0000/00/00}%
- \def\ExplFileDescription{#2}%
- \def\ExplFileName{[unknown]}%
- \def\ExplFileExtension{[unknown extension]}%
- \def\ExplFileVersion{-1}%
- }%
- \else
- \def\tempa
- {%
- \endgroup
- \def\ExplFileDescription{#2}%
- \GetIdInfoAuxII$#1 $%
- }%
- \fi
- \tempa
- }%
- \csname protected\endcsname\gdef\GetIdInfoAuxII$#1 #2.#3 #4 #5 #6$%
- {%
- \def\ExplFileName{#2}%
- \def\ExplFileExtension{#3}%
- \def\ExplFileVersion{#4}%
- \begingroup
- \def\tempa{#4}%
- \def\tempb{-1}%
- \ifx\tempa\tempb
- \def\tempa
- {%
- \endgroup
- \def\ExplFileDate{0000/00/00}%
- }%
- \else
- \def\tempa
- {%
- \endgroup
- \GetIdInfoAuxIII$#5$%
- }%
- \fi
- \tempa
- }%
- \csname protected\endcsname\gdef\GetIdInfoAuxIII$#1-#2-#3$%
- {%
- \def\ExplFileDate{#1/#2/#3}%
- }%
-\endgroup
-\begingroup
\expandafter\ifx\csname directlua\endcsname\relax
\else
\directlua{%
@@ -2491,61 +2432,6 @@
}
\__kernel_if_debug:TF
{
- \cs_set_protected:Npn \__kernel_patch_deprecation:nnNNpn #1#2#3#4#5#
- {
- \if_meaning:w \cs_new_protected:Npn #3
- \exp_after:wN \use_i:nn
- \else:
- \if_meaning:w \cs_new:Npn #3
- \exp_after:wN \exp_after:wN \exp_after:wN \use_ii:nn
- \else:
- \__kernel_msg_error:nnx { kernel } { debug-unpatchable }
- { \token_to_str:N #3 ~(for~deprecation) }
- \exp_after:wN \exp_after:wN \exp_after:wN \use_none:nn
- \fi:
- \fi:
- { \__debug_deprecation_aux:nnNnn {#1} {#2} #4 {#5} }
- { \__debug_deprecation_expandable:nnNnn {#1} {#2} #4 {#5} }
- }
- \cs_set_protected:Npn \__debug_deprecation_aux:nnNnn #1#2#3#4#5
- {
- \tl_gput_right:Nn \g__debug_deprecation_on_tl
- {
- \tex_let:D #3 \scan_stop:
- \__kernel_deprecation_error:Nnn #3 {#2} {#1}
- }
- \tl_gput_right:Nn \g__debug_deprecation_off_tl
- {
- \tex_let:D #3 \scan_stop:
- \cs_set_protected:Npn #3 #4 {#5}
- }
- \cs_new_protected:Npx #3
- {
- \exp_not:N \__kernel_msg_warning:nnxxx
- { kernel } { deprecated-command }
- {#1} { \token_to_str:N #3 } { \tl_to_str:n {#2} }
- \exp_not:n { \cs_gset_protected:Npn #3 #4 {#5} }
- \exp_not:N #3
- }
- }
- \cs_set_protected:Npn \__debug_deprecation_expandable:nnNnn #1#2#3#4#5
- {
- \tl_gput_right:Nn \g__debug_deprecation_on_tl
- {
- \tex_let:D #3 \scan_stop:
- \__kernel_deprecation_error:Nnn #3 {#2} {#1}
- }
- \tl_gput_right:Nn \g__debug_deprecation_off_tl
- {
- \tex_let:D #3 \scan_stop:
- \cs_set:Npn #3 #4 {#5}
- }
- \cs_new:Npn #3 #4 {#5}
- }
- }
- { \cs_set_protected:Npn \__kernel_patch_deprecation:nnNNpn #1#2 { } }
-\__kernel_if_debug:TF
- {
\cs_set_protected:Npn \__kernel_patch:nnNNpn #1#2#3#4#5#
{ \__debug_patch_aux:nnnn {#1} {#2} { #3 #4 #5 } }
\cs_set_protected:Npn \__kernel_patch_conditional:nNNpnn #1#2#3#4#
@@ -3208,6 +3094,39 @@
\group_end:
#1 { \token_to_str:N #2 = \cs_meaning:N #2 }
}
+\use:x
+ {
+ \exp_not:n { \cs_new:Npn \__kernel_prefix_arg_replacement:wN #1 }
+ \tl_to_str:n { macro : } \exp_not:n { #2 -> #3 \q_stop #4 }
+ }
+ { #4 {#1} {#2} {#3} }
+\cs_new:Npn \cs_prefix_spec:N #1
+ {
+ \token_if_macro:NTF #1
+ {
+ \exp_after:wN \__kernel_prefix_arg_replacement:wN
+ \token_to_meaning:N #1 \q_stop \use_i:nnn
+ }
+ { \scan_stop: }
+ }
+\cs_new:Npn \cs_argument_spec:N #1
+ {
+ \token_if_macro:NTF #1
+ {
+ \exp_after:wN \__kernel_prefix_arg_replacement:wN
+ \token_to_meaning:N #1 \q_stop \use_ii:nnn
+ }
+ { \scan_stop: }
+ }
+\cs_new:Npn \cs_replacement_spec:N #1
+ {
+ \token_if_macro:NTF #1
+ {
+ \exp_after:wN \__kernel_prefix_arg_replacement:wN
+ \token_to_meaning:N #1 \q_stop \use_iii:nnn
+ }
+ { \scan_stop: }
+ }
\cs_new:Npn \prg_do_nothing: { }
\cs_new_eq:NN \prg_break_point:Nn \use_ii:nn
\cs_new:Npn \prg_map_break:Nn #1#2#3 \prg_break_point:Nn #4#5
@@ -3658,11 +3577,52 @@
{ \__exp_e:nn {#2} { #3 #1 } }
\cs_new:Npn \__exp_e_expandable:Nnn #1#2
{ \exp_args:No \__exp_e:nn { #1 #2 } }
- \cs_new:Npn \__exp_e_primitive:Nnn #1
+ \cs_new:Npn \__exp_e_primitive:Nnn #1#2
{
- \__kernel_msg_expandable_error:nnn { kernel } { e-type }
- { \primitive not~implemented }
- \__exp_e:nn
+ \if_false: { \fi:
+ \tl_if_head_is_N_type:nTF {#2}
+ { \__exp_e_primitive_aux:NNw #1 }
+ {
+ \__kernel_msg_expandable_error:nnn { kernel } { e-type }
+ { Missing~primitive~name }
+ \__exp_e_primitive_aux:NNw #1 \c_empty_tl
+ }
+ #2
+ }
+ }
+ \cs_new:Npn \__exp_e_primitive_aux:NNw #1#2
+ {
+ \exp_after:wN \__exp_e_primitive_aux:NNnn
+ \exp_after:wN #1
+ \exp_after:wN #2
+ \exp_after:wN { \if_false: } \fi:
+ }
+ \cs_new:Npn \__exp_e_primitive_aux:NNnn #1#2
+ {
+ \exp_args:Nf \str_case_e:nnTF { \cs_to_str:N #2 }
+ {
+ { unexpanded } { \__exp_e_unexpanded:Nnn \exp_not:n }
+ { noexpand } { \__exp_e_noexpand:Nnn \exp_not:N }
+ { the } { \__exp_e_the:Nnn \tex_the:D }
+ {
+ \sys_if_engine_xetex:T { pdf }
+ \sys_if_engine_luatex:T { pdf }
+ primitive
+ } { \__exp_e_primitive:Nnn #1 }
+ }
+ { \__exp_e_primitive_other:NNnn #1 #2 }
+ }
+ \cs_new:Npn \__exp_e_primitive_other:NNnn #1#2#3
+ {
+ \exp_args:No \__exp_e_primitive_other_aux:nNNnn
+ { #1 #2 #3 }
+ #1 #2 {#3}
+ }
+ \cs_new:Npn \__exp_e_primitive_other_aux:nNNnn #1#2#3#4#5
+ {
+ \str_if_eq:nnTF {#1} { #2 #3 #4 }
+ { \__exp_e:nn {#4} { #5 #2 #3 } }
+ { \__exp_e:nn {#1} {#5} }
}
\cs_new:Npn \__exp_e_noexpand:Nnn #1#2
{
@@ -3791,9 +3751,12 @@
{
#1
\exp_after:wN \__exp_e_the_toks:n
+ \exp_after:wN { \if_false: } \fi:
+ }
+ {
+ \exp_after:wN ;
+ \exp_after:wN { \if_false: } \fi: #1
}
- { \exp_after:wN ; }
- \exp_after:wN { \if_false: } \fi:
}
\prg_new_conditional:Npnn \__exp_e_if_toks_register:N #1 { TF }
{
@@ -4306,8 +4269,8 @@
}
\cs_new_protected:Npn \__tl_set_rescan:NNnn #1#2#3#4
{
- \if_false: { \fi:
\group_begin:
+ \if_false: { \fi:
\int_set_eq:NN \tex_tracingnesting:D \c_zero_int
\exp_args:No \tex_everyeof:D { \c__tl_rescan_marker_tl }
\int_compare:nNnT \tex_endlinechar:D = { 32 }
@@ -4538,6 +4501,7 @@
{ c } { T , F , TF }
\prg_new_protected_conditional:Npnn \tl_if_in:nn #1#2 { T , F , TF }
{
+ \scan_stop:
\if_false: { \fi:
\cs_set:Npn \__tl_tmp:w ##1 #2 { }
\tl_if_empty:oTF { \__tl_tmp:w #1 {} {} #2 }
@@ -4681,6 +4645,22 @@
\cs_new:Npn \__tl_count:n #1 { + 1 }
\cs_generate_variant:Nn \tl_count:n { V , o }
\cs_generate_variant:Nn \tl_count:N { c }
+\cs_new:Npn \tl_count_tokens:n #1
+ {
+ \int_eval:n
+ {
+ \__tl_act:NNNnn
+ \__tl_act_count_normal:nN
+ \__tl_act_count_group:nn
+ \__tl_act_count_space:n
+ { }
+ {#1}
+ }
+ }
+\cs_new:Npn \__tl_act_count_normal:nN #1 #2 { 1 + }
+\cs_new:Npn \__tl_act_count_space:n #1 { 1 + }
+\cs_new:Npn \__tl_act_count_group:nn #1 #2
+ { 2 + \tl_count_tokens:n {#2} + }
\cs_new:Npn \tl_reverse_items:n #1
{
\__tl_reverse_items:nwNwn #1 ?
@@ -5754,22 +5734,9 @@
\cs_new_eq:NN \str_show:n \tl_show:n
\cs_new_eq:NN \str_show:N \tl_show:N
\cs_generate_variant:Nn \str_show:N { c }
-\__kernel_patch_deprecation:nnNNpn { 2019-12-31 } { \str_case_e:nn }
-\cs_new:Npn \str_case_x:nn { \str_case_e:nn }
-\__kernel_patch_deprecation:nnNNpn { 2019-12-31 } { \str_case_e:nnT }
-\cs_new:Npn \str_case_x:nnT { \str_case_e:nnT }
-\__kernel_patch_deprecation:nnNNpn { 2019-12-31 } { \str_case_e:nnF }
-\cs_new:Npn \str_case_x:nnF { \str_case_e:nnF }
-\__kernel_patch_deprecation:nnNNpn { 2019-12-31 } { \str_case_e:nnTF }
-\cs_new:Npn \str_case_x:nnTF { \str_case_e:nnTF }
-\__kernel_patch_deprecation:nnNNpn { 2019-12-31 } { \str_if_eq_p:ee }
-\cs_new:Npn \str_if_eq_x_p:nn { \str_if_eq_p:ee }
-\__kernel_patch_deprecation:nnNNpn { 2019-12-31 } { \str_if_eq:eeT }
-\cs_new:Npn \str_if_eq_x:nnT { \str_if_eq:eeT }
-\__kernel_patch_deprecation:nnNNpn { 2019-12-31 } { \str_if_eq:eeF }
-\cs_new:Npn \str_if_eq_x:nnF { \str_if_eq:eeF }
-\__kernel_patch_deprecation:nnNNpn { 2019-12-31 } { \str_if_eq:eeTF }
-\cs_new:Npn \str_if_eq_x:nnTF { \str_if_eq:eeTF }
+\cs_new_eq:NN \str_log:n \tl_log:n
+\cs_new_eq:NN \str_log:N \tl_log:N
+\cs_generate_variant:Nn \str_log:N { c }
%% File: l3quark.dtx
\__kernel_patch:nnNNpn { \__kernel_chk_var_scope:NN q #1 } { }
\cs_new_protected:Npn \quark_new:N #1
@@ -7311,47 +7278,6 @@
\int_new:N \l_tmpb_int
\int_new:N \g_tmpa_int
\int_new:N \g_tmpb_int
-\cs_new_protected:Npn \__int_deprecated_constants:nn #1#2
- {
- #1 \c_zero { 0 } #2
- #1 \c_one { 1 } #2
- #1 \c_two { 2 } #2
- #1 \c_three { 3 } #2
- #1 \c_four { 4 } #2
- #1 \c_five { 5 } #2
- #1 \c_six { 6 } #2
- #1 \c_seven { 7 } #2
- #1 \c_eight { 8 } #2
- #1 \c_nine { 9 } #2
- #1 \c_ten { 10 } #2
- #1 \c_eleven { 11 } #2
- #1 \c_twelve { 12 } #2
- #1 \c_thirteen { 13 } #2
- #1 \c_fourteen { 14 } #2
- #1 \c_fifteen { 15 } #2
- #1 \c_sixteen { 16 } #2
- #1 \c_thirty_two { 32 } #2
- #1 \c_one_hundred { 100 } #2
- #1 \c_two_hundred_fifty_five { 255 } #2
- #1 \c_two_hundred_fifty_six { 256 } #2
- #1 \c_one_thousand { 1000 } #2
- #1 \c_ten_thousand { 10000 } #2
- }
-\__int_deprecated_constants:nn { \int_const:Nn } { }
-\__kernel_deprecation_code:nn
- {
- \__int_deprecated_constants:nn
- { \__kernel_deprecation_error:Nnn } { { 2019-12-31 } }
- }
- {
- \__int_deprecated_constants:nn
- {
- \exp_after:wN \use:nnn
- \exp_after:wN \__int_constdef:Nw \exp_not:N
- }
- { \exp_stop_f: }
- }
-\cs_new_eq:NN \__int_value:w \int_value:w
%% File: l3flag.dtx
\cs_new_protected:Npn \flag_new:n #1
{
@@ -7717,17 +7643,6 @@
\cs_new:Npn \group_align_safe_end:
{ \if_int_compare:w `{ = \c_zero_int } \fi: }
\int_new:N \g__kernel_prg_map_int
-\__kernel_patch_deprecation:nnNNpn { 2019-12-31 } { \prg_break_point:Nn }
-\cs_new:Npn \__prg_break_point:Nn { \prg_break_point:Nn }
-\__kernel_patch_deprecation:nnNNpn { 2019-12-31 } { \prg_break_point: }
-\cs_new:Npn \__prg_break_point: { \prg_break_point: }
-\__kernel_patch_deprecation:nnNNpn { 2019-12-31 } { \prg_map_break:Nn }
-\cs_new:Npn \__prg_map_break:Nn #1 \__prg_break_point:Nn
- { \prg_map_break:Nn #1 \prg_break_point:Nn }
-\__kernel_patch_deprecation:nnNNpn { 2019-12-31 } { \prg_break: }
-\cs_new:Npn \__prg_break: #1 \__prg_break_point: { }
-\__kernel_patch_deprecation:nnNNpn { 2019-12-31 } { \prg_break:n }
-\cs_new:Npn \__prg_break:n #1#2 \__prg_break_point: {#1}
%% File: l3sys.dtx
\str_const:Nx \c_sys_jobname_str { \tex_jobname:D }
\int_const:Nn \c_sys_minute_int
@@ -9027,37 +8942,6 @@
{ \exp_not:c { peek_#1:NF } ##1 {##2} }
}
}
-\exp_args:Nno \use:nn
- { \cs_new:Npn \__peek_get_prefix_arg_replacement:wN #1 }
- { \tl_to_str:n { macro : } #2 -> #3 \q_stop #4 }
- { #4 {#1} {#2} {#3} }
-\cs_new:Npn \token_get_prefix_spec:N #1
- {
- \token_if_macro:NTF #1
- {
- \exp_after:wN \__peek_get_prefix_arg_replacement:wN
- \token_to_meaning:N #1 \q_stop \use_i:nnn
- }
- { \scan_stop: }
- }
-\cs_new:Npn \token_get_arg_spec:N #1
- {
- \token_if_macro:NTF #1
- {
- \exp_after:wN \__peek_get_prefix_arg_replacement:wN
- \token_to_meaning:N #1 \q_stop \use_ii:nnn
- }
- { \scan_stop: }
- }
-\cs_new:Npn \token_get_replacement_spec:N #1
- {
- \token_if_macro:NTF #1
- {
- \exp_after:wN \__peek_get_prefix_arg_replacement:wN
- \token_to_meaning:N #1 \q_stop \use_iii:nnn
- }
- { \scan_stop: }
- }
%% File: l3prop.dtx
\scan_new:N \s__prop
\cs_new:Npn \__prop_pair:wn #1 \s__prop #2
@@ -9216,6 +9100,16 @@
{ \__prop_item_Nn:nwwn {#1} }
}
\cs_generate_variant:Nn \prop_item:Nn { c }
+\cs_new:Npn \prop_count:N #1
+ {
+ \int_eval:n
+ {
+ 0
+ \prop_map_function:NN #1 \__prop_count:nn
+ }
+ }
+\cs_new:Npn \__prop_count:nn #1#2 { + 1 }
+\cs_generate_variant:Nn \prop_count:N { c }
\prg_new_protected_conditional:Npnn \prop_pop:NnN #1#2#3 { T , F , TF }
{
\__prop_split:NnTF #1 {#2}
@@ -10001,11 +9895,6 @@
LaTeX~has~been~asked~to~use~a~control~sequence~'#1':\\
this~has~not~been~defined~yet.
}
-\__kernel_msg_new:nnn { kernel } { deprecated-command }
- {
- The~deprecated~command~'#2'~has~been~or~will~be~removed~on~#1.
- \tl_if_empty:nF {#3} { ~Use~instead~'#3'. }
- }
\__kernel_msg_new:nnnn { kernel } { empty-search-pattern }
{ Empty~search~pattern. }
{
@@ -10059,7 +9948,7 @@
Only~expandable~tests~can~have~a~predicate~version.
}
\__kernel_msg_new:nnn { kernel } { randint-backward-range }
- { Bounds~ordered~backwards~in~\int_rand:nn {#1}~{#2}. }
+ { Bounds~ordered~backwards~in~\iow_char:N\\int_rand:nn~{#1}~{#2}. }
\__kernel_msg_new:nnnn { kernel } { conditional-form-unknown }
{ Conditional~form~'#1'~for~function~'#2'~unknown. }
{
@@ -10200,7 +10089,7 @@
\__kernel_msg_new:nnn { kernel } { misused-prop }
{ A~property~list~was~misused. }
\__kernel_msg_new:nnn { kernel } { negative-replication }
- { Negative~argument~for~\prg_replicate:nn. }
+ { Negative~argument~for~\iow_char:N\\prg_replicate:nn. }
\__kernel_msg_new:nnn { kernel } { prop-keyval }
{ Missing/extra~'='~in~'#1'~(in~'..._keyval:Nn') }
\__kernel_msg_new:nnn { kernel } { unknown-comparison }
@@ -10263,13 +10152,17 @@
\exp_args:Ncx \__msg_tmp:w { LaTeX3~error: }
{ \char_generate:nn { `\ } { 7 } }
\group_end:
+\exp_args_generate:n { oooo }
\cs_new:Npn \__kernel_msg_expandable_error:nnnnnn #1#2#3#4#5#6
{
- \exp_args:Nf \__msg_expandable_error:n
+ \exp_args:Ne \__msg_expandable_error:n
{
- \exp_args:NNc \exp_after:wN \exp_stop_f:
+ \exp_args:Nc \exp_args:Noooo
{ \c__msg_text_prefix_tl LaTeX / #1 / #2 }
- {#3} {#4} {#5} {#6}
+ { \tl_to_str:n {#3} }
+ { \tl_to_str:n {#4} }
+ { \tl_to_str:n {#5} }
+ { \tl_to_str:n {#6} }
}
}
\cs_new:Npn \__kernel_msg_expandable_error:nnnnn #1#2#3#4#5
@@ -10296,85 +10189,6 @@
\cs_generate_variant:Nn \__kernel_msg_expandable_error:nnnnn { nnfff }
\cs_generate_variant:Nn \__kernel_msg_expandable_error:nnnn { nnff }
\cs_generate_variant:Nn \__kernel_msg_expandable_error:nnn { nnf }
-\__kernel_patch_deprecation:nnNNpn { 2019-12-31 } { \iow_log:n }
-\cs_new_protected:Npn \msg_log:n #1
- {
- \iow_log:n { ................................................. }
- \iow_wrap:nnnN { . ~ #1} { . ~ } { } \iow_log:n
- \iow_log:n { ................................................. }
- }
-\__kernel_patch_deprecation:nnNNpn { 2019-12-31 } { \iow_term:n }
-\cs_new_protected:Npn \msg_term:n #1
- {
- \iow_term:n { ************************************************* }
- \iow_wrap:nnnN { * ~ #1} { * ~ } { } \iow_term:n
- \iow_term:n { ************************************************* }
- }
-\__kernel_patch_deprecation:nnNNpn { 2019-12-31 } { [Defined~error~message] }
-\cs_new_protected:Npn \msg_interrupt:nnn #1#2#3
- {
- \tl_if_empty:nTF {#3}
- {
- \__msg_old_interrupt_wrap:nn { \\ \c__msg_no_info_text_tl }
- {#1 \\\\ #2 \\\\ \c__msg_continue_text_tl }
- }
- {
- \__msg_old_interrupt_wrap:nn { \\ #3 }
- {#1 \\\\ #2 \\\\ \c__msg_help_text_tl }
- }
- }
-\cs_new_protected:Npn \__msg_old_interrupt_wrap:nn #1#2
- {
- \iow_wrap:nnnN {#1} { | ~ } { } \__msg_old_interrupt_more_text:n
- \iow_wrap:nnnN {#2} { ! ~ } { } \__msg_old_interrupt_text:n
- }
-\cs_new_protected:Npn \__msg_old_interrupt_more_text:n #1
- {
- \exp_args:Nx \tex_errhelp:D
- {
- |'''''''''''''''''''''''''''''''''''''''''''''''
- #1 \iow_newline:
- |...............................................
- }
- }
-\group_begin:
- \char_set_lccode:nn {`\{} {`\ }
- \char_set_lccode:nn {`\}} {`\ }
- \char_set_lccode:nn {`\&} {`\!}
- \char_set_catcode_active:N \&
-\tex_lowercase:D
- {
- \group_end:
- \cs_new_protected:Npn \__msg_old_interrupt_text:n #1
- {
- \iow_term:x
- {
- \iow_newline:
- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- \iow_newline:
- !
- }
- \__kernel_iow_with:Nnn \tex_newlinechar:D { `\^^J }
- {
- \__kernel_iow_with:Nnn \tex_errorcontextlines:D { -1 }
- {
- \group_begin:
- \cs_set_protected:Npn &
- {
- \tex_errmessage:D
- {
- #1
- \use_none:n
- { ............................................ }
- }
- }
- \exp_after:wN
- \group_end:
- &
- }
- }
- }
- }
%% File: l3file.dtx
\tl_new:N \l__ior_internal_tl
\int_const:Nn \c_term_ior { 16 }
@@ -10401,16 +10215,15 @@
\cs_new_protected:Npn \ior_open:Nn #1#2
{ \ior_open:NnF #1 {#2} { \__kernel_file_missing:n {#2} } }
\cs_generate_variant:Nn \ior_open:Nn { c }
-\str_new:N \l__ior_file_name_str
+\tl_new:N \l__ior_file_name_tl
\prg_new_protected_conditional:Npnn \ior_open:Nn #1#2 { T , F , TF }
{
- \file_get_full_name:nN {#2} \l__ior_file_name_str
- \str_if_empty:NTF \l__ior_file_name_str
- { \prg_return_false: }
+ \file_get_full_name:nNTF {#2} \l__ior_file_name_tl
{
- \__kernel_ior_open:No #1 \l__ior_file_name_str
+ \__kernel_ior_open:No #1 \l__ior_file_name_tl
\prg_return_true:
}
+ { \prg_return_false: }
}
\prg_generate_conditional_variant:Nnn \ior_open:Nn { c } { T , F , TF }
\exp_args:NNf \cs_new_protected:Npn \__ior_new:N
@@ -10484,8 +10297,21 @@
{ \prg_return_true: }
}
\cs_new_protected:Npn \ior_get:NN #1#2
+ { \ior_get:NNF #1 #2 { \tl_set:Nn #2 { \q_no_value } } }
+\cs_new_protected:Npn \__ior_get:NN #1#2
{ \tex_read:D #1 to #2 }
+\prg_new_protected_conditional:Npnn \ior_get:NN #1#2 { T , F , TF }
+ {
+ \ior_if_eof:NTF #1
+ { \prg_return_false: }
+ {
+ \__ior_get:NN #1 #2
+ \prg_return_true:
+ }
+ }
\cs_new_protected:Npn \ior_str_get:NN #1#2
+ { \ior_str_get:NNF #1 #2 { \tl_set:Nn #2 { \q_no_value } } }
+\cs_new_protected:Npn \__ior_str_get:NN #1#2
{
\exp_args:Nno \use:n
{
@@ -10494,14 +10320,23 @@
\int_set:Nn \tex_endlinechar:D
} { \int_use:N \tex_endlinechar:D }
}
+\prg_new_protected_conditional:Npnn \ior_str_get:NN #1#2 { T , F , TF }
+ {
+ \ior_if_eof:NTF #1
+ { \prg_return_false: }
+ {
+ \__ior_str_get:NN #1 #2
+ \prg_return_true:
+ }
+ }
\cs_new:Npn \ior_map_break:
{ \prg_map_break:Nn \ior_map_break: { } }
\cs_new:Npn \ior_map_break:n
{ \prg_map_break:Nn \ior_map_break: }
\cs_new_protected:Npn \ior_map_inline:Nn
- { \__ior_map_inline:NNn \ior_get:NN }
+ { \__ior_map_inline:NNn \__ior_get:NN }
\cs_new_protected:Npn \ior_str_map_inline:Nn
- { \__ior_map_inline:NNn \ior_str_get:NN }
+ { \__ior_map_inline:NNn \__ior_str_get:NN }
\cs_new_protected:Npn \__ior_map_inline:NNn
{
\int_gincr:N \g__kernel_prg_map_int
@@ -10573,17 +10408,17 @@
\iow_new:N \g_tmpb_iow
\exp_args:NNf \cs_new_protected:Npn \__iow_new:N
{ \exp_args:NNc \exp_after:wN \exp_stop_f: { newwrite } }
-\str_new:N \l__iow_file_name_str
+\tl_new:N \l__iow_file_name_tl
\cs_new_protected:Npn \iow_open:Nn #1#2
{
- \__kernel_file_name_sanitize:nN {#2} \l__iow_file_name_str
+ \__kernel_file_name_sanitize:nN {#2} \l__iow_file_name_tl
\iow_close:N #1
\seq_gpop:NNTF \g__iow_streams_seq \l__iow_stream_tl
- { \__iow_open_stream:NV #1 \l__iow_file_name_str }
+ { \__iow_open_stream:NV #1 \l__iow_file_name_tl }
{
\__iow_new:N #1
\tl_set:Nx \l__iow_stream_tl { \int_eval:n {#1} }
- \__iow_open_stream:NV #1 \l__iow_file_name_str
+ \__iow_open_stream:NV #1 \l__iow_file_name_tl
}
}
\cs_generate_variant:Nn \iow_open:Nn { c }
@@ -11003,8 +10838,8 @@
{ \exp_after:wN \__file_tmp:w \@currnamestack }
\group_end:
\seq_new:N \g__file_record_seq
-\str_new:N \l__file_base_name_str
-\str_new:N \l__file_full_name_str
+\tl_new:N \l__file_base_name_tl
+\tl_new:N \l__file_full_name_tl
\str_new:N \l__file_dir_str
\str_new:N \l__file_ext_str
\str_new:N \l__file_name_str
@@ -11019,8 +10854,6 @@
\char_set_active_eq:NN ##1 \l__file_internal_tl
}
\tl_set:Nx \l__file_internal_tl {#1}
- \tl_set:Nx \l__file_internal_tl
- { \tl_to_str:N \l__file_internal_tl }
\exp_args:NNNV \group_end:
\str_set:Nn #2 \l__file_internal_tl
}
@@ -11043,19 +10876,18 @@
\cs_new_protected:Npn \file_get:nnN #1#2#3
{
\file_get:nnNF {#1} {#2} #3
- { \__kernel_file_missing:n {#1} }
+ { \tl_set:Nn #3 { \q_no_value } }
}
\prg_new_protected_conditional:Npnn \file_get:nnN #1#2#3 { T , F , TF }
{
- \file_get_full_name:nN {#1} \l__file_full_name_str
- \str_if_empty:NTF \l__file_full_name_str
- { \prg_return_false: }
+ \file_get_full_name:nNTF {#1} \l__file_full_name_tl
{
\exp_args:NV \__file_get_aux:nnN
- \l__file_full_name_str
+ \l__file_full_name_tl
{#2} #3
\prg_return_true:
}
+ { \prg_return_false: }
}
\cs_new_protected:Npn \__file_get_aux:nnN #1#2#3
{
@@ -11079,7 +10911,13 @@
}
\cs_new_protected:Npn \file_get_full_name:nN #1#2
{
- \__kernel_file_name_sanitize:nN {#1} \l__file_base_name_str
+ \file_get_full_name:nNF {#1} #2
+ { \tl_set:Nn #2 { \q_no_value } }
+ }
+\cs_generate_variant:Nn \file_get_full_name:nN { V }
+\prg_new_protected_conditional:Npnn \file_get_full_name:nN #1#2 { T , F , TF }
+ {
+ \__kernel_file_name_sanitize:nN {#1} \l__file_base_name_tl
\__file_get_full_name_search:nN { } \use:n
\seq_map_inline:Nn \l_file_search_path_seq
{ \__file_get_full_name_search:nN { ##1 / } \seq_map_break:n }
@@ -11088,51 +10926,56 @@
\tl_map_inline:Nn \input@path
{ \__file_get_full_name_search:nN { ##1 } \tl_map_break:n }
}
- \str_clear:N \l__file_full_name_str
+ \tl_set:Nn \l__file_full_name_tl { \q_no_value }
\prg_break_point:
- \str_if_empty:NF \l__file_full_name_str
+ \quark_if_no_value:NTF \l__file_full_name_tl
+ {
+ \ior_close:N \g__file_internal_ior
+ \prg_return_false:
+ }
{
- \exp_args:NV \file_parse_full_name:nNNN \l__file_full_name_str
+ \exp_args:NV \file_parse_full_name:nNNN \l__file_full_name_tl
\l__file_dir_str \l__file_name_str \l__file_ext_str
\str_if_empty:NT \l__file_ext_str
{
\__kernel_ior_open:No \g__file_internal_ior
- { \l__file_full_name_str .tex }
+ { \l__file_full_name_tl .tex }
\ior_if_eof:NF \g__file_internal_ior
- { \str_put_right:Nn \l__file_full_name_str { .tex } }
+ { \tl_put_right:Nn \l__file_full_name_tl { .tex } }
}
+ \ior_close:N \g__file_internal_ior
+ \tl_set_eq:NN #2 \l__file_full_name_tl
+ \prg_return_true:
}
- \str_set_eq:NN #2 \l__file_full_name_str
- \ior_close:N \g__file_internal_ior
}
-\cs_generate_variant:Nn \file_get_full_name:nN { V }
+\cs_generate_variant:Nn \file_get_full_name:nNT { V }
+\cs_generate_variant:Nn \file_get_full_name:nNF { V }
+\cs_generate_variant:Nn \file_get_full_name:nNTF { V }
\cs_new_protected:Npn \__file_get_full_name_search:nN #1#2
{
\__file_name_quote:nN
- { \tl_to_str:n {#1} \l__file_base_name_str }
- \l__file_full_name_str
- \__kernel_ior_open:No \g__file_internal_ior \l__file_full_name_str
+ { \tl_to_str:n {#1} \l__file_base_name_tl }
+ \l__file_full_name_tl
+ \__kernel_ior_open:No \g__file_internal_ior \l__file_full_name_tl
\ior_if_eof:NF \g__file_internal_ior { #2 { \prg_break: } }
}
\prg_new_protected_conditional:Npnn \file_if_exist:n #1 { T , F , TF }
{
- \file_get_full_name:nN {#1} \l__file_full_name_str
- \str_if_empty:NTF \l__file_full_name_str
- { \prg_return_false: }
+ \file_get_full_name:nNTF {#1} \l__file_full_name_tl
{ \prg_return_true: }
+ { \prg_return_false: }
}
\cs_new_protected:Npn \__kernel_file_missing:n #1
{
- \__kernel_file_name_sanitize:nN {#1} \l__file_base_name_str
+ \__kernel_file_name_sanitize:nN {#1} \l__file_base_name_tl
\__kernel_msg_error:nnx { kernel } { file-not-found }
- { \l__file_base_name_str }
+ { \l__file_base_name_tl }
}
\cs_new_protected:Npn \file_input:n #1
{
- \file_get_full_name:nN {#1} \l__file_full_name_str
- \str_if_empty:NTF \l__file_full_name_str
+ \file_get_full_name:nNTF {#1} \l__file_full_name_tl
+ { \__file_input:V \l__file_full_name_tl }
{ \__kernel_file_missing:n {#1} }
- { \__file_input:V \l__file_full_name_str }
}
\cs_new_protected:Npn \__file_input:n #1
{
@@ -11236,6 +11079,38 @@
\g__file_record_seq
\l__file_tmp_seq
}
+\cs_new_protected:Npn \GetIdInfo
+ {
+ \group_begin:
+ \char_set_catcode_space:n { 32 }
+ \exp_after:wN
+ \group_end:
+ \__file_id_info_auxi:w
+ }
+\cs_new_protected:Npn \__file_id_info_auxi:w $ #1 $ #2
+ {
+ \tl_set:Nn \ExplFileDescription {#2}
+ \str_if_eq:nnTF {#1} { Id }
+ {
+ \tl_set:Nn \ExplFileDate { 0000/00/00 }
+ \tl_set:Nn \ExplFileName { [unknown] }
+ \tl_set:Nn \ExplFileExtension { [unknown~extension] }
+ \tl_set:Nn \ExplFileVersion {-1}
+ }
+ { \__file_id_info_auxii:w #1 ~ \q_stop }
+ }
+\cs_new_protected:Npn \__file_id_info_auxii:w
+ #1 ~ #2.#3 ~ #4 ~ #5 ~ #6 \q_stop
+ {
+ \tl_set:Nn \ExplFileName {#2}
+ \tl_set:Nn \ExplFileExtension {#3}
+ \tl_set:Nn \ExplFileVersion {#4}
+ \str_if_eq:nnTF {#4} {-1}
+ { \tl_set:Nn \ExplFileDate { 0000/00/00 } }
+ { \__file_id_info_auxiii:w #5 - 0 - 0 - \q_stop }
+ }
+\cs_new_protected:Npn \__file_id_info_auxiii:w #1 - #2 - #3 - #4 \q_stop
+ { \tl_set:Nn \ExplFileDate { #1/#2/#3 } }
\__kernel_msg_new:nnnn { kernel } { file-not-found }
{ File~'#1'~not~found. }
{
@@ -12779,14 +12654,10 @@
\exp_after:wN { \l_keys_value_tl }
}
{
- \bool_if:NTF \l__keys_only_known_bool
- { \__keys_store_unused: }
- {
- \cs_if_exist:cTF
- { \c__keys_inherit_root_tl \__keys_parent:o \l_keys_path_tl }
- { \__keys_execute_inherit: }
- { \__keys_execute_unknown: }
- }
+ \cs_if_exist:cTF
+ { \c__keys_inherit_root_tl \__keys_parent:o \l_keys_path_tl }
+ { \__keys_execute_inherit: }
+ { \__keys_execute_unknown: }
}
}
\cs_new_protected:Npn \__keys_execute_inherit:
@@ -12808,15 +12679,19 @@
}
\cs_new_protected:Npn \__keys_execute_unknown:
{
- \cs_if_exist:cTF
- { \c__keys_code_root_tl \l__keys_module_tl / unknown }
- {
- \cs:w \c__keys_code_root_tl \l__keys_module_tl / unknown
- \exp_after:wN \cs_end: \exp_after:wN { \l_keys_value_tl }
- }
+ \bool_if:NTF \l__keys_only_known_bool
+ { \__keys_store_unused: }
{
- \__kernel_msg_error:nnxx { kernel } { key-unknown }
- { \l_keys_path_tl } { \l__keys_module_tl }
+ \cs_if_exist:cTF
+ { \c__keys_code_root_tl \l__keys_module_tl / unknown }
+ {
+ \cs:w \c__keys_code_root_tl \l__keys_module_tl / unknown
+ \exp_after:wN \cs_end: \exp_after:wN { \l_keys_value_tl }
+ }
+ {
+ \__kernel_msg_error:nnxx { kernel } { key-unknown }
+ { \l_keys_path_tl } { \l__keys_module_tl }
+ }
}
}
\cs_new:Npn \__keys_execute:nn #1#2
@@ -12946,7 +12821,7 @@
{
\exp_args:Nnf \msg_show_item_unbraced:nn { code }
{
- \exp_args:Nc \token_get_replacement_spec:N
+ \exp_args:Nc \cs_replacement_spec:N
{
\c__keys_code_root_tl
\__keys_trim_spaces:n { #2 / #3 }
@@ -13595,23 +13470,9 @@
\exp_after:wN \use_ii:nn
\fi:
}
-\cs_new:Npn \__fp_expand:n #1
- {
- \__fp_expand_loop:nwnN { }
- #1 \prg_do_nothing:
- \s__fp_mark { } \__fp_expand_loop:nwnN
- \s__fp_mark { } \__fp_use_i_until_s:nw ;
- }
-\cs_new:Npn \__fp_expand_loop:nwnN #1#2 \s__fp_mark #3 #4
- {
- \exp_after:wN #4 \exp:w \exp_end_continue_f:w
- #2
- \s__fp_mark { #3 #1 } #4
- }
-\cs_new:Npn \__fp_str_if_eq:nn #1#2 { \tex_strcmp:D {#1} {#2} }
-\sys_if_engine_luatex:T
+\sys_if_engine_luatex:TF
{
- \cs_set:Npn \__fp_str_if_eq:nn #1#2
+ \cs_new:Npn \__fp_str_if_eq:nn #1#2
{
\tex_directlua:D
{
@@ -13623,6 +13484,7 @@
}
}
}
+ { \cs_new_eq:NN \__fp_str_if_eq:nn \tex_strcmp:D }
\cs_new:Npn \__fp_func_to_name:N #1
{
\exp_last_unbraced:Nf
@@ -17152,6 +17014,8 @@
{ \__fp_parse_unary_function:NNN \__fp_exp_o:w ? }
\cs_new:Npn \__fp_parse_word_ln:N
{ \__fp_parse_unary_function:NNN \__fp_ln_o:w ? }
+\cs_new:Npn \__fp_parse_word_fact:N
+ { \__fp_parse_unary_function:NNN \__fp_fact_o:w ? }
\tl_const:Nn \c__fp_ln_i_fixed_tl { {0000}{0000}{0000}{0000}{0000}{0000};}
\tl_const:Nn \c__fp_ln_ii_fixed_tl { {6931}{4718}{0559}{9453}{0941}{7232};}
\tl_const:Nn \c__fp_ln_iii_fixed_tl {{10986}{1228}{8668}{1096}{9139}{5245};}
@@ -17820,6 +17684,76 @@
1
\fi:
}
+\int_const:Nn \c__fp_fact_max_arg_int { 3248 }
+\cs_new:Npn \__fp_fact_o:w #1 \s__fp \__fp_chk:w #2#3#4; @
+ {
+ \if_case:w #2 \exp_stop_f:
+ \__fp_case_return_o:Nw \c_one_fp
+ \or:
+ \or:
+ \if_meaning:w 0 #3
+ \exp_after:wN \__fp_case_return_same_o:w
+ \fi:
+ \or:
+ \__fp_case_return_same_o:w
+ \fi:
+ \if_meaning:w 2 #3
+ \__fp_case_use:nw { \__fp_invalid_operation_o:fw { fact } }
+ \fi:
+ \__fp_fact_pos_o:w
+ \s__fp \__fp_chk:w #2 #3 #4 ;
+ }
+\cs_new:Npn \__fp_fact_pos_o:w #1;
+ {
+ \__fp_small_int:wTF #1;
+ { \__fp_fact_int_o:n }
+ { \__fp_invalid_operation_o:fw { fact } #1; }
+ }
+\cs_new:Npn \__fp_fact_int_o:n #1
+ {
+ \if_int_compare:w #1 > \c__fp_fact_max_arg_int
+ \__fp_case_return:nw
+ {
+ \exp_after:wN \exp_after:wN \exp_after:wN \__fp_overflow:w
+ \exp_after:wN \c_inf_fp
+ }
+ \fi:
+ \exp_after:wN \__fp_sanitize:Nw
+ \exp_after:wN 0
+ \int_value:w \__fp_int_eval:w
+ \__fp_fact_loop_o:w #1 . 4 , { 1 } { } { } { } { } { } ;
+ }
+\cs_new:Npn \__fp_fact_loop_o:w #1 . #2 ;
+ {
+ \if_int_compare:w #1 < 12 \exp_stop_f:
+ \__fp_fact_small_o:w #1
+ \fi:
+ \exp_after:wN \__fp_ep_mul:wwwwn
+ \exp_after:wN 4 \exp_after:wN ,
+ \exp_after:wN { \int_value:w \__fp_int_eval:w #1 * (#1 - 1) }
+ { } { } { } { } { } ;
+ #2 ;
+ {
+ \exp_after:wN \__fp_fact_loop_o:w
+ \int_value:w \__fp_int_eval:w #1 - 2 .
+ }
+ }
+\cs_new:Npn \__fp_fact_small_o:w #1 \fi: #2 ; #3 ; #4
+ {
+ \fi:
+ \exp_after:wN \__fp_ep_mul:wwwwn
+ \exp_after:wN 4 \exp_after:wN ,
+ \exp_after:wN
+ {
+ \int_value:w
+ \if_case:w #1 \exp_stop_f:
+ 1 \or: 1 \or: 2 \or: 6 \or: 24 \or: 120 \or: 720 \or: 5040
+ \or: 40320 \or: 362880 \or: 3628800 \or: 39916800
+ \fi:
+ } { } { } { } { } { } ;
+ #3 ;
+ \__fp_ep_to_float_o:wwN 0
+ }
%% File: l3fp-trig.dtx
\tl_map_inline:nn
{
@@ -18987,26 +18921,19 @@
{
\tl_if_empty:nF {#1}
{
- \__fp_expand:n
+ \exp_last_unbraced:Ne \use_ii:nn
{
- { \use_ii:nn }
\__fp_array_to_clist_loop:Nw #1 { ? \prg_break: } ;
\prg_break_point:
}
}
}
-\cs_new:Npx \__fp_array_to_clist_loop:Nw #1#2;
+\cs_new:Npn \__fp_array_to_clist_loop:Nw #1#2;
{
- \exp_not:N \use_none:n #1
- \exp_not:N \exp_after:wN
- {
- \exp_not:N \exp_after:wN ,
- \exp_not:N \exp_after:wN \c_space_tl
- \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
+ \use_none:n #1
+ , ~
+ \exp_not:f { \__fp_to_tl_dispatch:w #1 #2 ; }
+ \__fp_array_to_clist_loop:Nw
}
%% File: l3fp-random.dtx
\cs_new:Npn \__fp_parse_word_rand:N
@@ -20314,14 +20241,6 @@
{ is~empty }
{ contains~the~tokens: #2 }
}
-\__kernel_patch_deprecation:nnNNpn { 2019-12-31 }
- { \tl_analysis_show:N }
-\cs_new_protected:Npn \tl_show_analysis:N #1
- { \tl_analysis_show:N #1 }
-\__kernel_patch_deprecation:nnNNpn { 2019-12-31 }
- { \tl_analysis_show:n }
-\cs_new_protected:Npn \tl_show_analysis:n #1
- { \tl_analysis_show:n {#1} }
%% File: l3regex.dtx
\cs_new_eq:NN \__regex_int_eval:w \tex_numexpr:D
\cs_new_protected:Npn \__regex_standard_escapechar:
@@ -24300,22 +24219,6 @@
}
}
}
-\__kernel_patch_deprecation:nnNNpn { 2020-12-31 } { \box_set_eq_drop:N }
-\cs_new_protected:Npn \box_set_eq_clear:NN #1#2
- { \tex_setbox:D #1 \tex_box:D #2 }
-\__kernel_patch_deprecation:nnNNpn { 2020-12-31 } { \box_gset_eq_drop:N }
-\cs_new_protected:Npn \box_gset_eq_clear:NN #1#2
- { \tex_global:D \tex_setbox:D #1 \tex_box:D #2 }
-\cs_generate_variant:Nn \box_set_eq_clear:NN { c , Nc , cc }
-\cs_generate_variant:Nn \box_gset_eq_clear:NN { c , Nc , cc }
-\__kernel_patch_deprecation:nnNNpn { 2020-12-31 } { \hbox_unpack_drop:N }
-\cs_new_protected:Npn \hbox_unpack_clear:N
- { \hbox_unpack_drop:N }
-\cs_generate_variant:Nn \hbox_unpack_clear:N { c }
-\__kernel_patch_deprecation:nnNNpn { 2020-12-31 } { \vbox_unpack_drop:N }
-\cs_new_protected:Npn \vbox_unpack_clear:N
- { \vbox_unpack_drop:N }
-\cs_generate_variant:Nn \vbox_unpack_clear:N { c }
%% File: l3color-base.dtx
\cs_new_eq:NN \color_group_begin: \group_begin:
\cs_new_eq:NN \color_group_end: \group_end:
@@ -24863,6 +24766,283 @@
}
}
}
+\fp_new:N \l__coffin_sin_fp
+\fp_new:N \l__coffin_cos_fp
+\prop_new:N \l__coffin_bounding_prop
+\prop_new:N \l__coffin_corners_prop
+\prop_new:N \l__coffin_poles_prop
+\dim_new:N \l__coffin_bounding_shift_dim
+\dim_new:N \l__coffin_left_corner_dim
+\dim_new:N \l__coffin_right_corner_dim
+\dim_new:N \l__coffin_bottom_corner_dim
+\dim_new:N \l__coffin_top_corner_dim
+\cs_new_protected:Npn \coffin_rotate:Nn #1#2
+ { \__coffin_rotate:NnNNN #1 {#2} \box_rotate:Nn \prop_set_eq:cN \hbox_set:Nn }
+\cs_generate_variant:Nn \coffin_rotate:Nn { c }
+\cs_new_protected:Npn \coffin_grotate:Nn #1#2
+ { \__coffin_rotate:NnNNN #1 {#2} \box_grotate:Nn \prop_gset_eq:cN \hbox_gset:Nn }
+\cs_generate_variant:Nn \coffin_grotate:Nn { c }
+\cs_new_protected:Npn \__coffin_rotate:NnNNN #1#2#3#4#5
+ {
+ \fp_set:Nn \l__coffin_sin_fp { sind ( #2 ) }
+ \fp_set:Nn \l__coffin_cos_fp { cosd ( #2 ) }
+ \prop_set_eq:Nc \l__coffin_corners_prop
+ { coffin ~ \__coffin_to_value:N #1 ~ corners }
+ \prop_set_eq:Nc \l__coffin_poles_prop
+ { coffin ~ \__coffin_to_value:N #1 ~ poles }
+ \prop_map_inline:Nn \l__coffin_corners_prop
+ { \__coffin_rotate_corner:Nnnn #1 {##1} ##2 }
+ \prop_map_inline:Nn \l__coffin_poles_prop
+ { \__coffin_rotate_pole:Nnnnnn #1 {##1} ##2 }
+ \__coffin_set_bounding:N #1
+ \prop_map_inline:Nn \l__coffin_bounding_prop
+ { \__coffin_rotate_bounding:nnn {##1} ##2 }
+ \__coffin_find_corner_maxima:N #1
+ \__coffin_find_bounding_shift:
+ #3 #1 {#2}
+ \hbox_set:Nn \l__coffin_internal_box
+ {
+ \tex_kern:D
+ \dim_eval:n
+ { \l__coffin_bounding_shift_dim - \l__coffin_left_corner_dim }
+ \exp_stop_f:
+ \box_move_down:nn { \l__coffin_bottom_corner_dim }
+ { \box_use:N #1 }
+ }
+ \box_set_ht:Nn \l__coffin_internal_box
+ { \l__coffin_top_corner_dim - \l__coffin_bottom_corner_dim }
+ \box_set_dp:Nn \l__coffin_internal_box { 0pt }
+ \box_set_wd:Nn \l__coffin_internal_box
+ { \l__coffin_right_corner_dim - \l__coffin_left_corner_dim }
+ #5 #1 { \box_use_drop:N \l__coffin_internal_box }
+ \prop_map_inline:Nn \l__coffin_corners_prop
+ { \__coffin_shift_corner:Nnnn #1 {##1} ##2 }
+ \prop_map_inline:Nn \l__coffin_poles_prop
+ { \__coffin_shift_pole:Nnnnnn #1 {##1} ##2 }
+ #4 { coffin ~ \__coffin_to_value:N #1 ~ corners }
+ \l__coffin_corners_prop
+ #4 { coffin ~ \__coffin_to_value:N #1 ~ poles }
+ \l__coffin_poles_prop
+ }
+\cs_new_protected:Npn \__coffin_set_bounding:N #1
+ {
+ \prop_put:Nnx \l__coffin_bounding_prop { tl }
+ { { 0pt } { \dim_eval:n { \box_ht:N #1 } } }
+ \prop_put:Nnx \l__coffin_bounding_prop { tr }
+ {
+ { \dim_eval:n { \box_wd:N #1 } }
+ { \dim_eval:n { \box_ht:N #1 } }
+ }
+ \dim_set:Nn \l__coffin_internal_dim { -\box_dp:N #1 }
+ \prop_put:Nnx \l__coffin_bounding_prop { bl }
+ { { 0pt } { \dim_use:N \l__coffin_internal_dim } }
+ \prop_put:Nnx \l__coffin_bounding_prop { br }
+ {
+ { \dim_eval:n { \box_wd:N #1 } }
+ { \dim_use:N \l__coffin_internal_dim }
+ }
+ }
+\cs_new_protected:Npn \__coffin_rotate_bounding:nnn #1#2#3
+ {
+ \__coffin_rotate_vector:nnNN {#2} {#3} \l__coffin_x_dim \l__coffin_y_dim
+ \prop_put:Nnx \l__coffin_bounding_prop {#1}
+ { { \dim_use:N \l__coffin_x_dim } { \dim_use:N \l__coffin_y_dim } }
+ }
+\cs_new_protected:Npn \__coffin_rotate_corner:Nnnn #1#2#3#4
+ {
+ \__coffin_rotate_vector:nnNN {#3} {#4} \l__coffin_x_dim \l__coffin_y_dim
+ \prop_put:Nnx \l__coffin_corners_prop {#2}
+ { { \dim_use:N \l__coffin_x_dim } { \dim_use:N \l__coffin_y_dim } }
+ }
+\cs_new_protected:Npn \__coffin_rotate_pole:Nnnnnn #1#2#3#4#5#6
+ {
+ \__coffin_rotate_vector:nnNN {#3} {#4} \l__coffin_x_dim \l__coffin_y_dim
+ \__coffin_rotate_vector:nnNN {#5} {#6}
+ \l__coffin_x_prime_dim \l__coffin_y_prime_dim
+ \prop_put:Nnx \l__coffin_poles_prop {#2}
+ {
+ { \dim_use:N \l__coffin_x_dim } { \dim_use:N \l__coffin_y_dim }
+ { \dim_use:N \l__coffin_x_prime_dim }
+ { \dim_use:N \l__coffin_y_prime_dim }
+ }
+ }
+\cs_new_protected:Npn \__coffin_rotate_vector:nnNN #1#2#3#4
+ {
+ \dim_set:Nn #3
+ {
+ \fp_to_dim:n
+ {
+ \dim_to_fp:n {#1} * \l__coffin_cos_fp
+ - \dim_to_fp:n {#2} * \l__coffin_sin_fp
+ }
+ }
+ \dim_set:Nn #4
+ {
+ \fp_to_dim:n
+ {
+ \dim_to_fp:n {#1} * \l__coffin_sin_fp
+ + \dim_to_fp:n {#2} * \l__coffin_cos_fp
+ }
+ }
+ }
+\cs_new_protected:Npn \__coffin_find_corner_maxima:N #1
+ {
+ \dim_set:Nn \l__coffin_top_corner_dim { -\c_max_dim }
+ \dim_set:Nn \l__coffin_right_corner_dim { -\c_max_dim }
+ \dim_set:Nn \l__coffin_bottom_corner_dim { \c_max_dim }
+ \dim_set:Nn \l__coffin_left_corner_dim { \c_max_dim }
+ \prop_map_inline:Nn \l__coffin_corners_prop
+ { \__coffin_find_corner_maxima_aux:nn ##2 }
+ }
+\cs_new_protected:Npn \__coffin_find_corner_maxima_aux:nn #1#2
+ {
+ \dim_set:Nn \l__coffin_left_corner_dim
+ { \dim_min:nn { \l__coffin_left_corner_dim } {#1} }
+ \dim_set:Nn \l__coffin_right_corner_dim
+ { \dim_max:nn { \l__coffin_right_corner_dim } {#1} }
+ \dim_set:Nn \l__coffin_bottom_corner_dim
+ { \dim_min:nn { \l__coffin_bottom_corner_dim } {#2} }
+ \dim_set:Nn \l__coffin_top_corner_dim
+ { \dim_max:nn { \l__coffin_top_corner_dim } {#2} }
+ }
+\cs_new_protected:Npn \__coffin_find_bounding_shift:
+ {
+ \dim_set:Nn \l__coffin_bounding_shift_dim { \c_max_dim }
+ \prop_map_inline:Nn \l__coffin_bounding_prop
+ { \__coffin_find_bounding_shift_aux:nn ##2 }
+ }
+\cs_new_protected:Npn \__coffin_find_bounding_shift_aux:nn #1#2
+ {
+ \dim_set:Nn \l__coffin_bounding_shift_dim
+ { \dim_min:nn { \l__coffin_bounding_shift_dim } {#1} }
+ }
+\cs_new_protected:Npn \__coffin_shift_corner:Nnnn #1#2#3#4
+ {
+ \prop_put:Nnx \l__coffin_corners_prop {#2}
+ {
+ { \dim_eval:n { #3 - \l__coffin_left_corner_dim } }
+ { \dim_eval:n { #4 - \l__coffin_bottom_corner_dim } }
+ }
+ }
+\cs_new_protected:Npn \__coffin_shift_pole:Nnnnnn #1#2#3#4#5#6
+ {
+ \prop_put:Nnx \l__coffin_poles_prop {#2}
+ {
+ { \dim_eval:n { #3 - \l__coffin_left_corner_dim } }
+ { \dim_eval:n { #4 - \l__coffin_bottom_corner_dim } }
+ {#5} {#6}
+ }
+ }
+\fp_new:N \l__coffin_scale_x_fp
+\fp_new:N \l__coffin_scale_y_fp
+\dim_new:N \l__coffin_scaled_total_height_dim
+\dim_new:N \l__coffin_scaled_width_dim
+\cs_new_protected:Npn \coffin_resize:Nnn #1#2#3
+ {
+ \__coffin_resize:NnnNN #1 {#2} {#3}
+ \box_resize_to_wd_and_ht_plus_dp:Nnn
+ \prop_set_eq:cN
+ }
+\cs_generate_variant:Nn \coffin_resize:Nnn { c }
+\cs_new_protected:Npn \coffin_gresize:Nnn #1#2#3
+ {
+ \__coffin_resize:NnnNN #1 {#2} {#3}
+ \box_gresize_to_wd_and_ht_plus_dp:Nnn
+ \prop_gset_eq:cN
+ }
+\cs_generate_variant:Nn \coffin_gresize:Nnn { c }
+\cs_new_protected:Npn \__coffin_resize:NnnNN #1#2#3#4#5
+ {
+ \fp_set:Nn \l__coffin_scale_x_fp
+ { \dim_to_fp:n {#2} / \dim_to_fp:n { \coffin_wd:N #1 } }
+ \fp_set:Nn \l__coffin_scale_y_fp
+ {
+ \dim_to_fp:n {#3}
+ / \dim_to_fp:n { \coffin_ht:N #1 + \coffin_dp:N #1 }
+ }
+ #4 #1 {#2} {#3}
+ \__coffin_resize_common:NnnN #1 {#2} {#3} #5
+ }
+\cs_new_protected:Npn \__coffin_resize_common:NnnN #1#2#3#4
+ {
+ \prop_set_eq:Nc \l__coffin_corners_prop
+ { coffin ~ \__coffin_to_value:N #1 ~ corners }
+ \prop_set_eq:Nc \l__coffin_poles_prop
+ { coffin ~ \__coffin_to_value:N #1 ~ poles }
+ \prop_map_inline:Nn \l__coffin_corners_prop
+ { \__coffin_scale_corner:Nnnn #1 {##1} ##2 }
+ \prop_map_inline:Nn \l__coffin_poles_prop
+ { \__coffin_scale_pole:Nnnnnn #1 {##1} ##2 }
+ \fp_compare:nNnT \l__coffin_scale_x_fp < \c_zero_fp
+ {
+ \prop_map_inline:Nn \l__coffin_corners_prop
+ { \__coffin_x_shift_corner:Nnnn #1 {##1} ##2 }
+ \prop_map_inline:Nn \l__coffin_poles_prop
+ { \__coffin_x_shift_pole:Nnnnnn #1 {##1} ##2 }
+ }
+ #4 { coffin ~ \__coffin_to_value:N #1 ~ corners }
+ \l__coffin_corners_prop
+ #4 { coffin ~ \__coffin_to_value:N #1 ~ poles }
+ \l__coffin_poles_prop
+ }
+\cs_new_protected:Npn \coffin_scale:Nnn #1#2#3
+ { \__coffin_scale:NnnNN #1 {#2} {#3} \box_scale:Nnn \prop_set_eq:cN }
+\cs_generate_variant:Nn \coffin_scale:Nnn { c }
+\cs_new_protected:Npn \coffin_gscale:Nnn #1#2#3
+ { \__coffin_scale:NnnNN #1 {#2} {#3} \box_gscale:Nnn \prop_gset_eq:cN }
+\cs_generate_variant:Nn \coffin_gscale:Nnn { c }
+\cs_new_protected:Npn \__coffin_scale:NnnNN #1#2#3#4#5
+ {
+ \fp_set:Nn \l__coffin_scale_x_fp {#2}
+ \fp_set:Nn \l__coffin_scale_y_fp {#3}
+ #4 #1 { \l__coffin_scale_x_fp } { \l__coffin_scale_y_fp }
+ \dim_set:Nn \l__coffin_internal_dim
+ { \coffin_ht:N #1 + \coffin_dp:N #1 }
+ \dim_set:Nn \l__coffin_scaled_total_height_dim
+ { \fp_abs:n { \l__coffin_scale_y_fp } \l__coffin_internal_dim }
+ \dim_set:Nn \l__coffin_scaled_width_dim
+ { -\fp_abs:n { \l__coffin_scale_x_fp } \coffin_wd:N #1 }
+ \__coffin_resize_common:NnnN #1
+ { \l__coffin_scaled_width_dim } { \l__coffin_scaled_total_height_dim }
+ #5
+ }
+\cs_new_protected:Npn \__coffin_scale_vector:nnNN #1#2#3#4
+ {
+ \dim_set:Nn #3
+ { \fp_to_dim:n { \dim_to_fp:n {#1} * \l__coffin_scale_x_fp } }
+ \dim_set:Nn #4
+ { \fp_to_dim:n { \dim_to_fp:n {#2} * \l__coffin_scale_y_fp } }
+ }
+\cs_new_protected:Npn \__coffin_scale_corner:Nnnn #1#2#3#4
+ {
+ \__coffin_scale_vector:nnNN {#3} {#4} \l__coffin_x_dim \l__coffin_y_dim
+ \prop_put:Nnx \l__coffin_corners_prop {#2}
+ { { \dim_use:N \l__coffin_x_dim } { \dim_use:N \l__coffin_y_dim } }
+ }
+\cs_new_protected:Npn \__coffin_scale_pole:Nnnnnn #1#2#3#4#5#6
+ {
+ \__coffin_scale_vector:nnNN {#3} {#4} \l__coffin_x_dim \l__coffin_y_dim
+ \prop_put:Nnx \l__coffin_poles_prop {#2}
+ {
+ { \dim_use:N \l__coffin_x_dim } { \dim_use:N \l__coffin_y_dim }
+ {#5} {#6}
+ }
+ }
+\cs_new_protected:Npn \__coffin_x_shift_corner:Nnnn #1#2#3#4
+ {
+ \prop_put:Nnx \l__coffin_corners_prop {#2}
+ {
+ { \dim_eval:n { #3 + \box_wd:N #1 } } {#4}
+ }
+ }
+\cs_new_protected:Npn \__coffin_x_shift_pole:Nnnnnn #1#2#3#4#5#6
+ {
+ \prop_put:Nnx \l__coffin_poles_prop {#2}
+ {
+ { \dim_eval:n { #3 + \box_wd:N #1 } } {#4}
+ {#5} {#6}
+ }
+ }
\cs_new_protected:Npn \coffin_join:NnnNnnnn #1#2#3#4#5#6#7#8
{
\__coffin_join:NnnNnnnnN #1 {#2} {#3} #4 {#5} {#6} {#7} {#8}
@@ -25104,18 +25284,20 @@
\prop_new:N \l__coffin_display_poles_prop
\tl_new:N \l__coffin_display_font_tl
\tl_set:Nn \l__coffin_display_font_tl { \sffamily \tiny }
+\cs_new_protected:Npn \__coffin_color:n #1
+ { \cs_if_exist:NT \color { \color {#1} } }
\cs_new_protected:Npn \coffin_mark_handle:Nnnn #1#2#3#4
{
\hcoffin_set:Nn \l__coffin_display_pole_coffin
{
- \color {#4}
+ \__coffin_color:n {#4}
\rule { 1pt } { 1pt }
}
\__coffin_attach_mark:NnnNnnnn #1 {#2} {#3}
\l__coffin_display_pole_coffin { hc } { vc } { 0pt } { 0pt }
\hcoffin_set:Nn \l__coffin_display_coord_coffin
{
- \color {#4}
+ \__coffin_color:n {#4}
\l__coffin_display_font_tl
( \tl_to_str:n { #2 , #3 } )
}
@@ -25153,7 +25335,7 @@
{
\hcoffin_set:Nn \l__coffin_display_pole_coffin
{
- \color {#2}
+ \__coffin_color:n {#2}
\rule { 1pt } { 1pt }
}
\prop_set_eq:Nc \l__coffin_display_poles_prop
@@ -25188,7 +25370,7 @@
{ 0pt } { 0pt }
\hcoffin_set:Nn \l__coffin_display_coord_coffin
{
- \color {#6}
+ \__coffin_color:n {#6}
\l__coffin_display_font_tl
( \tl_to_str:n { #1 , ##1 } )
}
@@ -25338,12 +25520,6 @@
The~feature~you~are~using~is~only~available~
with~the~LuaTeX~engine.~LaTeX3~ignored~'#1'.
}
-\__kernel_patch_deprecation:nnNNpn { 2019-12-31 } { \lua_now:e }
-\cs_new:Npn \lua_now_x:n #1 { \__lua_now:n {#1} }
-\__kernel_patch_deprecation:nnNNpn { 2019-12-31 } { \lua_escape:e }
-\cs_new:Npn \lua_escape_x:n #1 { \__lua_escape:n {#1} }
-\__kernel_patch_deprecation:nnNNpn { 2019-12-31 } { \lua_shipout_e:n }
-\cs_new_protected:Npn \lua_shipout_x:n #1 { \__lua_shipout:n {#1} }
%% File: l3unicode.dtx
\ior_new:N \g__char_data_ior
\bool_lazy_or:nnTF { \sys_if_engine_luatex_p: } { \sys_if_engine_xetex_p: }
@@ -25599,323 +25775,66 @@
}
#6 #1 \l__box_internal_box
}
-\fp_new:N \l__coffin_sin_fp
-\fp_new:N \l__coffin_cos_fp
-\prop_new:N \l__coffin_bounding_prop
-\prop_new:N \l__coffin_corners_prop
-\prop_new:N \l__coffin_poles_prop
-\dim_new:N \l__coffin_bounding_shift_dim
-\dim_new:N \l__coffin_left_corner_dim
-\dim_new:N \l__coffin_right_corner_dim
-\dim_new:N \l__coffin_bottom_corner_dim
-\dim_new:N \l__coffin_top_corner_dim
-\cs_new_protected:Npn \coffin_rotate:Nn #1#2
- { \__coffin_rotate:NnNN #1 {#2} \box_rotate:Nn \prop_set_eq:cN }
-\cs_new_protected:Npn \coffin_grotate:Nn #1#2
- { \__coffin_rotate:NnNN #1 {#2} \box_grotate:Nn \prop_gset_eq:cN }
-\cs_new_protected:Npn \__coffin_rotate:NnNN #1#2#3#4
- {
- \fp_set:Nn \l__coffin_sin_fp { sind ( #2 ) }
- \fp_set:Nn \l__coffin_cos_fp { cosd ( #2 ) }
- \prop_set_eq:Nc \l__coffin_corners_prop
- { coffin ~ \__coffin_to_value:N #1 ~ corners }
- \prop_set_eq:Nc \l__coffin_poles_prop
- { coffin ~ \__coffin_to_value:N #1 ~ poles }
- \prop_map_inline:Nn \l__coffin_corners_prop
- { \__coffin_rotate_corner:Nnnn #1 {##1} ##2 }
- \prop_map_inline:Nn \l__coffin_poles_prop
- { \__coffin_rotate_pole:Nnnnnn #1 {##1} ##2 }
- \__coffin_set_bounding:N #1
- \prop_map_inline:Nn \l__coffin_bounding_prop
- { \__coffin_rotate_bounding:nnn {##1} ##2 }
- \__coffin_find_corner_maxima:N #1
- \__coffin_find_bounding_shift:
- #3 #1 {#2}
- \hbox_set:Nn \l__coffin_internal_box
- {
- \tex_kern:D
- \dim_eval:n
- { \l__coffin_bounding_shift_dim - \l__coffin_left_corner_dim }
- \exp_stop_f:
- \box_move_down:nn { \l__coffin_bottom_corner_dim }
- { \box_use:N #1 }
- }
- \box_set_ht:Nn \l__coffin_internal_box
- { \l__coffin_top_corner_dim - \l__coffin_bottom_corner_dim }
- \box_set_dp:Nn \l__coffin_internal_box { 0 pt }
- \box_set_wd:Nn \l__coffin_internal_box
- { \l__coffin_right_corner_dim - \l__coffin_left_corner_dim }
- \hbox_set:Nn #1 { \box_use_drop:N \l__coffin_internal_box }
- \prop_map_inline:Nn \l__coffin_corners_prop
- { \__coffin_shift_corner:Nnnn #1 {##1} ##2 }
- \prop_map_inline:Nn \l__coffin_poles_prop
- { \__coffin_shift_pole:Nnnnnn #1 {##1} ##2 }
- #4 { coffin ~ \__coffin_to_value:N #1 ~ corners }
- \l__coffin_corners_prop
- #4 { coffin ~ \__coffin_to_value:N #1 ~ poles }
- \l__coffin_poles_prop
- }
-\cs_generate_variant:Nn \coffin_rotate:Nn { c }
-\cs_new_protected:Npn \__coffin_set_bounding:N #1
- {
- \prop_put:Nnx \l__coffin_bounding_prop { tl }
- { { 0 pt } { \dim_eval:n { \box_ht:N #1 } } }
- \prop_put:Nnx \l__coffin_bounding_prop { tr }
- {
- { \dim_eval:n { \box_wd:N #1 } }
- { \dim_eval:n { \box_ht:N #1 } }
- }
- \dim_set:Nn \l__coffin_internal_dim { -\box_dp:N #1 }
- \prop_put:Nnx \l__coffin_bounding_prop { bl }
- { { 0 pt } { \dim_use:N \l__coffin_internal_dim } }
- \prop_put:Nnx \l__coffin_bounding_prop { br }
- {
- { \dim_eval:n { \box_wd:N #1 } }
- { \dim_use:N \l__coffin_internal_dim }
- }
- }
-\cs_new_protected:Npn \__coffin_rotate_bounding:nnn #1#2#3
- {
- \__coffin_rotate_vector:nnNN {#2} {#3} \l__coffin_x_dim \l__coffin_y_dim
- \prop_put:Nnx \l__coffin_bounding_prop {#1}
- { { \dim_use:N \l__coffin_x_dim } { \dim_use:N \l__coffin_y_dim } }
- }
-\cs_new_protected:Npn \__coffin_rotate_corner:Nnnn #1#2#3#4
- {
- \__coffin_rotate_vector:nnNN {#3} {#4} \l__coffin_x_dim \l__coffin_y_dim
- \prop_put:Nnx \l__coffin_corners_prop {#2}
- { { \dim_use:N \l__coffin_x_dim } { \dim_use:N \l__coffin_y_dim } }
- }
-\cs_new_protected:Npn \__coffin_rotate_pole:Nnnnnn #1#2#3#4#5#6
- {
- \__coffin_rotate_vector:nnNN {#3} {#4} \l__coffin_x_dim \l__coffin_y_dim
- \__coffin_rotate_vector:nnNN {#5} {#6}
- \l__coffin_x_prime_dim \l__coffin_y_prime_dim
- \prop_put:Nnx \l__coffin_poles_prop {#2}
- {
- { \dim_use:N \l__coffin_x_dim } { \dim_use:N \l__coffin_y_dim }
- { \dim_use:N \l__coffin_x_prime_dim }
- { \dim_use:N \l__coffin_y_prime_dim }
- }
- }
-\cs_new_protected:Npn \__coffin_rotate_vector:nnNN #1#2#3#4
- {
- \dim_set:Nn #3
- {
- \fp_to_dim:n
- {
- \dim_to_fp:n {#1} * \l__coffin_cos_fp
- - \dim_to_fp:n {#2} * \l__coffin_sin_fp
- }
- }
- \dim_set:Nn #4
- {
- \fp_to_dim:n
- {
- \dim_to_fp:n {#1} * \l__coffin_sin_fp
- + \dim_to_fp:n {#2} * \l__coffin_cos_fp
- }
- }
- }
-\cs_new_protected:Npn \__coffin_find_corner_maxima:N #1
- {
- \dim_set:Nn \l__coffin_top_corner_dim { -\c_max_dim }
- \dim_set:Nn \l__coffin_right_corner_dim { -\c_max_dim }
- \dim_set:Nn \l__coffin_bottom_corner_dim { \c_max_dim }
- \dim_set:Nn \l__coffin_left_corner_dim { \c_max_dim }
- \prop_map_inline:Nn \l__coffin_corners_prop
- { \__coffin_find_corner_maxima_aux:nn ##2 }
- }
-\cs_new_protected:Npn \__coffin_find_corner_maxima_aux:nn #1#2
- {
- \dim_set:Nn \l__coffin_left_corner_dim
- { \dim_min:nn { \l__coffin_left_corner_dim } {#1} }
- \dim_set:Nn \l__coffin_right_corner_dim
- { \dim_max:nn { \l__coffin_right_corner_dim } {#1} }
- \dim_set:Nn \l__coffin_bottom_corner_dim
- { \dim_min:nn { \l__coffin_bottom_corner_dim } {#2} }
- \dim_set:Nn \l__coffin_top_corner_dim
- { \dim_max:nn { \l__coffin_top_corner_dim } {#2} }
- }
-\cs_new_protected:Npn \__coffin_find_bounding_shift:
- {
- \dim_set:Nn \l__coffin_bounding_shift_dim { \c_max_dim }
- \prop_map_inline:Nn \l__coffin_bounding_prop
- { \__coffin_find_bounding_shift_aux:nn ##2 }
- }
-\cs_new_protected:Npn \__coffin_find_bounding_shift_aux:nn #1#2
- {
- \dim_set:Nn \l__coffin_bounding_shift_dim
- { \dim_min:nn { \l__coffin_bounding_shift_dim } {#1} }
- }
-\cs_new_protected:Npn \__coffin_shift_corner:Nnnn #1#2#3#4
- {
- \prop_put:Nnx \l__coffin_corners_prop {#2}
- {
- { \dim_eval:n { #3 - \l__coffin_left_corner_dim } }
- { \dim_eval:n { #4 - \l__coffin_bottom_corner_dim } }
- }
- }
-\cs_new_protected:Npn \__coffin_shift_pole:Nnnnnn #1#2#3#4#5#6
- {
- \prop_put:Nnx \l__coffin_poles_prop {#2}
- {
- { \dim_eval:n { #3 - \l__coffin_left_corner_dim } }
- { \dim_eval:n { #4 - \l__coffin_bottom_corner_dim } }
- {#5} {#6}
- }
- }
-\fp_new:N \l__coffin_scale_x_fp
-\fp_new:N \l__coffin_scale_y_fp
-\dim_new:N \l__coffin_scaled_total_height_dim
-\dim_new:N \l__coffin_scaled_width_dim
-\cs_new_protected:Npn \coffin_resize:Nnn #1#2#3
- {
- \__coffin_resize:NnnNN #1 {#2} {#3}
- \box_resize_to_wd_and_ht_plus_dp:Nnn
- \prop_set_eq:cN
- }
-\cs_generate_variant:Nn \coffin_resize:Nnn { c }
-\cs_new_protected:Npn \coffin_gresize:Nnn #1#2#3
- {
- \__coffin_resize:NnnNN #1 {#2} {#3}
- \box_gresize_to_wd_and_ht_plus_dp:Nnn
- \prop_gset_eq:cN
- }
-\cs_generate_variant:Nn \coffin_gresize:Nnn { c }
-\cs_new_protected:Npn \__coffin_resize:NnnNN #1#2#3#4#5
- {
- \fp_set:Nn \l__coffin_scale_x_fp
- { \dim_to_fp:n {#2} / \dim_to_fp:n { \coffin_wd:N #1 } }
- \fp_set:Nn \l__coffin_scale_y_fp
- {
- \dim_to_fp:n {#3}
- / \dim_to_fp:n { \coffin_ht:N #1 + \coffin_dp:N #1 }
- }
- #4 #1 {#2} {#3}
- \__coffin_resize_common:NnnN #1 {#2} {#3} #5
- }
-\cs_new_protected:Npn \__coffin_resize_common:NnnN #1#2#3#4
- {
- \prop_set_eq:Nc \l__coffin_corners_prop
- { coffin ~ \__coffin_to_value:N #1 ~ corners }
- \prop_set_eq:Nc \l__coffin_poles_prop
- { coffin ~ \__coffin_to_value:N #1 ~ poles }
- \prop_map_inline:Nn \l__coffin_corners_prop
- { \__coffin_scale_corner:Nnnn #1 {##1} ##2 }
- \prop_map_inline:Nn \l__coffin_poles_prop
- { \__coffin_scale_pole:Nnnnnn #1 {##1} ##2 }
- \fp_compare:nNnT \l__coffin_scale_x_fp < \c_zero_fp
- {
- \prop_map_inline:Nn \l__coffin_corners_prop
- { \__coffin_x_shift_corner:Nnnn #1 {##1} ##2 }
- \prop_map_inline:Nn \l__coffin_poles_prop
- { \__coffin_x_shift_pole:Nnnnnn #1 {##1} ##2 }
- }
- #4 { coffin ~ \__coffin_to_value:N #1 ~ corners }
- \l__coffin_corners_prop
- #4 { coffin ~ \__coffin_to_value:N #1 ~ poles }
- \l__coffin_poles_prop
- }
-\cs_new_protected:Npn \coffin_scale:Nnn #1#2#3
- { \__coffin_scale:NnnNN #1 {#2} {#3} \box_scale:Nnn \prop_set_eq:cN }
-\cs_generate_variant:Nn \coffin_scale:Nnn { c }
-\cs_new_protected:Npn \coffin_gscale:Nnn #1#2#3
- { \__coffin_scale:NnnNN #1 {#2} {#3} \box_gscale:Nnn \prop_gset_eq:cN }
-\cs_generate_variant:Nn \coffin_gscale:Nnn { c }
-\cs_new_protected:Npn \__coffin_scale:NnnNN #1#2#3#4#5
- {
- \fp_set:Nn \l__coffin_scale_x_fp {#2}
- \fp_set:Nn \l__coffin_scale_y_fp {#3}
- #4 #1 { \l__coffin_scale_x_fp } { \l__coffin_scale_y_fp }
- \dim_set:Nn \l__coffin_internal_dim
- { \coffin_ht:N #1 + \coffin_dp:N #1 }
- \dim_set:Nn \l__coffin_scaled_total_height_dim
- { \fp_abs:n { \l__coffin_scale_y_fp } \l__coffin_internal_dim }
- \dim_set:Nn \l__coffin_scaled_width_dim
- { -\fp_abs:n { \l__coffin_scale_x_fp } \coffin_wd:N #1 }
- \__coffin_resize_common:NnnN #1
- { \l__coffin_scaled_width_dim } { \l__coffin_scaled_total_height_dim }
- #5
- }
-\cs_new_protected:Npn \__coffin_scale_vector:nnNN #1#2#3#4
- {
- \dim_set:Nn #3
- { \fp_to_dim:n { \dim_to_fp:n {#1} * \l__coffin_scale_x_fp } }
- \dim_set:Nn #4
- { \fp_to_dim:n { \dim_to_fp:n {#2} * \l__coffin_scale_y_fp } }
- }
-\cs_new_protected:Npn \__coffin_scale_corner:Nnnn #1#2#3#4
- {
- \__coffin_scale_vector:nnNN {#3} {#4} \l__coffin_x_dim \l__coffin_y_dim
- \prop_put:Nnx \l__coffin_corners_prop {#2}
- { { \dim_use:N \l__coffin_x_dim } { \dim_use:N \l__coffin_y_dim } }
- }
-\cs_new_protected:Npn \__coffin_scale_pole:Nnnnnn #1#2#3#4#5#6
- {
- \__coffin_scale_vector:nnNN {#3} {#4} \l__coffin_x_dim \l__coffin_y_dim
- \prop_put:Nnx \l__coffin_poles_prop {#2}
- {
- { \dim_use:N \l__coffin_x_dim } { \dim_use:N \l__coffin_y_dim }
- {#5} {#6}
- }
- }
-\cs_new_protected:Npn \__coffin_x_shift_corner:Nnnn #1#2#3#4
- {
- \prop_put:Nnx \l__coffin_corners_prop {#2}
- {
- { \dim_eval:n { #3 + \box_wd:N #1 } } {#4}
- }
- }
-\cs_new_protected:Npn \__coffin_x_shift_pole:Nnnnnn #1#2#3#4#5#6
- {
- \prop_put:Nnx \l__coffin_poles_prop {#2}
- {
- { \dim_eval:n { #3 + \box_wd:N #1 } } {#4}
- {#5} {#6}
- }
- }
\cs_new:Npn \fp_sign:n #1
{ \fp_to_decimal:n { sign \__fp_parse:n {#1} } }
\cs_new_protected:Npn \file_get_mdfive_hash:nN #1#2
- { \__file_get_details:nnN {#1} { mdfivesum } {#2} }
+ { \file_get_mdfive_hash:nNF {#1} #2 { \tl_set:Nn #2 { \q_no_value } } }
\cs_new_protected:Npn \file_get_size:nN #1#2
- { \__file_get_details:nnN {#1} { size } {#2} }
+ { \file_get_size:nNF {#1} #2 { \tl_set:Nn #2 { \q_no_value } } }
\cs_new_protected:Npn \file_get_timestamp:nN #1#2
+ { \file_get_timestamp:nNF {#1} #2 { \tl_set:Nn #2 { \q_no_value } } }
+\prg_new_protected_conditional:Npnn \file_get_mdfive_hash:nN #1#2 { T , F , TF }
+ { \__file_get_details:nnN {#1} { mdfivesum } {#2} }
+\prg_new_protected_conditional:Npnn \file_get_size:nN #1#2 { T , F , TF }
+ { \__file_get_details:nnN {#1} { size } {#2} }
+\prg_new_protected_conditional:Npnn \file_get_timestamp:nN #1#2 { T , F , TF }
{ \__file_get_details:nnN {#1} { moddate } {#2} }
\cs_new_protected:Npn \__file_get_details:nnN #1#2#3
{
- \file_get_full_name:nN {#1} \l__file_full_name_str
- \str_set:Nx #3
+ \file_get_full_name:nNTF {#1} \l__file_full_name_tl
{
- \use:c { tex_file #2 :D } \exp_after:wN
- { \l__file_full_name_str }
+ \tl_set:Nx #3
+ {
+ \use:c { tex_file #2 :D } \exp_after:wN
+ { \l__file_full_name_tl }
+ }
+ \prg_return_true:
}
+ { \prg_return_false: }
}
\sys_if_engine_luatex:TF
{
\cs_set_protected:Npn \__file_get_details:nnN #1#2#3
{
- \file_get_full_name:nN {#1} \l__file_full_name_str
- \str_set:Nx #3
+ \file_get_full_name:nNTF {#1} \l__file_full_name_tl
{
- \lua_now:e
+ \tl_set:Nx #3
{
- l3kernel.file#2
- ( " \lua_escape:e { \l__file_full_name_str } " )
+ \lua_now:e
+ {
+ l3kernel.file#2
+ ( " \lua_escape:e { \l__file_full_name_tl } " )
+ }
}
+ \prg_return_true:
}
- }
+ { \prg_return_false: }
+ }
}
{
- \cs_set_protected:Npn \file_get_mdfive_hash:nN #1#2
+ \prg_set_protected_conditional:Npnn \file_get_mdfive_hash:nN #1#2
+ { T , F , TF }
{
- \file_get_full_name:nN {#1} \l__file_full_name_str
- \tl_set:Nx #2
+ \file_get_full_name:nNTF {#1} \l__file_full_name_tl
{
- \tex_mdfivesum:D file \exp_after:wN
- { \l__file_full_name_str }
+ \tl_set:Nx #2
+ {
+ \tex_mdfivesum:D file \exp_after:wN
+ { \l__file_full_name_tl }
+ }
+ \prg_return_true:
}
+ { \prg_return_false: }
}
\cs_if_exist:NF \tex_filesize:D
{
@@ -25925,6 +25844,7 @@
\__kernel_msg_error:nnx
{ kernel } { primitive-not-available }
{ \exp_not:c { (pdf)file #2 } }
+ \prg_return_false:
}
}
}
@@ -25936,16 +25856,14 @@
}
\cs_new_protected:Npn \file_if_exist_input:n #1
{
- \file_get_full_name:nN {#1} \l__file_full_name_str
- \str_if_empty:NF \l__file_full_name_str
- { \__file_input:V \l__file_full_name_str }
+ \file_get_full_name:nNT {#1} \l__file_full_name_tl
+ { \__file_input:V \l__file_full_name_tl }
}
\cs_new_protected:Npn \file_if_exist_input:nF #1#2
{
- \file_get_full_name:nN {#1} \l__file_full_name_str
- \str_if_empty:NTF \l__file_full_name_str
+ \file_get_full_name:nNTF {#1} \l__file_full_name_tl
+ { \__file_input:V \l__file_full_name_tl }
{#2}
- { \__file_input:V \l__file_full_name_str }
}
\cs_new_protected:Npn \file_input_stop: { \tex_endinput:D }
\__kernel_patch:nnNNpn { \__flag_chk_exist:n {#1} } { }
@@ -25974,10 +25892,14 @@
}
\cs_new:Npn \msg_expandable_error:nnnnnn #1#2#3#4#5#6
{
- \exp_args:Nf \__msg_expandable_error_module:nn
+ \exp_args:Ne \__msg_expandable_error_module:nn
{
- \exp_args:Nf \tl_to_str:n
- { \use:c { \c__msg_text_prefix_tl #1 / #2 } {#3} {#4} {#5} {#6} }
+ \exp_args:Nc \exp_args:Noooo
+ { \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} }
}
{#1}
}
@@ -26035,16 +25957,6 @@
\cs_new_protected:Npn \bool_gset_inverse:N #1
{ \bool_if:NTF #1 { \bool_gset_false:N } { \bool_gset_true:N } #1 }
\cs_generate_variant:Nn \bool_gset_inverse:N { c }
-\cs_new:Npn \prop_count:N #1
- {
- \int_eval:n
- {
- 0
- \prop_map_function:NN #1 \__prop_count:nn
- }
- }
-\cs_new:Npn \__prop_count:nn #1#2 { + 1 }
-\cs_generate_variant:Nn \prop_count:N { c }
\cs_new:Npn \prop_map_tokens:Nn #1#2
{
\exp_last_unbraced:Nno
@@ -26244,19 +26156,6 @@
\fi:
\fi:
}
-\cs_new:Npn \skip_split_finite_else_action:nnNN #1#2#3#4
- {
- \skip_if_finite:nTF {#1}
- {
- #3 = \tex_gluestretch:D #1 \scan_stop:
- #4 = \tex_glueshrink:D #1 \scan_stop:
- }
- {
- #3 = \c_zero_skip
- #4 = \c_zero_skip
- #2
- }
- }
\str_const:Nx \c_sys_engine_version_str
{
\str_case:on \c_sys_engine_str
@@ -26347,7 +26246,7 @@
\cs_new_protected:Npn \sys_shell_get:nnN #1#2#3
{
\sys_shell_get:nnNF {#1} {#2} #3
- { \tl_clear:N #3 }
+ { \tl_set:Nn #3 { \q_no_value } }
}
\prg_new_protected_conditional:Npnn \sys_shell_get:nnN #1#2#3 { T , F , TF }
{
@@ -26364,8 +26263,8 @@
\prg_return_false:
}
{
- \if_false: { \fi:
\group_begin:
+ \if_false: { \fi:
\int_set_eq:NN \tex_tracingnesting:D \c_zero_int
\exp_args:No \tex_everyeof:D { \c__sys_marker_tl }
#2 \scan_stop:
@@ -26458,80 +26357,6 @@
\prg_return_false:
\fi:
}
-\cs_new:Npn \tl_reverse_tokens:n #1
- {
- \__kernel_exp_not:w \exp_after:wN
- {
- \exp:w
- \__tl_act:NNNnn
- \__tl_reverse_normal:nN
- \__tl_reverse_group:nn
- \__tl_reverse_space:n
- { }
- {#1}
- }
- }
-\cs_new:Npn \__tl_reverse_group:nn #1
- {
- \__tl_act_group_recurse:Nnn
- \__tl_act_reverse_output:n
- { \tl_reverse_tokens:n }
- }
-\cs_new:Npn \__tl_act_group_recurse:Nnn #1#2#3
- {
- \exp_args:Nf #1
- { \exp_after:wN \exp_after:wN \exp_after:wN { #2 {#3} } }
- }
-\cs_new:Npn \tl_count_tokens:n #1
- {
- \int_eval:n
- {
- \__tl_act:NNNnn
- \__tl_act_count_normal:nN
- \__tl_act_count_group:nn
- \__tl_act_count_space:n
- { }
- {#1}
- }
- }
-\cs_new:Npn \__tl_act_count_normal:nN #1 #2 { 1 + }
-\cs_new:Npn \__tl_act_count_space:n #1 { 1 + }
-\cs_new:Npn \__tl_act_count_group:nn #1 #2
- { 2 + \tl_count_tokens:n {#2} + }
-\__kernel_patch_deprecation:nnNNpn { 2020-12-31 } { \file_get:nnN }
-\cs_new_protected:Npn \tl_set_from_file:Nnn #1#2#3
- { \file_get:nnN {#3} {#2} #1 }
-\cs_generate_variant:Nn \tl_set_from_file:Nnn { c }
-\__kernel_patch_deprecation:nnNNpn { 2020-12-31 } { \file_get:nnN }
-\cs_new_protected:Npn \tl_gset_from_file:Nnn #1#2#3
- {
- \group_begin:
- \file_get:nnN {#3} {#2} \l__tl_internal_a_tl
- \tl_gset_eq:NN #1 \l__tl_internal_a_tl
- \group_end:
- }
-\cs_generate_variant:Nn \tl_gset_from_file:Nnn { c }
-\__kernel_patch_deprecation:nnNNpn { 2020-12-31 } { \file_get:nnN }
-\cs_new_protected:Npn \tl_set_from_file_x:Nnn #1#2#3
- {
- \group_begin:
- \file_get:nnN {#3} {#2} \l__tl_internal_a_tl
- #2 \scan_stop:
- \tl_set:Nx \l__tl_internal_a_tl { \l__tl_internal_a_tl }
- \exp_args:NNNo \group_end:
- \tl_set:Nn #1 \l__tl_internal_a_tl
- }
-\cs_generate_variant:Nn \tl_set_from_file_x:Nnn { c }
-\__kernel_patch_deprecation:nnNNpn { 2020-12-31 } { \file_get:nnN }
-\cs_new_protected:Npn \tl_gset_from_file_x:Nnn #1#2#3
- {
- \group_begin:
- \file_get:nnN {#3} {#2} \l__tl_internal_a_tl
- #2 \scan_stop:
- \tl_gset:Nx #1 { \l__tl_internal_a_tl }
- \group_end:
- }
-\cs_generate_variant:Nn \tl_gset_from_file_x:Nnn { c }
\cs_new:Npn \char_lower_case:N #1
{ \__char_change_case:nNN { lower } \char_value_lccode:n #1 }
\cs_new:Npn \char_upper_case:N #1
@@ -27774,6 +27599,110 @@
\exp_after:wN \__peek_true_remove:w
}
%% File: l3deprecation.dtx
+\bool_new:N \l__deprecation_grace_period_bool
+\cs_new:Npn \__deprecation_date_compare:nNnTF #1#2#3
+ { \__deprecation_date_compare_aux:w #1 -0-0- \q_mark #2 #3 -0-0- \q_stop }
+\cs_new:Npn \__deprecation_date_compare_aux:w
+ #1 - #2 - #3 - #4 \q_mark #5 #6 - #7 - #8 - #9 \q_stop
+ {
+ \int_compare:nNnTF {#1} = {#6}
+ {
+ \int_compare:nNnTF {#2} = {#7}
+ { \int_compare:nNnTF {#3} #5 {#8} }
+ { \int_compare:nNnTF {#2} #5 {#7} }
+ }
+ { \int_compare:nNnTF {#1} #5 {#6} }
+ }
+\cs_new_protected:Npn \__deprecation_not_yet_deprecated:nTF #1
+ {
+ \bool_set_false:N \l__deprecation_grace_period_bool
+ \exp_args:No \__deprecation_date_compare:nNnTF { \ExplLoaderFileDate } < {#1}
+ { \use_i:nn }
+ {
+ \exp_args:Nf \__deprecation_date_compare:nNnTF
+ {
+ \exp_after:wN \__deprecation_minus_six_months:w
+ \ExplLoaderFileDate -0-0- \q_stop
+ } < {#1}
+ {
+ \bool_set_true:N \l__deprecation_grace_period_bool
+ \bool_if:NTF \l@expl@undo@recent@deprecations@bool
+ }
+ { \use_ii:nn }
+ }
+ }
+\cs_new:Npn \__deprecation_minus_six_months:w #1 - #2 - #3 - #4 \q_stop
+ {
+ \int_compare:nNnTF {#2} > 6
+ { #1 - \int_eval:n { #2 - 6 } - #3 }
+ { \int_eval:n { #1 - 1 } - \int_eval:n { #2 + 6 } - #3 }
+ }
+\cs_new_protected:Npn \__kernel_patch_deprecation:nnNNpn #1#2#3#4#5#
+ { \__deprecation_patch_aux:nnNNnn {#1} {#2} #3 #4 {#5} }
+\cs_new_protected:Npn \__deprecation_patch_aux:nnNNnn #1#2#3#4#5#6
+ {
+ \__kernel_deprecation_code:nn
+ {
+ \tex_let:D #4 \scan_stop:
+ \__kernel_deprecation_error:Nnn #4 {#2} {#1}
+ }
+ { \tex_let:D #4 \scan_stop: }
+ \__deprecation_not_yet_deprecated:nTF {#1}
+ {
+ \bool_if:nTF
+ {
+ \cs_if_eq_p:NN #3 \cs_new_protected:Npn &&
+ \__kernel_if_debug:TF
+ { \c_true_bool } { \l@expl@undo@recent@deprecations@bool }
+ }
+ { \__deprecation_warn_once:nnNnn {#1} {#2} #4 {#5} {#6} }
+ { \__deprecation_patch_aux:Nn #3 { #4 #5 {#6} } }
+ }
+ { \__deprecation_just_error:nnNN {#1} {#2} #3 #4 }
+ }
+\cs_new_protected:Npn \__deprecation_warn_once:nnNnn #1#2#3#4#5
+ {
+ \cs_new_protected:Npx #3
+ {
+ \__kernel_if_debug:TF
+ {
+ \exp_not:N \__kernel_msg_warning:nnxxx
+ { kernel } { deprecated-command }
+ {#1}
+ { \token_to_str:N #3 }
+ { \tl_to_str:n {#2} }
+ }
+ { }
+ \exp_not:n { \cs_gset_protected:Npn #3 #4 {#5} }
+ \exp_not:N #3
+ }
+ \__kernel_deprecation_code:nn { }
+ { \cs_set_protected:Npn #3 #4 {#5} }
+ }
+\cs_new_protected:Npn \__deprecation_patch_aux:Nn #1#2
+ {
+ #1 #2
+ \cs_if_eq:NNTF #1 \cs_new_protected:Npn
+ { \__kernel_deprecation_code:nn { } { \cs_set_protected:Npn #2 } }
+ { \__kernel_deprecation_code:nn { } { \cs_set:Npn #2 } }
+ }
+\cs_new_protected:Npn \__deprecation_just_error:nnNN #1#2#3#4
+ {
+ \exp_args:NNx \__deprecation_patch_aux:Nn #3
+ {
+ \exp_not:N #4
+ {
+ \cs_if_eq:NNTF #3 \cs_new_protected:Npn
+ { \exp_not:N \__kernel_msg_error:nnnnnn }
+ { \exp_not:N \__kernel_msg_expandable_error:nnnnnn }
+ { kernel } { deprecated-command }
+ {#1}
+ { \token_to_str:N #4 }
+ { \tl_to_str:n {#2} }
+ { \bool_if:NT \l__deprecation_grace_period_bool { grace } }
+ }
+ }
+ }
\cs_new_protected:Npn \__kernel_deprecation_error:Nnn #1#2#3
{
\tex_protected:D \tex_outer:D \tex_edef:D #1
@@ -27786,107 +27715,99 @@
{ \tl_to_str:n {#3} } { \token_to_str:N #1 } { \tl_to_str:n {#2} }
}
}
-\__kernel_deprecation_error:Nnn \box_resize:cnn
- { \box_resize_to_wd_and_ht_plus_dp:cnn } { 2018-12-27 }
-\__kernel_deprecation_error:Nnn \box_resize:Nnn
- { \box_resize_to_wd_and_ht_plus_dp:Nnn } { 2018-12-27 }
-\__kernel_deprecation_error:Nnn \box_use_clear:c
- { \box_use_drop:c } { 2018-12-27 }
-\__kernel_deprecation_error:Nnn \box_use_clear:N
- { \box_use_drop:N } { 2018-12-27 }
-\__kernel_deprecation_error:Nnn \c_job_name_tl
+\__kernel_msg_new:nnn { kernel } { deprecated-command }
+ {
+ '#2'~deprecated~on~#1.
+ \tl_if_empty:nF {#3} { ~Use~'#3'. }
+ \str_if_eq:nnT {#4} { grace }
+ {
+ \c_space_tl
+ For~6~months~after~that~date~one~can~restore~a~deprecated~
+ command~by~loading~the~expl3~package~with~the~option~
+ 'undo-recent-deprecations'.
+ }
+ }
+\cs_new_protected:Npn \__deprecation_old_protected:Nnn #1#2#3
+ {
+ \__kernel_patch_deprecation:nnNNpn {#3} {#2}
+ \cs_new_protected:Npn #1 { }
+ }
+\cs_new_protected:Npn \__deprecation_old:Nnn #1#2#3
+ {
+ \__kernel_patch_deprecation:nnNNpn {#3} {#2}
+ \cs_new:Npn #1 { }
+ }
+\__deprecation_old:Nnn \c_job_name_tl
{ \c_sys_jobname_str } { 2017-01-01 }
-\__kernel_deprecation_error:Nnn \c_minus_one
- { -1 } { 2018-12-27 }
-\__kernel_deprecation_error:Nnn \dim_case:nnn
+\__deprecation_old:Nnn \dim_case:nnn
{ \dim_case:nnF } { 2015-07-14 }
-\__kernel_deprecation_error:Nnn \file_add_path:nN
- { \file_get_full_name:nN } { 2018-12-27 }
-\__kernel_deprecation_error:Nnn \file_if_exist_input:nT
+\__deprecation_old_protected:Nnn \file_if_exist_input:nT
{ \file_if_exist:nT and~ \file_input:n } { 2018-03-05 }
-\__kernel_deprecation_error:Nnn \file_if_exist_input:nTF
+\__deprecation_old_protected:Nnn \file_if_exist_input:nTF
{ \file_if_exist:nT and~ \file_input:n } { 2018-03-05 }
-\__kernel_deprecation_error:Nnn \file_list:
- { \file_log_list: } { 2018-12-27 }
-\__kernel_deprecation_error:Nnn \file_path_include:n
- { \seq_put_right:Nn \l_file_search_path_seq } { 2018-12-27 }
-\__kernel_deprecation_error:Nnn \file_path_remove:n
- { \seq_remove_all:Nn \l_file_search_path_seq } { 2018-12-27 }
-\__kernel_deprecation_error:Nnn \g_file_current_name_tl
- { \g_file_current_name_str } { 2018-12-27 }
-\__kernel_deprecation_error:Nnn \int_case:nnn
+\__deprecation_old:Nnn \int_case:nnn
{ \int_case:nnF } { 2015-07-14 }
-\__kernel_deprecation_error:Nnn \int_from_binary:n
+\__deprecation_old:Nnn \int_from_binary:n
{ \int_from_bin:n } { 2016-01-05 }
-\__kernel_deprecation_error:Nnn \int_from_hexadecimal:n
+\__deprecation_old:Nnn \int_from_hexadecimal:n
{ \int_from_hex:n } { 2016-01-05 }
-\__kernel_deprecation_error:Nnn \int_from_octal:n
+\__deprecation_old:Nnn \int_from_octal:n
{ \int_from_oct:n } { 2016-01-05 }
-\__kernel_deprecation_error:Nnn \int_to_binary:n
+\__deprecation_old:Nnn \int_to_binary:n
{ \int_to_bin:n } { 2016-01-05 }
-\__kernel_deprecation_error:Nnn \int_to_hexadecimal:n
+\__deprecation_old:Nnn \int_to_hexadecimal:n
{ \int_to_hex:n } { 2016-01-05 }
-\__kernel_deprecation_error:Nnn \int_to_octal:n
+\__deprecation_old:Nnn \int_to_octal:n
{ \int_to_oct:n } { 2016-01-05 }
-\__kernel_deprecation_error:Nnn \ior_get_str:NN
+\__deprecation_old_protected:Nnn \ior_get_str:NN
{ \ior_str_get:NN } { 2018-03-05 }
-\__kernel_deprecation_error:Nnn \ior_list_streams:
- { \ior_show_list: } { 2018-12-27 }
-\__kernel_deprecation_error:Nnn \ior_log_streams:
- { \ior_log_list: } { 2018-12-27 }
-\__kernel_deprecation_error:Nnn \luatex_if_engine_p:
+\__deprecation_old:Nnn \luatex_if_engine_p:
{ \sys_if_engine_luatex_p: } { 2017-01-01 }
-\__kernel_deprecation_error:Nnn \luatex_if_engine:F
+\__deprecation_old:Nnn \luatex_if_engine:F
{ \sys_if_engine_luatex:F } { 2017-01-01 }
-\__kernel_deprecation_error:Nnn \luatex_if_engine:T
+\__deprecation_old:Nnn \luatex_if_engine:T
{ \sys_if_engine_luatex:T } { 2017-01-01 }
-\__kernel_deprecation_error:Nnn \luatex_if_engine:TF
+\__deprecation_old:Nnn \luatex_if_engine:TF
{ \sys_if_engine_luatex:TF } { 2017-01-01 }
-\__kernel_deprecation_error:Nnn \pdftex_if_engine_p:
+\__deprecation_old:Nnn \pdftex_if_engine_p:
{ \sys_if_engine_pdftex_p: } { 2017-01-01 }
-\__kernel_deprecation_error:Nnn \pdftex_if_engine:F
+\__deprecation_old:Nnn \pdftex_if_engine:F
{ \sys_if_engine_pdftex:F } { 2017-01-01 }
-\__kernel_deprecation_error:Nnn \pdftex_if_engine:T
+\__deprecation_old:Nnn \pdftex_if_engine:T
{ \sys_if_engine_pdftex:T } { 2017-01-01 }
-\__kernel_deprecation_error:Nnn \pdftex_if_engine:TF
+\__deprecation_old:Nnn \pdftex_if_engine:TF
{ \sys_if_engine_pdftex:TF } { 2017-01-01 }
-\__kernel_deprecation_error:Nnn \prop_get:cn
+\__deprecation_old:Nnn \prop_get:cn
{ \prop_item:cn } { 2016-01-05 }
-\__kernel_deprecation_error:Nnn \prop_get:Nn
+\__deprecation_old:Nnn \prop_get:Nn
{ \prop_item:Nn } { 2016-01-05 }
-\__kernel_deprecation_error:Nnn \quark_if_recursion_tail_break:N
+\__deprecation_old:Nnn \quark_if_recursion_tail_break:N
{ } { 2015-07-14 }
-\__kernel_deprecation_error:Nnn \quark_if_recursion_tail_break:n
+\__deprecation_old:Nnn \quark_if_recursion_tail_break:n
{ } { 2015-07-14 }
-\__kernel_deprecation_error:Nnn \scan_align_safe_stop:
+\__deprecation_old:Nnn \scan_align_safe_stop:
{ protected~commands } { 2017-01-01 }
-\__kernel_deprecation_error:Nnn \sort_ordered:
- { \sort_return_same: } { 2018-12-27 }
-\__kernel_deprecation_error:Nnn \sort_reversed:
- { \sort_return_swapped: } { 2018-12-27 }
-\__kernel_deprecation_error:Nnn \str_case:nnn
+\__deprecation_old:Nnn \str_case:nnn
{ \str_case:nnF } { 2015-07-14 }
-\__kernel_deprecation_error:Nnn \str_case:onn
+\__deprecation_old:Nnn \str_case:onn
{ \str_case:onF } { 2015-07-14 }
-\__kernel_deprecation_error:Nnn \str_case_x:nnn
+\__deprecation_old:Nnn \str_case_x:nnn
{ \str_case_e:nnF } { 2015-07-14 }
-\__kernel_deprecation_error:Nnn \tl_case:cnn
+\__deprecation_old:Nnn \tl_case:cnn
{ \tl_case:cnF } { 2015-07-14 }
-\__kernel_deprecation_error:Nnn \tl_case:Nnn
+\__deprecation_old:Nnn \tl_case:Nnn
{ \tl_case:NnF } { 2015-07-14 }
-\__kernel_deprecation_error:Nnn \tl_to_lowercase:n
+\__deprecation_old_protected:Nnn \tl_to_lowercase:n
{ \tex_lowercase:D } { 2018-03-05 }
-\__kernel_deprecation_error:Nnn \tl_to_uppercase:n
+\__deprecation_old_protected:Nnn \tl_to_uppercase:n
{ \tex_uppercase:D } { 2018-03-05 }
-\__kernel_deprecation_error:Nnn \token_new:Nn
- { \cs_new_eq:NN } { 2018-12-29 }
-\__kernel_deprecation_error:Nnn \xetex_if_engine_p:
+\__deprecation_old:Nnn \xetex_if_engine_p:
{ \sys_if_engine_xetex_p: } { 2017-01-01 }
-\__kernel_deprecation_error:Nnn \xetex_if_engine:F
+\__deprecation_old:Nnn \xetex_if_engine:F
{ \sys_if_engine_xetex:F } { 2017-01-01 }
-\__kernel_deprecation_error:Nnn \xetex_if_engine:T
+\__deprecation_old:Nnn \xetex_if_engine:T
{ \sys_if_engine_xetex:T } { 2017-01-01 }
-\__kernel_deprecation_error:Nnn \xetex_if_engine:TF
+\__deprecation_old:Nnn \xetex_if_engine:TF
{ \sys_if_engine_xetex:TF } { 2017-01-01 }
\cs_new_protected:Npn \__deprecation_primitive:NN #1#2 { }
\exp_last_unbraced:NNNNo
@@ -27913,7 +27834,7 @@
\__deprecation_primitive:w { \cs_to_str:N #2 }
}
}
- { 2019-12-31 }
+ { 2020-01-01 }
}
\__kernel_primitives:
}
@@ -27928,13 +27849,318 @@
{
\tex_let:D #2 #1
\cs_if_exist:cT { tex_ \cs_to_str:N #1 :D }
+ { \cs_set_eq:Nc #2 { tex_ \cs_to_str:N #1 :D } }
+ }
+ \__kernel_primitives:
+ }
+\__kernel_patch_deprecation:nnNNpn
+ { 2019-01-01 } { \box_resize_to_wd_and_ht_plus_dp:Nnn }
+\cs_new_protected:Npn \box_resize:Nnn
+ { \box_resize_to_wd_and_ht_plus_dp:Nnn }
+\__kernel_patch_deprecation:nnNNpn
+ { 2019-01-01 } { \box_resize_to_wd_and_ht_plus_dp:cnn }
+\cs_new_protected:Npn \box_resize:cnn
+ { \box_resize_to_wd_and_ht_plus_dp:cnn }
+\__kernel_patch_deprecation:nnNNpn { 2019-01-01 } { \box_use_drop:N }
+\cs_new_protected:Npn \box_use_clear:N { \box_use_drop:N }
+\__kernel_patch_deprecation:nnNNpn { 2019-01-01 } { \box_use_drop:c }
+\cs_new_protected:Npn \box_use_clear:c { \box_use_drop:c }
+\__kernel_patch_deprecation:nnNNpn { 2021-01-01 } { \box_set_eq_drop:N }
+\cs_new_protected:Npn \box_set_eq_clear:NN #1#2
+ { \tex_setbox:D #1 \tex_box:D #2 }
+\__kernel_patch_deprecation:nnNNpn { 2021-01-01 } { \box_gset_eq_drop:N }
+\cs_new_protected:Npn \box_gset_eq_clear:NN #1#2
+ { \tex_global:D \tex_setbox:D #1 \tex_box:D #2 }
+\cs_generate_variant:Nn \box_set_eq_clear:NN { c , Nc , cc }
+\cs_generate_variant:Nn \box_gset_eq_clear:NN { c , Nc , cc }
+\__kernel_patch_deprecation:nnNNpn { 2021-01-01 } { \hbox_unpack_drop:N }
+\cs_new_protected:Npn \hbox_unpack_clear:N
+ { \hbox_unpack_drop:N }
+\cs_generate_variant:Nn \hbox_unpack_clear:N { c }
+\__kernel_patch_deprecation:nnNNpn { 2021-01-01 } { \vbox_unpack_drop:N }
+\cs_new_protected:Npn \vbox_unpack_clear:N
+ { \vbox_unpack_drop:N }
+\cs_generate_variant:Nn \vbox_unpack_clear:N { c }
+\__kernel_deprecation_code:nn
+ {
+ \tex_let:D \g_file_current_name_tl \scan_stop:
+ \__kernel_deprecation_error:Nnn \g_file_current_name_tl
+ { \g_file_curr_name_str } { 2019-01-01 }
+ }
+ {
+ \tex_let:D \g_file_current_name_tl \scan_stop:
+ \cs_set_nopar:Npn \g_file_current_name_tl { \g_file_curr_name_str }
+ }
+\__deprecation_not_yet_deprecated:nTF { 2019-01-01 }
+ {
+ \tl_new:N \g_file_current_name_tl
+ \tl_gset:Nn \g_file_current_name_tl { \g_file_curr_name_str }
+ }
+ {
+ \cs_gset_nopar:Npn \g_file_current_name_tl
+ {
+ \__kernel_msg_expandable_error:nnnnn
+ { kernel } { deprecated-command }
+ { 2019-01-01 } { \g_file_current_name_tl } { \g_file_curr_name_str }
+ }
+ }
+\__kernel_patch_deprecation:nnNNpn
+ { 2019-01-01 } { \seq_put_right:Nn \l_file_search_path_seq }
+\cs_new_protected:Npn \file_path_include:n #1
+ {
+ \__kernel_file_name_sanitize:nN {#1} \l__file_full_name_str
+ \seq_if_in:NVF \l_file_search_path_seq \l__file_full_name_str
+ { \seq_put_right:NV \l_file_search_path_seq \l__file_full_name_str }
+ }
+\__kernel_patch_deprecation:nnNNpn
+ { 2019-01-01 } { \seq_remove_all:Nn \l_file_search_path_seq }
+\cs_new_protected:Npn \file_path_remove:n #1
+ {
+ \__kernel_file_name_sanitize:nN {#1} \l__file_full_name_str
+ \seq_remove_all:NV \l_file_search_path_seq \l__file_full_name_str
+ }
+\__kernel_patch_deprecation:nnNNpn { 2019-01-01 } { \file_get_full_name:nN }
+\cs_new_protected:Npn \file_add_path:nN #1#2
+ {
+ \file_get_full_name:nN {#1} #2
+ \str_if_empty:NT #2
+ { \tl_set:Nn #2 { \q_no_value } }
+ }
+\__kernel_patch_deprecation:nnNNpn { 2019-01-01 } { \file_log_list: }
+\cs_new_protected:Npn \file_list: { \file_log_list: }
+\__kernel_patch_deprecation:nnNNpn { 2019-01-01 } { \ior_show_list: }
+\cs_new_protected:Npn \ior_list_streams: { \ior_show_list: }
+\__kernel_patch_deprecation:nnNNpn { 2019-01-01 } { \ior_log_list: }
+\cs_new_protected:Npn \ior_log_streams: { \ior_log_list: }
+\__kernel_patch_deprecation:nnNNpn { 2019-01-01 } { \iow_show_list: }
+\cs_new_protected:Npn \iow_list_streams: { \iow_show_list: }
+\__kernel_patch_deprecation:nnNNpn { 2019-01-01 } { \iow_log_list: }
+\cs_new_protected:Npn \iow_log_streams: { \iow_log_list: }
+\int_const:Nn \c__deprecation_minus_one { -1 }
+\__kernel_deprecation_code:nn
+ {
+ \tex_let:D \c_minus_one \scan_stop:
+ \__kernel_deprecation_error:Nnn \c_minus_one { -1 } { 2019-01-01 }
+ }
+ {
+ \tex_let:D \c_minus_one \scan_stop:
+ \cs_set_eq:NN \c_minus_one \c__deprecation_minus_one
+ }
+\__deprecation_not_yet_deprecated:nTF { 2019-01-01 }
+ { \cs_new_eq:NN \c_minus_one \c__deprecation_minus_one }
+ {
+ \cs_gset_nopar:Npn \c_minus_one
+ {
+ \__kernel_msg_expandable_error:nnnnn
+ { kernel } { deprecated-command }
+ { 2019-01-01 } { \c_minus_one } { -1 }
+ \c__deprecation_minus_one
+ }
+ }
+\cs_new_protected:Npn \__int_deprecated_constants:nn #1#2
+ {
+ #1 \c_zero { 0 } #2
+ #1 \c_one { 1 } #2
+ #1 \c_two { 2 } #2
+ #1 \c_three { 3 } #2
+ #1 \c_four { 4 } #2
+ #1 \c_five { 5 } #2
+ #1 \c_six { 6 } #2
+ #1 \c_seven { 7 } #2
+ #1 \c_eight { 8 } #2
+ #1 \c_nine { 9 } #2
+ #1 \c_ten { 10 } #2
+ #1 \c_eleven { 11 } #2
+ #1 \c_twelve { 12 } #2
+ #1 \c_thirteen { 13 } #2
+ #1 \c_fourteen { 14 } #2
+ #1 \c_fifteen { 15 } #2
+ #1 \c_sixteen { 16 } #2
+ #1 \c_thirty_two { 32 } #2
+ #1 \c_one_hundred { 100 } #2
+ #1 \c_two_hundred_fifty_five { 255 } #2
+ #1 \c_two_hundred_fifty_six { 256 } #2
+ #1 \c_one_thousand { 1000 } #2
+ #1 \c_ten_thousand { 10000 } #2
+ }
+\__int_deprecated_constants:nn { \int_const:Nn } { }
+\__kernel_deprecation_code:nn
+ {
+ \__int_deprecated_constants:nn
+ { \exp_after:wN \__kernel_deprecation_error:Nnn \exp_not:N }
+ { { 2020-01-01 } }
+ }
+ {
+ \__int_deprecated_constants:nn
+ {
+ \exp_after:wN \use:nnn
+ \exp_after:wN \__int_constdef:Nw \exp_not:N
+ }
+ { \exp_stop_f: }
+ }
+\cs_new_eq:NN \__int_value:w \int_value:w
+\__kernel_patch_deprecation:nnNNpn { 2020-01-01 } { \lua_now:e }
+\cs_new:Npn \lua_now_x:n #1 { \__lua_now:n {#1} }
+\__kernel_patch_deprecation:nnNNpn { 2020-01-01 } { \lua_escape:e }
+\cs_new:Npn \lua_escape_x:n #1 { \__lua_escape:n {#1} }
+\__kernel_patch_deprecation:nnNNpn { 2020-01-01 } { \lua_shipout_e:n }
+\cs_new_protected:Npn \lua_shipout_x:n #1 { \__lua_shipout:n {#1} }
+\__kernel_patch_deprecation:nnNNpn { 2020-01-01 } { \iow_log:n }
+\cs_new_protected:Npn \msg_log:n #1
+ {
+ \iow_log:n { ................................................. }
+ \iow_wrap:nnnN { . ~ #1} { . ~ } { } \iow_log:n
+ \iow_log:n { ................................................. }
+ }
+\__kernel_patch_deprecation:nnNNpn { 2020-01-01 } { \iow_term:n }
+\cs_new_protected:Npn \msg_term:n #1
+ {
+ \iow_term:n { ************************************************* }
+ \iow_wrap:nnnN { * ~ #1} { * ~ } { } \iow_term:n
+ \iow_term:n { ************************************************* }
+ }
+\__kernel_patch_deprecation:nnNNpn { 2020-01-01 } { [Defined~error~message] }
+\cs_new_protected:Npn \msg_interrupt:nnn #1#2#3
+ {
+ \tl_if_empty:nTF {#3}
+ {
+ \__msg_old_interrupt_wrap:nn { \\ \c__msg_no_info_text_tl }
+ {#1 \\\\ #2 \\\\ \c__msg_continue_text_tl }
+ }
+ {
+ \__msg_old_interrupt_wrap:nn { \\ #3 }
+ {#1 \\\\ #2 \\\\ \c__msg_help_text_tl }
+ }
+ }
+\cs_new_protected:Npn \__msg_old_interrupt_wrap:nn #1#2
+ {
+ \iow_wrap:nnnN {#1} { | ~ } { } \__msg_old_interrupt_more_text:n
+ \iow_wrap:nnnN {#2} { ! ~ } { } \__msg_old_interrupt_text:n
+ }
+\cs_new_protected:Npn \__msg_old_interrupt_more_text:n #1
+ {
+ \exp_args:Nx \tex_errhelp:D
+ {
+ |'''''''''''''''''''''''''''''''''''''''''''''''
+ #1 \iow_newline:
+ |...............................................
+ }
+ }
+\group_begin:
+ \char_set_lccode:nn {`\{} {`\ }
+ \char_set_lccode:nn {`\}} {`\ }
+ \char_set_lccode:nn {`\&} {`\!}
+ \char_set_catcode_active:N \&
+\tex_lowercase:D
+ {
+ \group_end:
+ \cs_new_protected:Npn \__msg_old_interrupt_text:n #1
+ {
+ \iow_term:x
+ {
+ \iow_newline:
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ \iow_newline:
+ !
+ }
+ \__kernel_iow_with:Nnn \tex_newlinechar:D { `\^^J }
{
- \exp_args:NNc \cs_set_eq:NN #2
- { tex_ \cs_to_str:N #1 :D }
+ \__kernel_iow_with:Nnn \tex_errorcontextlines:D { -1 }
+ {
+ \group_begin:
+ \cs_set_protected:Npn &
+ {
+ \tex_errmessage:D
+ {
+ #1
+ \use_none:n
+ { ............................................ }
+ }
+ }
+ \exp_after:wN
+ \group_end:
+ &
+ }
}
}
- \__kernel_primitives:
}
+\__kernel_patch_deprecation:nnNNpn { 2020-01-01 } { \prg_break_point:Nn }
+\cs_new:Npn \__prg_break_point:Nn { \prg_break_point:Nn }
+\__kernel_patch_deprecation:nnNNpn { 2020-01-01 } { \prg_break_point: }
+\cs_new:Npn \__prg_break_point: { \prg_break_point: }
+\__kernel_patch_deprecation:nnNNpn { 2020-01-01 } { \prg_map_break:Nn }
+\cs_new:Npn \__prg_map_break:Nn #1 \__prg_break_point:Nn
+ { \prg_map_break:Nn #1 \prg_break_point:Nn }
+\__kernel_patch_deprecation:nnNNpn { 2020-01-01 } { \prg_break: }
+\cs_new:Npn \__prg_break: #1 \__prg_break_point: { }
+\__kernel_patch_deprecation:nnNNpn { 2020-01-01 } { \prg_break:n }
+\cs_new:Npn \__prg_break:n #1#2 \__prg_break_point: {#1}
+\__kernel_patch_deprecation:nnNNpn { 2019-01-01 } { \sort_return_same: }
+\cs_new_protected:Npn \sort_ordered: { \sort_return_same: }
+\__kernel_patch_deprecation:nnNNpn { 2019-01-01 } { \sort_return_swapped: }
+\cs_new_protected:Npn \sort_reversed: { \sort_return_swapped: }
+\__kernel_patch_deprecation:nnNNpn { 2020-01-01 } { \str_case_e:nn }
+\cs_new:Npn \str_case_x:nn { \str_case_e:nn }
+\__kernel_patch_deprecation:nnNNpn { 2020-01-01 } { \str_case_e:nnT }
+\cs_new:Npn \str_case_x:nnT { \str_case_e:nnT }
+\__kernel_patch_deprecation:nnNNpn { 2020-01-01 } { \str_case_e:nnF }
+\cs_new:Npn \str_case_x:nnF { \str_case_e:nnF }
+\__kernel_patch_deprecation:nnNNpn { 2020-01-01 } { \str_case_e:nnTF }
+\cs_new:Npn \str_case_x:nnTF { \str_case_e:nnTF }
+\__kernel_patch_deprecation:nnNNpn { 2020-01-01 } { \str_if_eq_p:ee }
+\cs_new:Npn \str_if_eq_x_p:nn { \str_if_eq_p:ee }
+\__kernel_patch_deprecation:nnNNpn { 2020-01-01 } { \str_if_eq:eeT }
+\cs_new:Npn \str_if_eq_x:nnT { \str_if_eq:eeT }
+\__kernel_patch_deprecation:nnNNpn { 2020-01-01 } { \str_if_eq:eeF }
+\cs_new:Npn \str_if_eq_x:nnF { \str_if_eq:eeF }
+\__kernel_patch_deprecation:nnNNpn { 2020-01-01 } { \str_if_eq:eeTF }
+\cs_new:Npn \str_if_eq_x:nnTF { \str_if_eq:eeTF }
+\__kernel_patch_deprecation:nnNNpn { 2021-01-01 } { \file_get:nnN }
+\cs_new_protected:Npn \tl_set_from_file:Nnn #1#2#3
+ { \file_get:nnN {#3} {#2} #1 }
+\cs_generate_variant:Nn \tl_set_from_file:Nnn { c }
+\__kernel_patch_deprecation:nnNNpn { 2021-01-01 } { \file_get:nnN }
+\cs_new_protected:Npn \tl_gset_from_file:Nnn #1#2#3
+ {
+ \group_begin:
+ \file_get:nnN {#3} {#2} \l__tl_internal_a_tl
+ \tl_gset_eq:NN #1 \l__tl_internal_a_tl
+ \group_end:
+ }
+\cs_generate_variant:Nn \tl_gset_from_file:Nnn { c }
+\__kernel_patch_deprecation:nnNNpn { 2021-01-01 } { \file_get:nnN }
+\cs_new_protected:Npn \tl_set_from_file_x:Nnn #1#2#3
+ {
+ \group_begin:
+ \file_get:nnN {#3} {#2} \l__tl_internal_a_tl
+ #2 \scan_stop:
+ \tl_set:Nx \l__tl_internal_a_tl { \l__tl_internal_a_tl }
+ \exp_args:NNNo \group_end:
+ \tl_set:Nn #1 \l__tl_internal_a_tl
+ }
+\cs_generate_variant:Nn \tl_set_from_file_x:Nnn { c }
+\__kernel_patch_deprecation:nnNNpn { 2021-01-01 } { \file_get:nnN }
+\cs_new_protected:Npn \tl_gset_from_file_x:Nnn #1#2#3
+ {
+ \group_begin:
+ \file_get:nnN {#3} {#2} \l__tl_internal_a_tl
+ #2 \scan_stop:
+ \tl_gset:Nx #1 { \l__tl_internal_a_tl }
+ \group_end:
+ }
+\cs_generate_variant:Nn \tl_gset_from_file_x:Nnn { c }
+\__kernel_patch_deprecation:nnNNpn { 2020-01-01 } { \tl_analysis_show:N }
+\cs_new_protected:Npn \tl_show_analysis:N { \tl_analysis_show:N }
+\__kernel_patch_deprecation:nnNNpn { 2020-01-01 } { \tl_analysis_show:n }
+\cs_new_protected:Npn \tl_show_analysis:n { \tl_analysis_show:n }
+\__kernel_patch_deprecation:nnNNpn { 2019-01-01 } { \cs_new_eq:NN }
+\cs_new_protected:Npn \token_new:Nn #1#2 { \cs_new_eq:NN #1 #2 }
+\__kernel_patch_deprecation:nnNNpn { 2021-01-01 } { \cs_prefix_spec:N }
+\cs_new:Npn \token_get_prefix_spec:N { \cs_prefix_spec:N }
+\__kernel_patch_deprecation:nnNNpn { 2021-01-01 } { \cs_argument_spec:N }
+\cs_new:Npn \token_get_arg_spec:N { \cs_argument_spec:N }
+\__kernel_patch_deprecation:nnNNpn { 2021-01-01 } { \cs_replacement_spec:N }
+\cs_new:Npn \token_get_replacement_spec:N { \cs_replacement_spec:N }
%%
%%
%% End of file `expl3-code.tex'.
diff --git a/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex b/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex
index e7d654d6a8a..ee02f8c923b 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{2019-02-15}%
+\def\ExplFileDate{2019-03-05}%
\let\ExplLoaderFileDate\ExplFileDate
\begingroup
\def\tempa{LaTeX2e}%
@@ -57,6 +57,7 @@
\noexpand\undefined
}%
\catcode64=11 %
+\chardef \l@expl@undo@recent@deprecations@bool = 0 %
\chardef \l@expl@check@declarations@bool = 0 %
\chardef \l@expl@log@functions@bool = 0 %
\chardef \l@expl@enable@debug@bool = 0 %
diff --git a/Master/texmf-dist/tex/latex/l3kernel/expl3.sty b/Master/texmf-dist/tex/latex/l3kernel/expl3.sty
index d769fe86182..d6a741242d5 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{2019-02-15}%
+\def\ExplFileDate{2019-03-05}%
\let\ExplLoaderFileDate\ExplFileDate
\ProvidesPackage{expl3}
[%
@@ -34,6 +34,8 @@
\newcommand*#2{}%
\chardef #2=0 %
}%
+\expl@create@bool@option
+ {undo-recent-deprecations}\l@expl@undo@recent@deprecations@bool
\expl@create@bool@option{check-declarations}\l@expl@check@declarations@bool
\expl@create@bool@option{log-functions}\l@expl@log@functions@bool
\expl@create@bool@option{enable-debug}\l@expl@enable@debug@bool
@@ -78,11 +80,6 @@
\expandafter\ifx\csname tex\string _let:D\endcsname\relax
\expandafter\endinput
\fi
-\AtBeginDocument
- {
- \cs_if_exist:NF \color
- { \DeclareRobustCommand \color [2] [ ] { } }
- }
\__kernel_msg_new:nnnn { expl } { wrong-driver }
{ Driver~request~inconsistent~with~engine:~using~'#2'~driver. }
{
@@ -212,6 +209,7 @@
}
\keys_define:nn { expl }
{
+ undo-recent-deprecations .bool_set:N = \l@expl@undo@recent@deprecations@bool,
check-declarations .bool_set:N = \l@expl@check@declarations@bool,
log-functions .bool_set:N = \l@expl@log@functions@bool
}
diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3doc.cls b/Master/texmf-dist/tex/latex/l3kernel/l3doc.cls
index cf71077feaf..ed111045fbf 100644
--- a/Master/texmf-dist/tex/latex/l3kernel/l3doc.cls
+++ b/Master/texmf-dist/tex/latex/l3kernel/l3doc.cls
@@ -58,6 +58,7 @@
\bool_new:N \g__codedoc_checktest_bool
\bool_new:N \g__codedoc_kernel_bool
\bool_new:N \g__codedoc_cs_break_bool
+\bool_new:N \g__codedoc_show_notes_bool
\bool_gset_true:N \g__codedoc_cs_break_bool
\tl_new:N \l__codedoc_tmpa_tl
\tl_new:N \l__codedoc_tmpb_tl
@@ -424,6 +425,10 @@
{ \bool_gset_false:N \g__codedoc_cs_break_bool }
\DeclareOption { cs-break-nohyphen }
{ \PassOptionsToPackage{nohyphen}{underscore} }
+\DeclareOption { show-notes }
+ { \bool_gset_true:N \g__codedoc_show_notes_bool }
+\DeclareOption { hide-notes }
+ { \bool_gset_false:N \g__codedoc_show_notes_bool }
\DeclareOption* { \PassOptionsToClass { \CurrentOption } { article } }
\ExecuteOptions { full, kernel, nocheck, nochecktest, lm-default }
\PassOptionsToClass { a4paper } { article }
@@ -650,6 +655,7 @@
\NewDocumentCommand { \CodedocExplainEXP } { }
{
\raisebox{\baselineskip}[0pt][0pt]{\hypertarget{expstar}{}}%
+ \write \@auxout { \def \string \Codedoc@expstar { } }
\__codedoc_typeset_exp:\ indicates~fully~expandable~functions,~which~
can~be~used~within~an~\texttt{x}-type~argument~(in~plain~
\TeX{}~terms,~inside~an~\cs{edef}),~as~well~as~within~an~
@@ -658,6 +664,7 @@
\NewDocumentCommand { \CodedocExplainREXP } { }
{
\raisebox{\baselineskip}[0pt][0pt]{\hypertarget{rexpstar}{}}%
+ \write \@auxout { \def \string \Codedoc@rexpstar { } }
\__codedoc_typeset_rexp:\ indicates~
restricted~expandable~functions,~which~can~be~used~within~an~
\texttt{x}-type~argument~but~cannot~be~fully~expanded~within~an~
@@ -666,6 +673,7 @@
\NewDocumentCommand { \CodedocExplainTF } { }
{
\raisebox{\baselineskip}[0pt][0pt]{\hypertarget{explTF}{}}%
+ \write \@auxout { \def \string \Codedoc@explTF { } }
\__codedoc_typeset_TF:\ indicates~conditional~(\texttt{if})~functions~
whose~variants~with~\texttt{T},~\texttt{F}~and~\texttt{TF}~
argument~specifiers~expect~different~
@@ -765,18 +773,30 @@
\ensuremath \rangle
}
\cs_new_protected:Npn \__codedoc_typeset_exp:
- { \hyperlink{expstar} {$\star$} }
+ {
+ \cs_if_exist:NTF \Codedoc@expstar
+ { \hyperlink { expstar } }
+ { \mbox }
+ {$\star$}
+ }
\cs_new_protected:Npn \__codedoc_typeset_rexp:
- { \hyperlink{rexpstar} {\ding{73}} } % hollow star
+ {
+ \cs_if_exist:NTF \Codedoc@rexpstar
+ { \hyperlink { rexpstar } }
+ { \mbox }
+ { \ding { 73 } } % hollow star
+ }
\cs_new_protected:Npn \__codedoc_typeset_TF:
{
- \hyperlink{explTF}
+ \cs_if_exist:NTF \Codedoc@explTF
+ { \hyperlink { explTF } }
+ { \mbox }
{
\color{black}
\itshape TF
\makebox[0pt][r]
{
- \color{red}
+ \cs_if_exist:NT \Codedoc@explTF { \color{red} }
\underline { \phantom{\itshape TF} \kern-0.1em }
}
}
@@ -997,7 +1017,7 @@
{
\__codedoc_date_set:Nn #1 {#2}
\exp_args:No \__codedoc_date_compare:nNnT
- {#1} > { \tex_year:D - \tex_month:D - \tex_day:D }
+ {#1} > { \c_sys_year_int - \c_sys_month_int - \c_sys_day_int }
{
\msg_error:nnxx { l3doc } { future-date }
{ \tl_to_str:N \l__codedoc_macro_argument_tl }
@@ -1008,7 +1028,7 @@
{
\__codedoc_date_set:Nn \l__codedoc_tmpa_tl {#1}
\exp_args:No \__codedoc_date_compare:nNnT
- { \l__codedoc_tmpa_tl } < { \tex_year:D - \tex_month:D - \tex_day:D }
+ { \l__codedoc_tmpa_tl } < { \c_sys_year_int - \c_sys_month_int - \c_sys_day_int }
{
\msg_error:nnxx { l3doc } { deprecated-function }
{ \tl_to_str:N \l__codedoc_macro_argument_tl }
@@ -1042,6 +1062,7 @@
\cs_new_protected:Npn \__codedoc_function_typeset_stop:
{
\par
+ \dim_set:Nn \prevdepth { \box_dp:N \l__codedoc_descr_coffin }
\allowbreak
}
\cs_new_protected:Npn \__codedoc_function_init:
@@ -1670,6 +1691,31 @@
}{
\par\end{trivlist}
}
+\bool_if:NTF \g__codedoc_show_notes_bool
+ {
+ \NewDocumentCommand\NB{mm}
+ {
+ (\emph{Note}\footnote{\ttfamily [#1]:~\detokenize{#2}})
+ }
+ }
+ {
+ \NewDocumentCommand\NB{mm}{}
+ }
+\bool_if:NTF \g__codedoc_show_notes_bool
+ {
+ \NewDocumentEnvironment{NOTE}{m}
+ {
+ \par\noindent (\emph{Note}~[\texttt{#1}]:\par
+ \verbatim
+ }
+ {
+ \endverbatim
+ \par\noindent \emph{Note~end})\par
+ }
+ }
+ {
+ \NewDocumentEnvironment{NOTE}{m}{\comment}{\endcomment}
+ }
\newenvironment{TemplateInterfaceDescription}[1]
{
\subsection{The~object~type~`#1'}
@@ -1891,7 +1937,7 @@
\__codedoc_replace_at_at:N \l__codedoc_tmpa_tl
\tl_gset:Nn \g__codedoc_module_name_tl {#2}
- \tl_put_right:Nn \l__codedoc_tmpa_tl { < @ @ = #2 > }
+ \tl_put_right:Nn \l__codedoc_tmpa_tl { < \text { \verbatim@font @ @ = #2 } > }
\tl_set:Nn \l__codedoc_tmpb_tl {#3}
\__codedoc_detect_internals:N \l__codedoc_tmpb_tl
diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3dvipdfmx.def b/Master/texmf-dist/tex/latex/l3kernel/l3dvipdfmx.def
index 9c6af22ed72..f0b91117adb 100644
--- a/Master/texmf-dist/tex/latex/l3kernel/l3dvipdfmx.def
+++ b/Master/texmf-dist/tex/latex/l3kernel/l3dvipdfmx.def
@@ -20,7 +20,7 @@
%%
%% File: l3drivers.dtx
\ProvidesExplFile
- {l3dvipdfmx.def}{2019-02-15}{}
+ {l3dvipdfmx.def}{2019-03-05}{}
{L3 Experimental driver: dvipdfmx}
\cs_new_eq:NN \__driver_literal:e \tex_special:D
\cs_new_protected:Npn \__driver_literal:n #1
diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3dvips.def b/Master/texmf-dist/tex/latex/l3kernel/l3dvips.def
index dd10a02d9f9..a8719c0ded7 100644
--- a/Master/texmf-dist/tex/latex/l3kernel/l3dvips.def
+++ b/Master/texmf-dist/tex/latex/l3kernel/l3dvips.def
@@ -20,7 +20,7 @@
%%
%% File: l3drivers.dtx
\ProvidesExplFile
- {l3dvips.def}{2019-02-15}{}
+ {l3dvips.def}{2019-03-05}{}
{L3 Experimental driver: dvips}
\cs_new_eq:NN \__driver_literal:e \tex_special:D
\cs_new_protected:Npn \__driver_literal:n #1
diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3dvisvgm.def b/Master/texmf-dist/tex/latex/l3kernel/l3dvisvgm.def
index b6abca2dd71..c5f50b3138c 100644
--- a/Master/texmf-dist/tex/latex/l3kernel/l3dvisvgm.def
+++ b/Master/texmf-dist/tex/latex/l3kernel/l3dvisvgm.def
@@ -20,7 +20,7 @@
%%
%% File: l3drivers.dtx
\ProvidesExplFile
- {l3dvisvgm.def}{2019-02-15}{}
+ {l3dvisvgm.def}{2019-03-05}{}
{L3 Experimental driver: dvisvgm}
\cs_new_eq:NN \__driver_literal:e \tex_special:D
\cs_new_protected:Npn \__driver_literal:n #1
diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3pdfmode.def b/Master/texmf-dist/tex/latex/l3kernel/l3pdfmode.def
index 997a498f6f6..5e92232db36 100644
--- a/Master/texmf-dist/tex/latex/l3kernel/l3pdfmode.def
+++ b/Master/texmf-dist/tex/latex/l3kernel/l3pdfmode.def
@@ -20,7 +20,7 @@
%%
%% File: l3drivers.dtx
\ProvidesExplFile
- {l3pdfmode.def}{2019-02-15}{}
+ {l3pdfmode.def}{2019-03-05}{}
{L3 Experimental driver: PDF mode}
\cs_new_eq:NN \__driver_literal:e \tex_special:D
\cs_new_protected:Npn \__driver_literal:n #1
diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3xdvipdfmx.def b/Master/texmf-dist/tex/latex/l3kernel/l3xdvipdfmx.def
index 2684228d0c7..e27e4235ea5 100644
--- a/Master/texmf-dist/tex/latex/l3kernel/l3xdvipdfmx.def
+++ b/Master/texmf-dist/tex/latex/l3kernel/l3xdvipdfmx.def
@@ -20,7 +20,7 @@
%%
%% File: l3drivers.dtx
\ProvidesExplFile
- {l3xdvipdfmx.def}{2019-02-15}{}
+ {l3xdvipdfmx.def}{2019-03-05}{}
{L3 Experimental driver: xdvipdfmx}
\cs_new_eq:NN \__driver_literal:e \tex_special:D
\cs_new_protected:Npn \__driver_literal:n #1