diff options
author | Karl Berry <karl@freefriends.org> | 2019-03-05 22:35:14 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2019-03-05 22:35:14 +0000 |
commit | 68872ff6a2a91fa0e84763fc9316493d82075c95 (patch) | |
tree | 0546ec4c414553802e31a423aec44f74d252f645 /Master/texmf-dist/tex/latex/l3kernel | |
parent | 541c4ddf7c5b402b9cfe8af5ef4e49ffa15d3e83 (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.tex | 2028 | ||||
-rw-r--r-- | Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex | 3 | ||||
-rw-r--r-- | Master/texmf-dist/tex/latex/l3kernel/expl3.sty | 10 | ||||
-rw-r--r-- | Master/texmf-dist/tex/latex/l3kernel/l3doc.cls | 60 | ||||
-rw-r--r-- | Master/texmf-dist/tex/latex/l3kernel/l3dvipdfmx.def | 2 | ||||
-rw-r--r-- | Master/texmf-dist/tex/latex/l3kernel/l3dvips.def | 2 | ||||
-rw-r--r-- | Master/texmf-dist/tex/latex/l3kernel/l3dvisvgm.def | 2 | ||||
-rw-r--r-- | Master/texmf-dist/tex/latex/l3kernel/l3pdfmode.def | 2 | ||||
-rw-r--r-- | Master/texmf-dist/tex/latex/l3kernel/l3xdvipdfmx.def | 2 |
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 |