summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/l3kernel
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2019-09-06 21:14:35 +0000
committerKarl Berry <karl@freefriends.org>2019-09-06 21:14:35 +0000
commiteb76e93af3b7c53f70f6fd840a6923541250b1ba (patch)
treec2a22c1fab23169e2bd4aaa0e1b6facdfac80a6c /Master/texmf-dist/tex/latex/l3kernel
parent672ea6ad9ccdaf9dd827a8a0d9c41e18a07cc6ab (diff)
l3 (6sep19)
git-svn-id: svn://tug.org/texlive/trunk@52041 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.tex529
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex2
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/expl3.sty2
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3doc.cls5
4 files changed, 379 insertions, 159 deletions
diff --git a/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex b/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex
index 85d7a37dc7f..56c156d337f 100644
--- a/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex
+++ b/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex
@@ -65,7 +65,7 @@
%% and all files in that bundle must be distributed together.
%%
%% File: expl3.dtx
-\def\ExplFileDate{2019-08-25}%
+\def\ExplFileDate{2019-09-05}%
\begingroup
\def\next{\endgroup}%
\expandafter\ifx\csname PackageError\endcsname\relax
@@ -4450,7 +4450,7 @@
\fi:
}
\prg_generate_conditional_variant:Nnn \tl_if_blank:n
- { V , o } { p , T , F , TF }
+ { e , V , o } { p , T , F , TF }
\prg_new_conditional:Npnn \tl_if_empty:N #1 { p , T , F , TF }
{
\if_meaning:w #1 \c_empty_tl
@@ -4630,6 +4630,21 @@
\cs_new_protected:Npn \tl_map_inline:Nn
{ \exp_args:No \tl_map_inline:nn }
\cs_generate_variant:Nn \tl_map_inline:Nn { c }
+\cs_new:Npn \tl_map_tokens:nn #1#2
+ {
+ \__tl_map_tokens:nn {#2} #1
+ \q_recursion_tail
+ \prg_break_point:Nn \tl_map_break: { }
+ }
+\cs_new:Npn \tl_map_tokens:Nn
+ { \exp_args:No \tl_map_tokens:nn }
+\cs_generate_variant:Nn \tl_map_tokens:Nn { c }
+\cs_new:Npn \__tl_map_tokens:nn #1#2
+ {
+ \quark_if_recursion_tail_break:nN {#2} \tl_map_break:
+ \use:n {#1} {#2}
+ \__tl_map_tokens:nn {#1}
+ }
\cs_new_protected:Npn \tl_map_variable:nNn #1#2#3
{
\__tl_map_variable:Nnn #2 {#3} #1
@@ -6312,6 +6327,20 @@
\prg_break_point:Nn \seq_map_break: { \__seq_pop_item_def: }
}
\cs_generate_variant:Nn \seq_map_inline:Nn { c }
+\cs_new:Npn \seq_map_tokens:Nn #1#2
+ {
+ \exp_last_unbraced:Nno
+ \use_i:nn { \__seq_map_tokens:nw {#2} } #1
+ \prg_break: \__seq_item:n { } \prg_break_point:
+ \prg_break_point:Nn \seq_map_break: { }
+ }
+\cs_generate_variant:Nn \seq_map_tokens:Nn { c }
+\cs_new:Npn \__seq_map_tokens:nw #1#2 \__seq_item:n #3
+ {
+ #2
+ \use:n {#1} {#3}
+ \__seq_map_tokens:nw {#1}
+ }
\cs_new_protected:Npn \seq_map_variable:NNn #1#2#3
{
\__seq_push_item_def:x
@@ -9348,6 +9377,20 @@
}
}
\cs_generate_variant:Nn \prop_map_inline:Nn { c }
+\cs_new:Npn \prop_map_tokens:Nn #1#2
+ {
+ \exp_last_unbraced:Nno
+ \use_i:nn { \__prop_map_tokens:nwwn {#2} } #1
+ \prg_break: \__prop_pair:wn \s__prop { } \prg_break_point:
+ \prg_break_point:Nn \prop_map_break: { }
+ }
+\cs_new:Npn \__prop_map_tokens:nwwn #1#2 \__prop_pair:wn #3 \s__prop #4
+ {
+ #2
+ \use:n {#1} {#3} {#4}
+ \__prop_map_tokens:nwwn {#1}
+ }
+\cs_generate_variant:Nn \prop_map_tokens:Nn { c }
\cs_new:Npn \prop_map_break:
{ \prg_map_break:Nn \prop_map_break: { } }
\cs_new:Npn \prop_map_break:n
@@ -10536,7 +10579,11 @@
\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_tl
+ \tl_set:Nx \l__iow_file_name_tl
+ {
+ \exp_args:Ne \__kernel_file_name_quote:n
+ { \__kernel_file_name_sanitize:n {#2} }
+ }
\iow_close:N #1
\seq_gpop:NNTF \g__iow_streams_seq \l__iow_stream_tl
{ \__iow_open_stream:NV #1 \l__iow_file_name_tl }
@@ -10934,7 +10981,6 @@
}
\exp_args:NV \__iow_tmp:w \c_catcode_other_space_tl
\tl_new:N \l__file_internal_tl
-\ior_new:N \g__file_internal_ior
\str_new:N \g_file_curr_dir_str
\str_new:N \g_file_curr_ext_str
\str_new:N \g_file_curr_name_str
@@ -10970,33 +11016,83 @@
\str_new:N \l__file_name_str
\seq_new:N \l_file_search_path_seq
\seq_new:N \l__file_tmp_seq
-\cs_new_protected:Npn \__kernel_file_name_sanitize:nN #1#2
+\cs_new:Npn \__kernel_file_name_sanitize:n #1
{
- \group_begin:
- \seq_map_inline:Nn \l_char_active_seq
- {
- \tl_set:Nx \l__file_internal_tl { \iow_char:N ##1 }
- \char_set_active_eq:NN ##1 \l__file_internal_tl
- }
- \tl_set:Nx \l__file_internal_tl {#1}
- \exp_args:NNNV \group_end:
- \str_set:Nn #2 \l__file_internal_tl
+ \__kernel_file_name_expand_loop:w #1
+ \q_recursion_tail \q_recursion_stop
}
-\cs_new_protected:Npn \__file_name_quote:nN #1#2
+\cs_new:Npn \__kernel_file_name_expand_loop:w #1 \q_recursion_stop
{
- \str_set:Nx #2 {#1}
- \int_if_even:nF
- { 0 \tl_map_function:NN #2 \__file_name_quote_aux:n }
+ \tl_if_head_is_N_type:nTF {#1}
+ { \__kernel_file_name_expand_N_type:Nw }
{
- \__kernel_msg_error:nnx
- { kernel } { unbalanced-quote-in-filename } {#2}
+ \tl_if_head_is_group:nTF {#1}
+ { \__kernel_file_name_expand_group:nw }
+ { \__kernel_file_name_expand_space:w }
+ }
+ #1 \q_recursion_stop
+ }
+\cs_new:Npn \__kernel_file_name_expand_N_type:Nw #1
+ {
+ \quark_if_recursion_tail_stop:N #1
+ \bool_lazy_and:nnTF
+ { \token_if_expandable_p:N #1 }
+ {
+ \bool_not_p:n
+ {
+ \bool_lazy_any_p:n
+ {
+ { \token_if_protected_macro_p:N #1 }
+ { \token_if_protected_long_macro_p:N #1 }
+ { \token_if_active_p:N #1 }
+ }
+ }
+ }
+ { \exp_after:wN \__kernel_file_name_expand_loop:w #1 }
+ {
+ \token_to_str:N #1
+ \__kernel_file_name_expand_loop:w
+ }
+ }
+\cs_new:Npx \__kernel_file_name_expand_group:nw #1
+ {
+ \c_left_brace_str
+ \exp_not:N \__kernel_file_name_expand_loop:w
+ #1
+ \c_right_brace_str
+ }
+\exp_last_unbraced:NNo
+ \cs_new:Npx \__kernel_file_name_expand_space:w \c_space_tl
+ {
+ \c_space_tl
+ \exp_not:N \__kernel_file_name_expand_loop:w
+ }
+\cs_new:Npn \__kernel_file_name_quote:n #1
+ {
+ \__kernel_file_name_quote_auxi:nnnw {#1} { 0 } { }
+ #1 " \q_recursion_tail " \q_recursion_stop
+ }
+\cs_new:Npn \__kernel_file_name_quote_auxi:nnnw #1#2#3#4 "
+ {
+ \quark_if_recursion_tail_stop_do:nn {#4}
+ { \__kernel_file_name_quote_auxii:nnn {#1} {#2} {#3} }
+ \__kernel_file_name_quote_auxi:nnnw {#1} { #2 + 1 } { #3#4 }
+ }
+\cs_new:Npn \__kernel_file_name_quote_auxii:nnn #1#2#3
+ {
+ \int_if_even:nT {#2}
+ {
+ \__kernel_msg_expandable_error:nnn
+ { kernel } { unbalanced-quote-in-filename } {#1}
}
- \tl_remove_all:Nn #2 { " }
- \tl_if_in:NnT #2 { ~ }
- { \str_set:Nx #2 { " \exp_not:V #2 " } }
+ \__kernel_file_name_quote_auxiii:nw {#3} #3 ~ \q_nil \q_stop
+ }
+\cs_new:Npn \__kernel_file_name_quote_auxiii:nw #1 #2 ~ #3 \q_stop
+ {
+ \quark_if_nil:nTF {#3}
+ { #1 }
+ { "#1" }
}
-\cs_new:Npn \__file_name_quote_aux:n #1
- { \token_if_eq_charcode:NNT #1 " { + 1 } }
\tl_const:Nx \c__file_marker_tl { : \token_to_str:N : }
\cs_new_protected:Npn \file_get:nnN #1#2#3
{
@@ -11034,56 +11130,195 @@
\group_end:
\tl_set:No #1 {#2}
}
-\cs_new_protected:Npn \file_get_full_name:nN #1#2
- {
- \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 }
+\cs_new_eq:NN \__file_file_size:n \tex_filesize:D
+\sys_if_engine_luatex:T
{
- \__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 }
- \cs_if_exist:NT \input@path
+ \cs_gset:Npn \__file_file_size:n #1
{
- \tl_map_inline:Nn \input@path
- { \__file_get_full_name_search:nN { ##1 } \tl_map_break:n }
+ \lua_now:e
+ {
+ l3kernel.filesize
+ ( " \lua_escape:e {#1} " )
+ }
}
- \tl_set:Nn \l__file_full_name_tl { \q_no_value }
- \prg_break_point:
- \quark_if_no_value:NTF \l__file_full_name_tl
+ }
+\cs_new:Npn \file_full_name:n #1
+ {
+ \exp_args:Ne \__file_full_name:n
+ { \__kernel_file_name_sanitize:n {#1} }
+ }
+\cs_new:Npn \__file_full_name:n #1
+ {
+ \exp_args:Ne \__file_full_name:nn
+ { \__kernel_file_name_quote:n {#1} } {#1}
+ }
+\cs_new:Npn \__file_full_name:nn #1#2
+ {
+ \tl_if_blank:nF {#1}
{
- \ior_close:N \g__file_internal_ior
- \prg_return_false:
+ \tl_if_blank:eTF { \__file_file_size:n {#1} }
+ {
+ \seq_map_tokens:Nn \l_file_search_path_seq
+ { \__file_full_name_aux:nn {#2} }
+ \cs_if_exist:NT \input@path
+ {
+ \tl_map_tokens:Nn \input@path
+ { \__file_full_name_aux:nn {#2} }
+ }
+ \__file_file_name_end:
+ }
+ { \__file_file_ext_check:n {#1} }
}
+ }
+\cs_new:Npn \__file_full_name_aux:nn #1#2
+ {
+ \exp_args:Ne \__file_full_name_aux:n
+ { \__kernel_file_name_quote:e { \tl_to_str:n {#2} #1 } }
+ }
+\cs_new:Npn \__file_full_name_aux:n #1
+ {
+ \tl_if_blank:eF { \__file_file_size:n {#1} }
{
- \file_parse_full_name:VNNN \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
+ \seq_map_break:n
{
- \__kernel_ior_open:No \g__file_internal_ior
- { \l__file_full_name_tl .tex }
- \ior_if_eof:NF \g__file_internal_ior
- { \tl_put_right:Nn \l__file_full_name_tl { .tex } }
+ \__file_file_ext_check:n {#1}
+ \__file_file_name_cleanup:w
}
- \ior_close:N \g__file_internal_ior
- \tl_set_eq:NN #2 \l__file_full_name_tl
- \prg_return_true:
}
}
+\cs_new:Npn \__file_file_name_cleanup:w #1 \__file_file_name_end:n #2 { }
+\cs_new:Npn \__file_file_name_end: { }
+\cs_new:Npn \__file_file_ext_check:n #1
+ { \__file_file_ext_check_auxi:nw {#1} #1 " #1 " \q_stop }
+\cs_new:Npn \__file_file_ext_check_auxi:nw #1#2 " #3 " #4 \q_stop
+ { \__file_file_ext_check_auxii:nw {#1} #3 / \q_nil / \q_stop }
+\cs_new:Npn \__file_file_ext_check_auxii:nw #1#2 / #3 / #4 \q_stop
+ {
+ \quark_if_nil:nTF {#3}
+ { \__file_file_ext_check_auxiii:nw {#1} #2 . \q_nil . \q_stop }
+ { \__file_file_ext_check_auxii:nw {#1} #3 / #4 \q_stop }
+ }
+\cs_new:Npx \__file_file_ext_check_auxiii:nw #1#2 . #3 . #4 \q_stop
+ {
+ \exp_not:N \quark_if_nil:nTF {#3}
+ { \exp_not:N \__kernel_file_name_quote:n { #1 \tl_to_str:n { .tex } } }
+ {#1}
+ }
+\bool_lazy_or:nnF
+ { \cs_if_exist_p:N \tex_filesize:D }
+ { \sys_if_engine_luatex_p: }
+ {
+ \cs_gset:Npn \file_full_name:n #1
+ {
+ \__kernel_msg_expandable_error:nnn
+ { kernel } { primitive-not-available }
+ { \(pdf)filesize }
+ }
+ }
+\__kernel_msg_new:nnnn { kernel } { primitive-not-available }
+ { Primitive~\token_to_str:N #1 not~available }
+ {
+ The~version~of~your~TeX~engine~does~not~provide~functionality~equivalent~to~
+ the~#1~primitive.
+ }
+\cs_new_protected:Npn \file_get_full_name:nN #1#2
+ {
+ \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 }
+ {
+ \tl_set:Nx #2
+ { \file_full_name:n {#1} }
+ \tl_if_empty:NTF #2
+ { \prg_return_false: }
+ { \prg_return_true: }
+ }
\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 }
+\bool_lazy_or:nnF
+ { \cs_if_exist_p:N \tex_filesize:D }
+ { \sys_if_engine_luatex_p: }
+ {
+ \prg_set_protected_conditional:Npnn \file_get_full_name:nN #1#2 { T , F , TF }
+ {
+ \__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 }
+ \cs_if_exist:NT \input@path
+ {
+ \tl_map_inline:Nn \input@path
+ { \__file_get_full_name_search:nN { ##1 } \tl_map_break:n }
+ }
+ \tl_set:Nn \l__file_full_name_tl { \q_no_value }
+ \prg_break_point:
+ \quark_if_no_value:NTF \l__file_full_name_tl
+ {
+ \ior_close:N \g__file_internal_ior
+ \prg_return_false:
+ }
+ {
+ \file_parse_full_name:VNNN \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_tl .tex }
+ \ior_if_eof:NF \g__file_internal_ior
+ { \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:
+ }
+ }
+ }
\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_tl }
- \l__file_full_name_tl
+ \tl_set:Nx \l__file_full_name_tl
+ {
+ \exp_args:Ne \__kernel_file_name_quote:n
+ { \tl_to_str:n {#1} \l__file_base_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: } }
}
+\bool_lazy_or:nnF
+ { \cs_if_exist_p:N \tex_filesize:D }
+ { \sys_if_engine_luatex_p: }
+ { \ior_new:N \g__file_internal_ior }
+\cs_new:Npn \file_mdfive_hash:n #1
+ { \__file_details:nn {#1} { mdfivesum } }
+\cs_new:Npn \file_size:n #1
+ { \__file_details:nn {#1} { size } }
+\cs_new:Npn \file_timestamp:n #1
+ { \__file_details:nn {#1} { moddate } }
+\cs_new:Npn \__file_details:nn #1#2
+ {
+ \exp_args:Ne \__file_details_aux:nn
+ { \file_full_name:n {#1} } {#2}
+ }
+\cs_new:Npn \__file_details_aux:nn #1#2
+ {
+ \tl_if_blank:nF {#1}
+ { \use:c { tex_file #2 :D } {#1} }
+ }
+\sys_if_engine_luatex:TF
+ {
+ \cs_gset:Npn \__file_details_aux:nn #1#2
+ {
+ \lua_now:e
+ { l3kernel.file#2 ( " \lua_escape:e { #1 } " ) }
+ }
+ }
+ {
+ \cs_gset:Npn \file_mdfive_hash:n #1
+ { \exp_args:Ne \__file_mdfive_hash:n { \file_full_name:n {#1} } }
+ \cs_new:Npn \__file_mdfive_hash:n #1
+ { \tex_mdfivesum:D file {#1} }
+ }
\cs_new_protected:Npn \file_get_mdfive_hash:nN #1#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
@@ -11091,76 +11326,40 @@
\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} }
+ { \__file_get_details:nnN {#1} { mdfive_hash } #2 }
\prg_new_protected_conditional:Npnn \file_get_size:nN #1#2 { T , F , TF }
- { \__file_get_details:nnN {#1} { size } {#2} }
+ { \__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} }
+ { \__file_get_details:nnN {#1} { timestamp } #2 }
\cs_new_protected:Npn \__file_get_details:nnN #1#2#3
{
- \file_get_full_name:nNTF {#1} \l__file_full_name_tl
- {
- \tl_set:Nx #3
- {
- \use:c { tex_file #2 :D } \exp_after:wN
- { \l__file_full_name_tl }
- }
- \prg_return_true:
- }
+ \tl_set:Nx #3
+ { \use:c { file_ #2 :n } {#1} }
+ \tl_if_empty:NTF #3
{ \prg_return_false: }
+ { \prg_return_true: }
}
-\sys_if_engine_luatex:TF
+\bool_lazy_or:nnF
+ { \cs_if_exist_p:N \tex_filesize:D }
+ { \sys_if_engine_luatex_p: }
{
\cs_set_protected:Npn \__file_get_details:nnN #1#2#3
- {
- \file_get_full_name:nNTF {#1} \l__file_full_name_tl
- {
- \tl_set:Nx #3
- {
- \lua_now:e
- {
- l3kernel.file#2
- ( " \lua_escape:e { \l__file_full_name_tl } " )
- }
- }
- \prg_return_true:
- }
- { \prg_return_false: }
- }
- }
- {
- \prg_set_protected_conditional:Npnn \file_get_mdfive_hash:nN #1#2
- { T , F , TF }
- {
- \file_get_full_name:nNTF {#1} \l__file_full_name_tl
+ {
+ \tl_clear:N #3
+ \__kernel_msg_error:nnx
+ { kernel } { primitive-not-available }
{
- \tl_set:Nx #2
+ \token_to_str:N \(pdf)file
+ \str_case:nn {#2}
{
- \tex_mdfivesum:D file \exp_after:wN
- { \l__file_full_name_tl }
+ { mdfive_hash } { mdfivesum }
+ { timestamp } { moddate }
+ { size } { size }
}
- \prg_return_true:
- }
- { \prg_return_false: }
- }
- \cs_if_exist:NF \tex_filesize:D
- {
- \cs_set_protected:Npn \__file_get_details:nnN #1#2#3
- {
- \tl_clear:N #3
- \__kernel_msg_error:nnx
- { kernel } { primitive-not-available }
- { \exp_not:c { (pdf)file #2 } }
- \prg_return_false:
}
+ \prg_return_false:
}
}
-\__kernel_msg_new:nnnn { kernel } { primitive-not-available }
- { Primitive~\token_to_str:N #1 not~available }
- {
- The~version~of~XeTeX~in~use~does~not~provide~functionality~equivalent~to~
- the~\token_to_str:N #1 primitive.
- }
\prg_new_protected_conditional:Npnn \file_if_exist:n #1 { T , F , TF }
{
\file_get_full_name:nNTF {#1} \l__file_full_name_tl
@@ -11181,9 +11380,8 @@
\cs_new_protected:Npn \file_input_stop: { \tex_endinput:D }
\cs_new_protected:Npn \__kernel_file_missing:n #1
{
- \__kernel_file_name_sanitize:nN {#1} \l__file_base_name_tl
\__kernel_msg_error:nnx { kernel } { file-not-found }
- { \l__file_base_name_tl }
+ { \__kernel_file_name_sanitize:n {#1} }
}
\cs_new_protected:Npn \file_input:n #1
{
@@ -11296,6 +11494,11 @@
}
\cs_new_protected:Npn \GetIdInfo
{
+ \tl_clear_new:N \ExplFileDescription
+ \tl_clear_new:N \ExplFileDate
+ \tl_clear_new:N \ExplFileName
+ \tl_clear_new:N \ExplFileExtension
+ \tl_clear_new:N \ExplFileVersion
\group_begin:
\char_set_catcode_space:n { 32 }
\exp_after:wN
@@ -27445,20 +27648,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_map_tokens:Nn #1#2
- {
- \exp_last_unbraced:Nno
- \use_i:nn { \__prop_map_tokens:nwwn {#2} } #1
- \prg_break: \__prop_pair:wn \s__prop { } \prg_break_point:
- \prg_break_point:Nn \prop_map_break: { }
- }
-\cs_new:Npn \__prop_map_tokens:nwwn #1#2 \__prop_pair:wn #3 \s__prop #4
- {
- #2
- \use:n {#1} {#3} {#4}
- \__prop_map_tokens:nwwn {#1}
- }
-\cs_generate_variant:Nn \prop_map_tokens:Nn { c }
\cs_new:Npn \prop_rand_key_value:N #1
{
\prop_if_empty:NF #1
@@ -27929,8 +28118,8 @@
{
\tl_if_exist:cTF { c__char_mixed_case_ \token_to_str:N #1 _tl }
{
- \__char_change_case_multi:v
- { c__char_mixed_case_ \token_to_str:N #1 _tl }
+ \__char_change_case_multi:vN
+ { c__char_mixed_case_ \token_to_str:N #1 _tl } #1
}
{ \char_upper_case:N #1 }
}
@@ -27940,48 +28129,76 @@
{
\tl_if_exist:cTF { c__char_ #1 _case_ \token_to_str:N #3 _tl }
{
- \__char_change_case_multi:v
- { c__char_ #1 _case_ \token_to_str:N #3 _tl }
+ \__char_change_case_multi:vN
+ { c__char_ #1 _case_ \token_to_str:N #3 _tl } #3
}
{ \exp_args:Nf \__char_change_case:nN { #2 { `#3 } } #3 }
}
\cs_new:Npn \__char_change_case:nN #1#2
{
\int_compare:nNnTF {#1} = 0
- { \__char_change_case:N #2 }
- { \char_generate:nn {#1} { \char_value_catcode:n {#1} } }
+ { #2 }
+ { \char_generate:nn {#1} { \__char_change_case_catcode:N #2 } }
}
-\cs_new:Npn \__char_change_case_multi:n #1
- { \__char_change_case_multi:NNNw #1 \q_no_value \q_no_value \q_stop }
-\cs_new:Npn \__char_change_case_multi:NNNw #1#2#3#4 \q_stop
+\cs_new:Npn \__char_change_case_multi:nN #1#2
+ { \__char_change_case_multi:NNNNw #2 #1 \q_no_value \q_no_value \q_stop }
+\cs_generate_variant:Nn \__char_change_case_multi:nN { v }
+\cs_new:Npn \__char_change_case_multi:NNNNw #1#2#3#4#5 \q_stop
{
- \quark_if_no_value:NTF #3
+ \quark_if_no_value:NTF #4
{
- \quark_if_no_value:NTF #2
- { \__char_change_case:N #1 }
- { \__char_change_case:NN #1#2 }
+ \quark_if_no_value:NTF #3
+ { \__char_change_case:NN #1 #2 }
+ { \__char_change_case:NNN #1 #2#3 }
}
- { \__char_change_case:NNN #1#2#3 }
+ { \__char_change_case:NNNN #1 #2#3#4 }
}
-\cs_generate_variant:Nn \__char_change_case_multi:n { v }
-\cs_new:Npn \__char_change_case:NN #1#2
+\cs_new:Npn \__char_change_case:NNN #1#2#3
{
\exp_args:Nnf \use:nn
- { \__char_change_case:N #1 }
- { \__char_change_case:N #2 }
+ { \__char_change_case:NN #1 #2 }
+ { \__char_change_case:NN #1 #3 }
}
-\cs_new:Npn \__char_change_case:NNN #1#2#3
+\cs_new:Npn \__char_change_case:NNNN #1#2#3#4
{
\exp_args:Nnff \use:nnn
- { \__char_change_case:N #1 }
- { \__char_change_case:N #2 }
- { \__char_change_case:N #3 }
+ { \__char_change_case:NN #1 #2 }
+ { \__char_change_case:NN #1 #3 }
+ { \__char_change_case:NN #1 #4 }
}
-\cs_new:Npn \__char_change_case:N #1
- { \char_generate:nn { `#1 } { \char_value_catcode:n { `#1 } } }
-\bool_lazy_or:nnF { \sys_if_engine_luatex_p: } { \sys_if_engine_xetex_p: }
+\cs_new:Npn \__char_change_case:NN #1#2
+ { \char_generate:nn { `#2 } { \__char_change_case_catcode:N #1 } }
+\cs_new:Npn \__char_change_case_catcode:N #1
{
- \cs_set_eq:NN \__char_change_case:nN \use_ii:nn
+ \if_catcode:w \exp_not:N #1 \c_math_toggle_token
+ 3
+ \else:
+ \if_catcode:w \exp_not:N #1 \c_alignment_token
+ 4
+ \else:
+ \if_catcode:w \exp_not:N #1 \c_math_superscript_token
+ 7
+ \else:
+ \if_catcode:w \exp_not:N #1 \c_math_subscript_token
+ 8
+ \else:
+ \if_catcode:w \exp_not:N #1 \c_space_token
+ 10
+ \else:
+ \if_catcode:w \exp_not:N #1 \c_catcode_letter_token
+ 11
+ \else:
+ \if_catcode:w \exp_not:N #1 \c_catcode_other_token
+ 12
+ \else:
+ 13
+ \fi:
+ \fi:
+ \fi:
+ \fi:
+ \fi:
+ \fi:
+ \fi:
}
\cs_new:Npn \char_str_lower_case:N #1
{ \__char_str_change_case:nNN { lower } \char_value_lccode:n #1 }
@@ -28007,7 +28224,7 @@
{ \tl_to_str:n {#2} }
{ \char_generate:nn {#1} { 12 } }
}
-\bool_lazy_or:nnF { \sys_if_engine_luatex_p: } { \sys_if_engine_xetex_p: }
+\cs_if_exist:NF \tex_Uchar:D
{
\cs_set:Npn \__char_str_change_case:nN #1#2
{ \tl_to_str:n {#2} }
diff --git a/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex b/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex
index 0d3472387e4..1f53dd5e36d 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-08-25}%
+\def\ExplFileDate{2019-09-05}%
\let\ExplLoaderFileDate\ExplFileDate
\begingroup
\def\tempa{LaTeX2e}%
diff --git a/Master/texmf-dist/tex/latex/l3kernel/expl3.sty b/Master/texmf-dist/tex/latex/l3kernel/expl3.sty
index 70baa6b0d20..c01796c2f30 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-08-25}%
+\def\ExplFileDate{2019-09-05}%
\let\ExplLoaderFileDate\ExplFileDate
\ProvidesPackage{expl3}
[%
diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3doc.cls b/Master/texmf-dist/tex/latex/l3kernel/l3doc.cls
index 111e14befe9..f2db802a945 100644
--- a/Master/texmf-dist/tex/latex/l3kernel/l3doc.cls
+++ b/Master/texmf-dist/tex/latex/l3kernel/l3doc.cls
@@ -227,6 +227,7 @@
{ n } { n }
{ o } { n }
{ f } { n }
+ { e } { n }
{ x } { n }
{ V } { n }
{ v } { n }
@@ -300,7 +301,9 @@
\bool_if:NT #3
{
\token_to_str:N :
- \str_if_eq:nnTF { #1 ~ } { \exp_args }
+ \bool_lazy_or:nnTF
+ { \str_if_eq_p:nn { #1 ~ } { \exp_args } }
+ { \str_if_eq_p:nn { #1 ~ } { \exp_last_unbraced } }
{ \exp_not:n {#2} }
{ \__codedoc_signature_base_form:n {#2} }
}