diff options
author | Karl Berry <karl@freefriends.org> | 2019-05-28 21:24:36 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2019-05-28 21:24:36 +0000 |
commit | 0411921af7908fa9daf388b67db154e9fc51caca (patch) | |
tree | f5405f2fef2bc7b0ae9eb9c8809377b88d70c760 /Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex | |
parent | c55b67ba30f320ddfc93fbdca08cab7512704011 (diff) |
l3 (28may19)
git-svn-id: svn://tug.org/texlive/trunk@51248 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex')
-rw-r--r-- | Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex | 137 |
1 files changed, 118 insertions, 19 deletions
diff --git a/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex b/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex index cd2f1013847..dbdc37c17f5 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex +++ b/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex @@ -64,7 +64,7 @@ %% and all files in that bundle must be distributed together. %% %% File: expl3.dtx -\def\ExplFileDate{2019-05-09}% +\def\ExplFileDate{2019-05-28}% \begingroup \def\next{\endgroup}% \expandafter\ifx\csname PackageError\endcsname\relax @@ -14156,6 +14156,7 @@ \int_const:Nn \c__fp_prec_hatii_int { 14 } \int_const:Nn \c__fp_prec_hat_int { 13 } \int_const:Nn \c__fp_prec_not_int { 12 } +\int_const:Nn \c__fp_prec_juxt_int { 11 } \int_const:Nn \c__fp_prec_times_int { 10 } \int_const:Nn \c__fp_prec_plus_int { 9 } \int_const:Nn \c__fp_prec_comp_int { 7 } @@ -14874,7 +14875,7 @@ { \exp_not:N \__fp_exp_after_array_f:w #2 \s__fp_stop \exp_not:N \exp_after:wN - \exp_not:N \__fp_parse_infix:NN + \exp_not:N \__fp_parse_infix_after_paren:NN \exp_not:N \exp_after:wN #1 \exp_not:N \exp:w \exp_not:N \__fp_parse_expand:w @@ -14900,7 +14901,7 @@ \fi: \exp_end_continue_f:w \fi: - \__fp_parse_infix:NN #1 ) + \__fp_parse_infix_after_paren:NN #1 ) } \cs_set_protected:Npn \__fp_tmp:w #1 #2 { @@ -15071,7 +15072,7 @@ \exp_after:wN \__fp_parse_infix_mark:NNN \else: \exp_after:wN \exp_after:wN - \exp_after:wN \__fp_parse_infix_mul:N + \exp_after:wN \__fp_parse_infix_juxt:N \fi: \else: \if_int_compare:w @@ -15079,7 +15080,7 @@ ( `#2 \if_int_compare:w `#2 > `Z - 32 \fi: ) / 26 = 3 \exp_stop_f: \exp_after:wN \exp_after:wN - \exp_after:wN \__fp_parse_infix_mul:N + \exp_after:wN \__fp_parse_infix_juxt:N \else: \exp_after:wN \__fp_parse_infix_check:NNN \cs:w @@ -15091,22 +15092,49 @@ #1 #2 } -\cs_new:Npx \__fp_parse_infix_check:NNN #1#2#3 +\cs_new:Npn \__fp_parse_infix_check:NNN #1#2#3 { - \exp_not:N \if_meaning:w \scan_stop: #1 - \exp_not:N \__kernel_msg_expandable_error:nnn + \if_meaning:w \scan_stop: #1 + \__kernel_msg_expandable_error:nnn { kernel } { fp-missing } { * } - \exp_not:N \exp_after:wN - \exp_not:c { __fp_parse_infix_*:N } - \exp_not:N \exp_after:wN #2 - \exp_not:N \exp_after:wN #3 - \exp_not:N \else: - \exp_not:N \exp_after:wN #1 - \exp_not:N \exp_after:wN #2 - \exp_not:N \exp:w - \exp_not:N \exp_after:wN - \exp_not:N \__fp_parse_expand:w - \exp_not:N \fi: + \exp_after:wN \__fp_parse_infix_mul:N + \exp_after:wN #2 + \exp_after:wN #3 + \else: + \exp_after:wN #1 + \exp_after:wN #2 + \exp:w \exp_after:wN \__fp_parse_expand:w + \fi: + } +\cs_new:Npn \__fp_parse_infix_after_paren:NN #1 #2 + { + \if_catcode:w \scan_stop: \exp_not:N #2 + \if_int_compare:w + \__fp_str_if_eq:nn { \s__fp_mark } { \exp_not:N #2 } + = 0 \exp_stop_f: + \exp_after:wN \exp_after:wN + \exp_after:wN \__fp_parse_infix_mark:NNN + \else: + \exp_after:wN \exp_after:wN + \exp_after:wN \__fp_parse_infix_mul:N + \fi: + \else: + \if_int_compare:w + \__fp_int_eval:w + ( `#2 \if_int_compare:w `#2 > `Z - 32 \fi: ) / 26 + = 3 \exp_stop_f: + \exp_after:wN \exp_after:wN + \exp_after:wN \__fp_parse_infix_mul:N + \else: + \exp_after:wN \__fp_parse_infix_check:NNN + \cs:w + __fp_parse_infix_ \token_to_str:N #2 :N + \exp_after:wN \exp_after:wN \exp_after:wN + \cs_end: + \fi: + \fi: + #1 + #2 } \cs_new:Npn \__fp_parse_infix_mark:NNN #1#2#3 { #3 #1 } \cs_new:Npn \__fp_parse_infix_end:N #1 @@ -15183,6 +15211,8 @@ } \exp_args:Nc \__fp_tmp:w { __fp_parse_infix_^:N } ^ \c__fp_prec_hatii_int \c__fp_prec_hat_int +\exp_args:Nc \__fp_tmp:w { __fp_parse_infix_juxt:N } * + \c__fp_prec_juxt_int \c__fp_prec_juxt_int \exp_args:Nc \__fp_tmp:w { __fp_parse_infix_/:N } / \c__fp_prec_times_int \c__fp_prec_times_int \exp_args:Nc \__fp_tmp:w { __fp_parse_infix_mul:N } * @@ -26454,6 +26484,75 @@ { \iow_shipout:Nn \c__sys_shell_stream_int {#1} } } \cs_generate_variant:Nn \sys_shell_shipout:n { x } +\cs_new:Npn \__file_str_cmp:nn #1#2 { \tex_strcmp:D {#1} {#2} } +\sys_if_engine_luatex:T + { + \cs_set:Npn \__file_str_cmp:nn #1#2 + { + \lua_now:e + { + l3kernel.strcmp + ( + " \__file_str_escape:n {#1}", + " \__file_str_escape:n {#2}" + ) + } + } + \cs_new:Npn \__file_str_escape:n #1 + { + \lua_escape:e + { \__kernel_tl_to_str:w \use:e { {#1} } } + } + } +\tl_new:N \l__file_first_tl +\tl_new:N \l__file_second_tl +\prg_new_protected_conditional:Npnn \file_compare_timestamp:nNn #1#2#3 + { T , F , TF } + { + \group_begin: + \file_get_full_name:nNTF {#1} \l__file_first_tl + { + \file_get_full_name:nNTF {#3} \l__file_second_tl + { + \if_int_compare:w + \__file_str_cmp:nn + { \__file_timestamp:n \exp_after:wN { \l__file_first_tl } } + { \__file_timestamp:n \exp_after:wN { \l__file_second_tl } } + #2 0 \exp_stop_f: + \group_end: + \prg_return_true: + \else: + \group_end: + \prg_return_false: + \fi: + } + { + \group_end: + \if_charcode:w #2 > + \prg_return_true: + \else: + \prg_return_false: + \fi: + } + } + { + \group_end: + \if_charcode:w #2 < + \prg_return_true: + \else: + \prg_return_false: + \fi: + } + } +\sys_if_engine_luatex:TF + { + \cs_new:Npn \__file_timestamp:n #1 + { + \lua_now:e + { l3kernel.filemoddate ( " \lua_escape:e {#1} " ) } + } + } + { \cs_new_eq:NN \__file_timestamp:n \tex_filemoddate:D } \cs_new_protected:Npn \ior_shell_open:Nn #1#2 { \sys_if_shell:TF |