diff options
Diffstat (limited to 'Master/texmf-dist/tex/latex')
20 files changed, 1356 insertions, 845 deletions
diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-convert.sty b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-convert.sty index 934457dae78..e6eea5f4b15 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-convert.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-convert.sty @@ -20,7 +20,7 @@ %% %% File: l3str-convert.dtx Copyright (C) 2013-2017 The LaTeX3 Project \RequirePackage{expl3} -\ProvidesExplPackage{l3str-convert}{2017/05/29}{} +\ProvidesExplPackage{l3str-convert}{2017/07/15}{} {L3 Experimental string encoding conversions} \cs_if_exist:NF \use_ii_i:nn { \cs_new:Npn \use_ii_i:nn #1#2 { #2 #1 } } diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-format.sty b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-format.sty index b638c905b0a..fa88bb5ca45 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-format.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-format.sty @@ -20,7 +20,7 @@ %% %% File: l3str-format.dtx Copyright (C) 2012-2013,2015-2017 The LaTeX3 Project \RequirePackage{expl3} -\ProvidesExplPackage{l3str-format}{2017/05/29}{} +\ProvidesExplPackage{l3str-format}{2017/07/15}{} {L3 Experimental string formatting} \RequirePackage{l3str} \cs_generate_variant:Nn \use:nn { nf } diff --git a/Master/texmf-dist/tex/latex/l3experimental/xcoffins/xcoffins.sty b/Master/texmf-dist/tex/latex/l3experimental/xcoffins/xcoffins.sty index 4158ff85dbd..bc90583cfa7 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/xcoffins/xcoffins.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/xcoffins/xcoffins.sty @@ -20,7 +20,7 @@ %% %% File: xcoffins.dtx Copyright(C) 2010-2012,2014,2016,2017 The LaTeX3 Project \RequirePackage{xparse} -\ProvidesExplPackage{xcoffins}{2017/05/29}{} +\ProvidesExplPackage{xcoffins}{2017/07/15}{} {L3 Experimental design level coffins} \keys_define:nn { coffin } { diff --git a/Master/texmf-dist/tex/latex/l3experimental/xgalley/l3galley.sty b/Master/texmf-dist/tex/latex/l3experimental/xgalley/l3galley.sty index 9f687c7e4f5..d436dff2ad9 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/xgalley/l3galley.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/xgalley/l3galley.sty @@ -20,8 +20,8 @@ %% %% File: l3galley.dtx Copyright (C) 1999-2001, 2004-2009 Frank Mittelbach %% (C) 2010-2017 The LaTeX3 Project -\RequirePackage{expl3}[2017/05/29] -\@ifpackagelater{expl3}{2017/05/29} +\RequirePackage{expl3}[2017/07/15] +\@ifpackagelater{expl3}{2017/07/15} {} {% \PackageError{l3galley}{Support package l3kernel too old} @@ -33,7 +33,7 @@ }% \endinput } -\ProvidesExplPackage{l3galley}{2017/05/29}{} +\ProvidesExplPackage{l3galley}{2017/07/15}{} {L3 Experimental galley code} \int_new:N \l__galley_tmp_int \seq_new:N \g__galley_tmpa_seq diff --git a/Master/texmf-dist/tex/latex/l3experimental/xgalley/xgalley.sty b/Master/texmf-dist/tex/latex/l3experimental/xgalley/xgalley.sty index 53ce196568a..033fd58bc4f 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/xgalley/xgalley.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/xgalley/xgalley.sty @@ -21,7 +21,7 @@ %% File: xgalley.dtx Copyright (C) 1999-2001, 2004-2009 Frank Mittelbach %% (C) 2010-2012,2014,2016-2017 The LaTeX3 Project \RequirePackage{xparse} -\ProvidesExplPackage{xgalley}{2017/05/29}{} +\ProvidesExplPackage{xgalley}{2017/07/15}{} {L3 Experimental galley} \RequirePackage{xparse,xtemplate,l3galley} \clist_new:N \l__galley_tmpa_clist diff --git a/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex b/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex index ed3ba7dd47d..6bf8dcf4de8 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex +++ b/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex @@ -62,7 +62,7 @@ %% and all files in that bundle must be distributed together. %% %% File: expl3.dtx Copyright (C) 1990-2017 The LaTeX3 Project -\def\ExplFileDate{2017/05/29}% +\def\ExplFileDate{2017/07/15}% \begingroup \def\next{\endgroup}% \expandafter\ifx\csname PackageError\endcsname\relax @@ -187,7 +187,7 @@ local t = { } for _,i in pairs(tex.extraprimitives("luatex")) do if string.match(i,"^U") then - if not string.match(i,"^Uchar$") then + if not string.match(i,"^Uchar$") then %$ table.insert(t,i) end end @@ -826,6 +826,8 @@ \__kernel_primitive:NN \pdfdraftmode \pdftex_draftmode:D \__kernel_primitive:NN \pdfeachlinedepth \pdftex_eachlinedepth:D \__kernel_primitive:NN \pdfeachlineheight \pdftex_eachlineheight:D + \__kernel_primitive:NN \pdffilemoddate \pdftex_filemoddate:D + \__kernel_primitive:NN \pdffilesize \pdftex_filesize:D \__kernel_primitive:NN \pdffirstlineheight \pdftex_firstlineheight:D \__kernel_primitive:NN \pdffontexpand \pdftex_fontexpand:D \__kernel_primitive:NN \pdffontsize \pdftex_fontsize:D @@ -836,6 +838,7 @@ \__kernel_primitive:NN \pdflastypos \pdftex_lastypos:D \__kernel_primitive:NN \pdfmapfile \pdftex_mapfile:D \__kernel_primitive:NN \pdfmapline \pdftex_mapline:D + \__kernel_primitive:NN \pdfmdfivesum \pdftex_mdfivesum:D \__kernel_primitive:NN \pdfnoligatures \pdftex_noligatures:D \__kernel_primitive:NN \pdfnormaldeviate \pdftex_normaldeviate:D \__kernel_primitive:NN \pdfpageheight \pdftex_pageheight:D @@ -925,6 +928,7 @@ \__kernel_primitive:NN \XeTeXvariationname \xetex_variationname:D \__kernel_primitive:NN \XeTeXrevision \xetex_XeTeXrevision:D \__kernel_primitive:NN \XeTeXversion \xetex_XeTeXversion:D + \__kernel_primitive:NN \mdfivesum \pdftex_mdfivesum:D \__kernel_primitive:NN \ifprimitive \pdftex_ifprimitive:D \__kernel_primitive:NN \primitive \pdftex_primitive:D \__kernel_primitive:NN \shellescape \pdftex_shellescape:D @@ -1755,29 +1759,6 @@ { \cs_if_exist:cTF {#1} { \use:c {#1} #2 } { } } \cs_set:Npn \cs_if_exist_use:c #1 { \cs_if_exist:cTF {#1} { \use:c {#1} } { } } -\cs_set_protected:Npn \iow_log:x - { \tex_immediate:D \tex_write:D -1 } -\cs_set_protected:Npn \iow_term:x - { \tex_immediate:D \tex_write:D 16 } -\tex_ifodd:D \l@expl@log@functions@bool - \cs_set_protected:Npn \__chk_log:x { \iow_log:x } - \cs_set_protected:Npn \__chk_suspend_log: - { - \cs_set_protected:Npx \__chk_resume_log: - { - \cs_set_protected:Npn \__chk_resume_log: - { \exp_not:o { \__chk_resume_log: } } - \cs_set_protected:Npn \__chk_log:x - { \exp_not:o { \__chk_log:x } } - } - \cs_set_protected:Npn \__chk_log:x { \use_none:n } - } - \cs_set_protected:Npn \__chk_resume_log: { } -\else: - \cs_set_protected:Npn \__chk_log:x { \use_none:n } - \cs_set_protected:Npn \__chk_suspend_log: { } - \cs_set_protected:Npn \__chk_resume_log: { } -\fi: \cs_set_protected:Npn \__msg_kernel_error:nnxx #1#2#3#4 { \tex_newlinechar:D = `\^^J \tex_relax:D @@ -1797,6 +1778,85 @@ { \__msg_kernel_error:nnxx {#1} {#2} { } { } } \cs_set:Npn \msg_line_context: { on~line~ \tex_the:D \tex_inputlineno:D } +\cs_set_protected:Npn \iow_log:x + { \tex_immediate:D \tex_write:D -1 } +\cs_set_protected:Npn \iow_term:x + { \tex_immediate:D \tex_write:D 16 } +\cs_set_protected:Npn \debug_log_functions_on: + { + \__msg_kernel_error:nnx { kernel } { enable-debug } + { \token_to_str:N \debug_log_functions_on: } + } +\cs_set_protected:Npn \debug_log_functions_off: + { + \__msg_kernel_error:nnx { kernel } { enable-debug } + { \token_to_str:N \debug_log_functions_off: } + } +\cs_set_protected:Npn \__debug_suspend_log: { } +\cs_set_protected:Npn \__debug_resume_log: { } +\tex_ifodd:D \l@expl@enable@debug@bool + \cs_set_protected:Npn \debug_log_functions_on: + { + \cs_set_protected:Npn \__debug_log:x { \iow_log:x } + \cs_set_protected:Npn \__debug_suspend_log: + { + \cs_set_protected:Npx \__debug_resume_log: + { + \cs_set_protected:Npn \__debug_resume_log: + { \exp_not:o { \__debug_resume_log: } } + \cs_set_protected:Npn \__debug_log:x + { \exp_not:o { \__debug_log:x } } + } + \cs_set_protected:Npn \__debug_log:x { \use_none:n } + } + \cs_set_protected:Npn \__debug_resume_log: { } + } + \cs_set_protected:Npn \debug_log_functions_off: + { + \cs_set_protected:Npn \__debug_log:x { \use_none:n } + \cs_set_protected:Npn \__debug_suspend_log: { } + \cs_set_protected:Npn \__debug_resume_log: { } + } + \tex_ifodd:D \l@expl@log@functions@bool + \debug_log_functions_on: + \else: + \debug_log_functions_off: + \fi: +\fi: +\cs_set_protected:Npn \__debug_patch:nnNw #1#2 { } +\tex_ifodd:D \l@expl@enable@debug@bool + \cs_set_protected:Npn \__debug_patch:nnNw #1#2#3 + { + \tex_ifcase:D + \if_meaning:w #3 \cs_new_protected:Npn 1~ \fi: + \if_meaning:w #3 \cs_new:Npn 1~ \fi: + \if_meaning:w #3 \cs_set_protected:Npn 1~ \fi: + \if_meaning:w #3 \cs_set:Npn 1~ \fi: + \if_meaning:w #3 \cs_gset_protected:Npn 1~ \fi: + \if_meaning:w #3 \cs_gset:Npn 1~ \fi: + \if_meaning:w #3 \prg_new_protected_conditional:Npnn 2~ \fi: + \if_meaning:w #3 \prg_new_conditional:Npnn 2~ \fi: + \__msg_kernel_error:nnx { kernel } { debug-unpatchable } + { \token_to_str:N #3 } + \or: + \exp_after:wN \__debug_patch_param:NNnnNnp + \exp_after:wN \__debug_patch_new:nnNNnn + \else: + \exp_after:wN \__debug_patch_param:NNnnNnp + \exp_after:wN \__debug_patch_new_conditional:nnNNnnn + \fi: + \use_none:nn {#1} {#2} #3 + } + \cs_set_protected:Npn \__debug_patch_param:NNnnNnp #1#2#3#4#5#6#7# + { #1 {#3} {#4} #5 #6 {#7} } + \cs_set_protected:Npn \__debug_patch_new:nnNNnn #1#2#3#4#5#6 + { #3 #4 #5 { #1 #6 #2 } } + \cs_set_protected:Npn \__debug_patch_new_conditional:nnNNnnn + #1#2#3#4#5#6#7 + { #3 #4 #5 {#6} { #1 #7 #2 } } +\fi: +\__debug_patch:nnNw { } + { \__debug_log:x { Defining~\token_to_str:N #1~ \msg_line_context: } } \cs_set_protected:Npn \__chk_if_free_cs:N #1 { \cs_if_free:NF #1 @@ -1804,29 +1864,38 @@ \__msg_kernel_error:nnxx { kernel } { command-already-defined } { \token_to_str:N #1 } { \token_to_meaning:N #1 } } -} -\tex_ifodd:D \l@expl@log@functions@bool - \cs_set_protected:Npn \__chk_if_free_cs:N #1 - { - \cs_if_free:NF #1 - { - \__msg_kernel_error:nnxx { kernel } { command-already-defined } - { \token_to_str:N #1 } { \token_to_meaning:N #1 } - } - \__chk_log:x { Defining~\token_to_str:N #1~ \msg_line_context: } - } -\fi: + } \cs_set_protected:Npn \__chk_if_free_cs:c { \exp_args:Nc \__chk_if_free_cs:N } -\tex_ifodd:D \l@expl@check@declarations@bool - \cs_set_protected:Npn \__chk_if_exist_var:N #1 +\cs_set_protected:Npn \debug_check_declarations_on: + { + \__msg_kernel_error:nnx { kernel } { enable-debug } + { \token_to_str:N \debug_check_declarations_on: } + } +\cs_set_protected:Npn \debug_check_declarations_off: + { + \__msg_kernel_error:nnx { kernel } { enable-debug } + { \token_to_str:N \debug_check_declarations_off: } + } +\tex_ifodd:D \l@expl@enable@debug@bool + \cs_set_protected:Npn \debug_check_declarations_on: { - \cs_if_exist:NF #1 + \cs_set_protected:Npn \__chk_if_exist_var:N ##1 { - \__msg_kernel_error:nnx { check } { non-declared-variable } - { \token_to_str:N #1 } + \cs_if_exist:NF ##1 + { + \__msg_kernel_error:nnx { check } { non-declared-variable } + { \token_to_str:N ##1 } + } } } + \cs_set_protected:Npn \debug_check_declarations_off: + { \cs_set_protected:Npn \__chk_if_exist_var:N ##1 { } } + \tex_ifodd:D \l@expl@check@declarations@bool + \debug_check_declarations_on: + \else: + \debug_check_declarations_off: + \fi: \fi: \cs_set_protected:Npn \__chk_if_exist_cs:N #1 { @@ -2474,7 +2543,7 @@ \q_mark \__msg_kernel_error:nnxx { kernel } { variant-too-long } {#5} { \token_to_str:N #3 } - \use_none:nnnn + \use_none:nnn \q_stop #3 #3 @@ -2489,7 +2558,7 @@ \q_mark \__msg_kernel_error:nnxxxx { kernel } { invalid-variant } {#7} { \token_to_str:N #5 } {#1} {#2} - \use_none:nnnn + \use_none:nnn \q_stop #5 #5 @@ -2507,24 +2576,29 @@ \fi: \fi: } +\__debug_patch:nnNw + { + \cs_if_free:NF #4 + { + \__debug_log:x + { + Variant~\token_to_str:N #4~% + already~defined;~ not~ changing~ it~ \msg_line_context: + } + } + } + { } \cs_new_protected:Npn \__cs_generate_variant:wwNN #1 \q_mark #2 \q_stop #3#4 { #2 - \cs_if_free:NTF #4 + \cs_if_free:NT #4 { \group_begin: \__cs_generate_internal_variant:n {#1} \__cs_tmp:w #4 { \exp_not:c { exp_args:N #1 } \exp_not:N #3 } \group_end: } - { - \__chk_log:x - { - Variant~\token_to_str:N #4~% - already~defined;~ not~ changing~ it~ \msg_line_context: - } - } } \cs_new_protected:Npx \__cs_generate_internal_variant:n #1 { @@ -2588,16 +2662,41 @@ { \tl_if_exist:NTF #1 { \tl_gclear:N #1 } { \tl_new:N #1 } } \cs_generate_variant:Nn \tl_clear_new:N { c } \cs_generate_variant:Nn \tl_gclear_new:N { c } -\cs_new_eq:NN \tl_set_eq:NN \cs_set_eq:NN -\cs_new_eq:NN \tl_set_eq:cN \cs_set_eq:cN -\cs_new_eq:NN \tl_set_eq:Nc \cs_set_eq:Nc -\cs_new_eq:NN \tl_set_eq:cc \cs_set_eq:cc -\cs_new_eq:NN \tl_gset_eq:NN \cs_gset_eq:NN -\cs_new_eq:NN \tl_gset_eq:cN \cs_gset_eq:cN -\cs_new_eq:NN \tl_gset_eq:Nc \cs_gset_eq:Nc -\cs_new_eq:NN \tl_gset_eq:cc \cs_gset_eq:cc +\tex_ifodd:D \l@expl@enable@debug@bool + \cs_new_protected:Npn \tl_set_eq:NN #1#2 + { + \__chk_if_exist_var:N #1 + \__chk_if_exist_var:N #2 + \cs_set_eq:NN #1 #2 + } + \cs_new_protected:Npn \tl_gset_eq:NN #1#2 + { + \__chk_if_exist_var:N #1 + \__chk_if_exist_var:N #2 + \cs_gset_eq:NN #1 #2 + } +\else: + \cs_new_eq:NN \tl_set_eq:NN \cs_set_eq:NN + \cs_new_eq:NN \tl_gset_eq:NN \cs_gset_eq:NN +\fi: +\cs_generate_variant:Nn \tl_set_eq:NN { cN, Nc, cc } +\cs_generate_variant:Nn \tl_gset_eq:NN { cN, Nc, cc } +\__debug_patch:nnNw + { + \__chk_if_exist_var:N #1 + \__chk_if_exist_var:N #2 + \__chk_if_exist_var:N #3 + } + { } \cs_new_protected:Npn \tl_concat:NNN #1#2#3 { \tl_set:Nx #1 { \exp_not:o {#2} \exp_not:o {#3} } } +\__debug_patch:nnNw + { + \__chk_if_exist_var:N #1 + \__chk_if_exist_var:N #2 + \__chk_if_exist_var:N #3 + } + { } \cs_new_protected:Npn \tl_gconcat:NNN #1#2#3 { \tl_gset:Nx #1 { \exp_not:o {#2} \exp_not:o {#3} } } \cs_generate_variant:Nn \tl_concat:NNN { ccc } @@ -2606,16 +2705,22 @@ \prg_new_eq_conditional:NNn \tl_if_exist:c \cs_if_exist:c { TF , T , F , p } \tl_const:Nn \c_empty_tl { } \tl_const:Nn \c_space_tl { ~ } +\__debug_patch:nnNw { \__chk_if_exist_var:N #1 } { } \cs_new_protected:Npn \tl_set:Nn #1#2 { \cs_set_nopar:Npx #1 { \exp_not:n {#2} } } +\__debug_patch:nnNw { \__chk_if_exist_var:N #1 } { } \cs_new_protected:Npn \tl_set:No #1#2 { \cs_set_nopar:Npx #1 { \exp_not:o {#2} } } +\__debug_patch:nnNw { \__chk_if_exist_var:N #1 } { } \cs_new_protected:Npn \tl_set:Nx #1#2 { \cs_set_nopar:Npx #1 {#2} } +\__debug_patch:nnNw { \__chk_if_exist_var:N #1 } { } \cs_new_protected:Npn \tl_gset:Nn #1#2 { \cs_gset_nopar:Npx #1 { \exp_not:n {#2} } } +\__debug_patch:nnNw { \__chk_if_exist_var:N #1 } { } \cs_new_protected:Npn \tl_gset:No #1#2 { \cs_gset_nopar:Npx #1 { \exp_not:o {#2} } } +\__debug_patch:nnNw { \__chk_if_exist_var:N #1 } { } \cs_new_protected:Npn \tl_gset:Nx #1#2 { \cs_gset_nopar:Npx #1 {#2} } \cs_generate_variant:Nn \tl_set:Nn { NV , Nv , Nf } @@ -2624,20 +2729,28 @@ \cs_generate_variant:Nn \tl_gset:Nn { NV , Nv , Nf } \cs_generate_variant:Nn \tl_gset:Nx { c } \cs_generate_variant:Nn \tl_gset:Nn { c, co , cV , cv , cf } +\__debug_patch:nnNw { \__chk_if_exist_var:N #1 } { } \cs_new_protected:Npn \tl_put_left:Nn #1#2 { \cs_set_nopar:Npx #1 { \exp_not:n {#2} \exp_not:o #1 } } +\__debug_patch:nnNw { \__chk_if_exist_var:N #1 } { } \cs_new_protected:Npn \tl_put_left:NV #1#2 { \cs_set_nopar:Npx #1 { \exp_not:V #2 \exp_not:o #1 } } +\__debug_patch:nnNw { \__chk_if_exist_var:N #1 } { } \cs_new_protected:Npn \tl_put_left:No #1#2 { \cs_set_nopar:Npx #1 { \exp_not:o {#2} \exp_not:o #1 } } +\__debug_patch:nnNw { \__chk_if_exist_var:N #1 } { } \cs_new_protected:Npn \tl_put_left:Nx #1#2 { \cs_set_nopar:Npx #1 { #2 \exp_not:o #1 } } +\__debug_patch:nnNw { \__chk_if_exist_var:N #1 } { } \cs_new_protected:Npn \tl_gput_left:Nn #1#2 { \cs_gset_nopar:Npx #1 { \exp_not:n {#2} \exp_not:o #1 } } +\__debug_patch:nnNw { \__chk_if_exist_var:N #1 } { } \cs_new_protected:Npn \tl_gput_left:NV #1#2 { \cs_gset_nopar:Npx #1 { \exp_not:V #2 \exp_not:o #1 } } +\__debug_patch:nnNw { \__chk_if_exist_var:N #1 } { } \cs_new_protected:Npn \tl_gput_left:No #1#2 { \cs_gset_nopar:Npx #1 { \exp_not:o {#2} \exp_not:o #1 } } +\__debug_patch:nnNw { \__chk_if_exist_var:N #1 } { } \cs_new_protected:Npn \tl_gput_left:Nx #1#2 { \cs_gset_nopar:Npx #1 { #2 \exp_not:o {#1} } } \cs_generate_variant:Nn \tl_put_left:Nn { c } @@ -2648,20 +2761,28 @@ \cs_generate_variant:Nn \tl_gput_left:NV { c } \cs_generate_variant:Nn \tl_gput_left:No { c } \cs_generate_variant:Nn \tl_gput_left:Nx { c } +\__debug_patch:nnNw { \__chk_if_exist_var:N #1 } { } \cs_new_protected:Npn \tl_put_right:Nn #1#2 { \cs_set_nopar:Npx #1 { \exp_not:o #1 \exp_not:n {#2} } } +\__debug_patch:nnNw { \__chk_if_exist_var:N #1 } { } \cs_new_protected:Npn \tl_put_right:NV #1#2 { \cs_set_nopar:Npx #1 { \exp_not:o #1 \exp_not:V #2 } } +\__debug_patch:nnNw { \__chk_if_exist_var:N #1 } { } \cs_new_protected:Npn \tl_put_right:No #1#2 { \cs_set_nopar:Npx #1 { \exp_not:o #1 \exp_not:o {#2} } } +\__debug_patch:nnNw { \__chk_if_exist_var:N #1 } { } \cs_new_protected:Npn \tl_put_right:Nx #1#2 { \cs_set_nopar:Npx #1 { \exp_not:o #1 #2 } } +\__debug_patch:nnNw { \__chk_if_exist_var:N #1 } { } \cs_new_protected:Npn \tl_gput_right:Nn #1#2 { \cs_gset_nopar:Npx #1 { \exp_not:o #1 \exp_not:n {#2} } } +\__debug_patch:nnNw { \__chk_if_exist_var:N #1 } { } \cs_new_protected:Npn \tl_gput_right:NV #1#2 { \cs_gset_nopar:Npx #1 { \exp_not:o #1 \exp_not:V #2 } } +\__debug_patch:nnNw { \__chk_if_exist_var:N #1 } { } \cs_new_protected:Npn \tl_gput_right:No #1#2 { \cs_gset_nopar:Npx #1 { \exp_not:o #1 \exp_not:o {#2} } } +\__debug_patch:nnNw { \__chk_if_exist_var:N #1 } { } \cs_new_protected:Npn \tl_gput_right:Nx #1#2 { \cs_gset_nopar:Npx #1 { \exp_not:o {#1} #2 } } \cs_generate_variant:Nn \tl_put_right:Nn { c } @@ -2672,61 +2793,6 @@ \cs_generate_variant:Nn \tl_gput_right:NV { c } \cs_generate_variant:Nn \tl_gput_right:No { c } \cs_generate_variant:Nn \tl_gput_right:Nx { c } -\tex_ifodd:D \l@expl@check@declarations@bool - \cs_set_protected:Npn \__cs_tmp:w #1 - { - \if_meaning:w \q_recursion_tail #1 - \exp_after:wN \use_none_delimit_by_q_recursion_stop:w - \fi: - \use:x - { - \cs_set_protected:Npn #1 \exp_not:n { ##1 ##2 } - { - \__chk_if_exist_var:N \exp_not:n {##1} - \exp_not:o { #1 {##1} {##2} } - } - } - \__cs_tmp:w - } - \__cs_tmp:w - \tl_set:Nn \tl_set:No \tl_set:Nx - \tl_gset:Nn \tl_gset:No \tl_gset:Nx - \tl_put_left:Nn \tl_put_left:NV - \tl_put_left:No \tl_put_left:Nx - \tl_gput_left:Nn \tl_gput_left:NV - \tl_gput_left:No \tl_gput_left:Nx - \tl_put_right:Nn \tl_put_right:NV - \tl_put_right:No \tl_put_right:Nx - \tl_gput_right:Nn \tl_gput_right:NV - \tl_gput_right:No \tl_gput_right:Nx - \q_recursion_tail \q_recursion_stop - \cs_set_protected:Npn \tl_set_eq:NN #1#2 - { - \__chk_if_exist_var:N #1 - \__chk_if_exist_var:N #2 - \cs_set_eq:NN #1 #2 - } - \cs_set_protected:Npn \tl_gset_eq:NN #1#2 - { - \__chk_if_exist_var:N #1 - \__chk_if_exist_var:N #2 - \cs_gset_eq:NN #1 #2 - } - \cs_set_protected:Npn \tl_concat:NNN #1#2#3 - { - \__chk_if_exist_var:N #1 - \__chk_if_exist_var:N #2 - \__chk_if_exist_var:N #3 - \tl_set:Nx #1 { \exp_not:o {#2} \exp_not:o {#3} } - } - \cs_set_protected:Npn \tl_gconcat:NNN #1#2#3 - { - \__chk_if_exist_var:N #1 - \__chk_if_exist_var:N #2 - \__chk_if_exist_var:N #3 - \tl_gset:Nx #1 { \exp_not:o {#2} \exp_not:o {#3} } - } -\tex_fi:D \tl_const:Nx \c__tl_rescan_marker_tl { : \token_to_str:N : } \cs_new_protected:Npn \tl_set_rescan:Nnn { \__tl_set_rescan:NNnn \tl_set:Nn } @@ -4051,7 +4117,7 @@ \if_int_compare:w \__str_if_eq_x:nn { #5 ~ } {#7} = 0 \exp_stop_f: \else: \tl_const:cx - { c__unicode_title_ \utex_char:D "#1 _tl } + { c__unicode_mixed_ \utex_char:D "#1 _tl } { \utex_char:D "#7 } \fi: } @@ -4081,7 +4147,7 @@ \use:n { \__unicode_parse_auxii:w #1 ~ upper ~ #4 ~ } ~ \q_stop \if_int_compare:w \__str_if_eq_x:nn {#3} {#4} = 0 \exp_stop_f: \else: - \use:n { \__unicode_parse_auxii:w #1 ~ title ~ #3 ~ } ~ \q_stop + \use:n { \__unicode_parse_auxii:w #1 ~ mixed ~ #3 ~ } ~ \q_stop \fi: } \cs_set_protected:Npn \__unicode_parse_auxii:w #1 ~ #2 ~ #3 ~ #4 ~ #5 \q_stop @@ -5494,7 +5560,9 @@ \cs_new:cpn { flag~#1 } ##1 ; { \exp_after:wN \use_none:n \cs:w flag~#1~##1 \cs_end: } } -\cs_new_protected:Npn \flag_clear:n { \__flag_clear:wn 0 ; } +\__debug_patch:nnNw + { \exp_args:Nc \__chk_if_exist_var:N { flag~#1 } } { } +\cs_new_protected:Npn \flag_clear:n #1 { \__flag_clear:wn 0 ; {#1} } \cs_new_protected:Npn \__flag_clear:wn #1 ; #2 { \if_cs_exist:w flag~#2~#1 \cs_end: @@ -5515,11 +5583,22 @@ } \cs_new_protected:Npn \flag_log:n { \__msg_log_next: \flag_show:n } +\tex_ifodd:D \l@expl@enable@debug@bool + \cs_new:Npn \__flag_chk_exist:n #1 + { + \flag_if_exist:nF {#1} + { + \__msg_kernel_expandable_error:nnn + { kernel } { bad-variable } { flag~#1~ } + } + } +\fi: \prg_new_conditional:Npnn \flag_if_exist:n #1 { p , T , F , TF } { \cs_if_exist:cTF { flag~#1 } { \prg_return_true: } { \prg_return_false: } } +\__debug_patch:nnNw { \__flag_chk_exist:n {#1} } { } \prg_new_conditional:Npnn \flag_if_raised:n #1 { p , T , F , TF } { \if_cs_exist:w flag~#1~0 \cs_end: @@ -5528,7 +5607,8 @@ \prg_return_false: \fi: } -\cs_new:Npn \flag_height:n { \__flag_height_loop:wn 0; } +\__debug_patch:nnNw { \__flag_chk_exist:n {#1} } { } +\cs_new:Npn \flag_height:n #1 { \__flag_height_loop:wn 0; {#1} } \cs_new:Npn \__flag_height_loop:wn #1 ; #2 { \if_cs_exist:w flag~#2~#1 \cs_end: @@ -5544,35 +5624,6 @@ \cs:w flag~#1 \exp_after:wN \cs_end: \__int_value:w \flag_height:n {#1} ; } -\tex_ifodd:D \l@expl@check@declarations@bool - \cs_set_protected:Npn \flag_clear:n #1 - { - \exp_args:Nc \__chk_if_exist_var:N { flag~#1 } - \__flag_clear:wn 0 ; {#1} - } - \cs_set:Npn \__flag_chk_exist:n #1 - { - \flag_if_exist:nF {#1} - { - \__msg_kernel_expandable_error:nnn - { kernel } { bad-variable } { flag~#1~ } - } - } - \cs_set:Npn \flag_height:n #1 - { - \__flag_chk_exist:n {#1} - \__flag_height_loop:wn 0; {#1} - } - \prg_set_conditional:Npnn \flag_if_raised:n #1 { p , T , F , TF } - { - \__flag_chk_exist:n {#1} - \if_cs_exist:w flag~#1~0 \cs_end: - \prg_return_true: - \else: - \prg_return_false: - \fi: - } -\fi: %% File: l3quark.dtx Copyright (C) 1990-2017 The LaTeX3 Project \cs_new_protected:Npn \quark_new:N #1 { \tl_const:Nn #1 {#1} } \quark_new:N \q_nil @@ -5685,74 +5736,34 @@ \cs_new_eq:NN \if_predicate:w \tex_ifodd:D \cs_new_protected:Npn \bool_new:N #1 { \cs_new_eq:NN #1 \c_false_bool } \cs_generate_variant:Nn \bool_new:N { c } +\__debug_patch:nnNw { \__chk_if_exist_var:N #1 } { } \cs_new_protected:Npn \bool_set_true:N #1 { \cs_set_eq:NN #1 \c_true_bool } +\__debug_patch:nnNw { \__chk_if_exist_var:N #1 } { } \cs_new_protected:Npn \bool_set_false:N #1 { \cs_set_eq:NN #1 \c_false_bool } +\__debug_patch:nnNw { \__chk_if_exist_var:N #1 } { } \cs_new_protected:Npn \bool_gset_true:N #1 { \cs_gset_eq:NN #1 \c_true_bool } +\__debug_patch:nnNw { \__chk_if_exist_var:N #1 } { } \cs_new_protected:Npn \bool_gset_false:N #1 { \cs_gset_eq:NN #1 \c_false_bool } \cs_generate_variant:Nn \bool_set_true:N { c } \cs_generate_variant:Nn \bool_set_false:N { c } \cs_generate_variant:Nn \bool_gset_true:N { c } \cs_generate_variant:Nn \bool_gset_false:N { c } -\cs_new_eq:NN \bool_set_eq:NN \cs_set_eq:NN -\cs_new_eq:NN \bool_set_eq:Nc \cs_set_eq:Nc -\cs_new_eq:NN \bool_set_eq:cN \cs_set_eq:cN -\cs_new_eq:NN \bool_set_eq:cc \cs_set_eq:cc -\cs_new_eq:NN \bool_gset_eq:NN \cs_gset_eq:NN -\cs_new_eq:NN \bool_gset_eq:Nc \cs_gset_eq:Nc -\cs_new_eq:NN \bool_gset_eq:cN \cs_gset_eq:cN -\cs_new_eq:NN \bool_gset_eq:cc \cs_gset_eq:cc +\cs_new_eq:NN \bool_set_eq:NN \tl_set_eq:NN +\cs_new_eq:NN \bool_gset_eq:NN \tl_gset_eq:NN +\cs_generate_variant:Nn \bool_set_eq:NN { Nc, cN, cc } +\cs_generate_variant:Nn \bool_gset_eq:NN { Nc, cN, cc } +\__debug_patch:nnNw { \__chk_if_exist_var:N #1 } { } \cs_new_protected:Npn \bool_set:Nn #1#2 { \tex_chardef:D #1 = \bool_if_p:n {#2} } +\__debug_patch:nnNw { \__chk_if_exist_var:N #1 } { } \cs_new_protected:Npn \bool_gset:Nn #1#2 { \tex_global:D \tex_chardef:D #1 = \bool_if_p:n {#2} } \cs_generate_variant:Nn \bool_set:Nn { c } \cs_generate_variant:Nn \bool_gset:Nn { c } -\if_bool:N \l@expl@check@declarations@bool - \cs_set_protected:Npn \bool_set_true:N #1 - { - \__chk_if_exist_var:N #1 - \cs_set_eq:NN #1 \c_true_bool - } - \cs_set_protected:Npn \bool_set_false:N #1 - { - \__chk_if_exist_var:N #1 - \cs_set_eq:NN #1 \c_false_bool - } - \cs_set_protected:Npn \bool_gset_true:N #1 - { - \__chk_if_exist_var:N #1 - \cs_gset_eq:NN #1 \c_true_bool - } - \cs_set_protected:Npn \bool_gset_false:N #1 - { - \__chk_if_exist_var:N #1 - \cs_gset_eq:NN #1 \c_false_bool - } - \cs_set_protected:Npn \bool_set_eq:NN #1 - { - \__chk_if_exist_var:N #1 - \cs_set_eq:NN #1 - } - \cs_set_protected:Npn \bool_gset_eq:NN #1 - { - \__chk_if_exist_var:N #1 - \cs_gset_eq:NN #1 - } - \cs_set_protected:Npn \bool_set:Nn #1#2 - { - \__chk_if_exist_var:N #1 - \tex_chardef:D #1 = \bool_if_p:n {#2} - } - \cs_set_protected:Npn \bool_gset:Nn #1#2 - { - \__chk_if_exist_var:N #1 - \tex_global:D \tex_chardef:D #1 = \bool_if_p:n {#2} - } -\fi: \prg_new_conditional:Npnn \bool_if:N #1 { p , T , F , TF } { \if_meaning:w \c_true_bool #1 @@ -7569,6 +7580,8 @@ \cs_if_exist:cTF { \c__msg_text_prefix_tl #1 / #2 } { \prg_return_true: } { \prg_return_false: } } +\__debug_patch:nnNw { } + { \__debug_log:x { Defining~message~ #1 / #2 ~\msg_line_context: } } \cs_new_protected:Npn \__chk_if_free_msg:nn #1#2 { \msg_if_exist:nnT {#1} {#2} @@ -7577,17 +7590,6 @@ {#1} {#2} } } -\if_bool:N \l@expl@log@functions@bool - \cs_gset_protected:Npn \__chk_if_free_msg:nn #1#2 - { - \msg_if_exist:nnT {#1} {#2} - { - \__msg_kernel_error:nnxx { kernel } { message-already-defined } - {#1} {#2} - } - \__chk_log:x { Defining~message~ #1 / #2 ~\msg_line_context: } - } -\fi: \cs_new_protected:Npn \msg_new:nnnn #1#2 { \__chk_if_free_msg:nn {#1} {#2} @@ -7621,7 +7623,7 @@ \tl_const:Nn \c__msg_continue_text_tl { Type~<return>~to~continue } \tl_const:Nn \c__msg_critical_text_tl - { Reading~the~current~file~'\g_file_current_name_tl'~will~stop. } + { Reading~the~current~file~'\g_file_curr_name_str'~will~stop. } \tl_const:Nn \c__msg_fatal_text_tl { This~is~a~fatal~error:~LaTeX~will~abort. } \tl_const:Nn \c__msg_help_text_tl @@ -7678,7 +7680,6 @@ |............................................... } } - \group_begin: \char_set_lccode:nn {`\{} {`\ } \char_set_lccode:nn {`\}} {`\ } @@ -8183,19 +8184,6 @@ LaTeX~has~been~asked~to~define~the~conditional~form~'#1'~of~ the~function~'#2',~but~only~'TF',~'T',~'F',~and~'p'~forms~exist. } -\bool_if:NT \l@expl@check@declarations@bool - { - \__msg_kernel_new:nnnn { check } { non-declared-variable } - { The~variable~#1~has~not~been~declared~\msg_line_context:. } - { - Checking~is~active,~and~you~have~tried~do~so~something~like: \\ - \ \ \tl_set:Nn ~ #1 ~ \{ ~ ... ~ \} \\ - without~first~having: \\ - \ \ \tl_new:N ~ #1 \\ - \\ - LaTeX~will~create~the~variable~and~continue. - } - } \__msg_kernel_new:nnnn { kernel } { scanmark-already-defined } { Scan~mark~#1~already~defined. } { @@ -8226,6 +8214,32 @@ with~a~signature~starting~with~'#1',~but~cannot~change~an~argument~ from~type~'#3'~to~type~'#4'. } +\bool_if:NTF \l@expl@enable@debug@bool + { + \__msg_kernel_new:nnn { kernel } { debug-unpatchable } + { Only~some~definitions~can~be~patched;~'#3'~cannot. } + \__msg_kernel_new:nnnn { check } { non-declared-variable } + { The~variable~#1~has~not~been~declared~\msg_line_context:. } + { + Checking~is~active,~and~you~have~tried~do~so~something~like: \\ + \ \ \tl_set:Nn ~ #1 ~ \{ ~ ... ~ \} \\ + without~first~having: \\ + \ \ \tl_new:N ~ #1 \\ + \\ + LaTeX~will~create~the~variable~and~continue. + } + } + { + \__msg_kernel_new:nnnn { kernel } { enable-debug } + { To~use~'#1'~load~expl3~with~the~'enable-debug'~option. } + { + The~function~'#1'~will~be~ignored~because~it~can~only~work~if~ + some~internal~functions~in~expl3~have~been~appropriately~ + defined.~This~only~happens~if~one~of~the~options~ + 'enable-debug',~'check-declarations'~or~'log-functions'~was~ + given~when~loading~expl3. + } + } \__msg_kernel_new:nnn { kernel } { bad-variable } { Erroneous~variable~#1 used! } \__msg_kernel_new:nnn { kernel } { misused-sequence } @@ -8403,166 +8417,225 @@ \ \ => \ \ \tl_to_str:n {#2} } %% File: l3file.dtx Copyright (C) 1990-2017 The LaTeX3 Project -\tl_new:N \g_file_current_name_tl +\str_new:N \g_file_curr_dir_str +\str_new:N \g_file_curr_ext_str +\str_new:N \g_file_curr_name_str \cs_if_exist:NT \@currname - { \tl_gset_eq:NN \g_file_current_name_tl \@currname } + { \str_gset_eq:NN \g_file_curr_name_str \@currname } \seq_new:N \g__file_stack_seq -\seq_new:N \g__file_record_seq -\tl_new:N \l__file_internal_tl -\tl_new:N \l__file_internal_name_tl -\seq_new:N \l__file_search_path_seq -\seq_new:N \l__file_saved_search_path_seq -\seq_new:N \l__file_internal_seq -\cs_new_protected:Npn \__file_name_sanitize:nn #1#2 - { - \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_name_tl {#1} - \tl_set:Nx \l__file_internal_name_tl - { \tl_to_str:N \l__file_internal_name_tl } - \int_compare:nNnTF - { - \int_mod:nn - { - 0 \tl_map_function:NN \l__file_internal_name_tl - \__file_name_sanitize_aux:n - } - { 2 } - } - = 0 +\group_begin: + \cs_set_protected:Npn \__file_tmp:w #1#2#3 + { + \tl_if_blank:nTF {#1} { - \tl_remove_all:Nn \l__file_internal_name_tl { " } - \tl_if_in:NnT \l__file_internal_name_tl { ~ } + \cs_set:Npn \__file_tmp:w ##1 " ##2 " ##3 \q_stop { { } {##2} { } } + \seq_gput_right:Nx \g__file_stack_seq { - \tl_set:Nx \l__file_internal_name_tl - { " \exp_not:V \l__file_internal_name_tl " } + \exp_after:wN \__file_tmp:w \tex_jobname:D + " \tex_jobname:D " \q_stop } } { - \__msg_kernel_error:nnx - { kernel } { unbalanced-quote-in-filename } - { \l__file_internal_name_tl } + \seq_gput_right:Nn \g__file_stack_seq { { } {#1} {#2} } + \__file_tmp:w } - \use:x + } + \cs_if_exist:NT \@currnamestack + { \exp_after:wN \__file_tmp:w \@currnamestack } +\group_end: +\seq_new:N \g__file_record_seq +\tl_new:N \l__file_tmp_tl +\str_new:N \l__file_base_name_str +\str_new:N \l__file_full_name_str +\str_new:N \l__file_dir_str +\str_new:N \l__file_ext_str +\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 \__file_name_sanitize:nN #1#2 + { + \group_begin: + \seq_map_inline:Nn \l_char_active_seq { - \group_end: - \exp_not:n {#2} { \l__file_internal_name_tl } + \tl_set:Nx \l__file_tmp_tl { \iow_char:N ##1 } + \char_set_active_eq:NN ##1 \l__file_tmp_tl } + \tl_set:Nx \l__file_tmp_tl {#1} + \tl_set:Nx \l__file_tmp_tl + { \tl_to_str:N \l__file_tmp_tl } + \exp_args:NNNV \group_end: + \str_set:Nn #2 \l__file_tmp_tl } -\cs_new:Npn \__file_name_sanitize_aux:n #1 - { \token_if_eq_charcode:NNT #1 " { + 1 } } -\cs_new_protected:Npn \file_add_path:nN #1 - { \__file_name_sanitize:nn {#1} { \__file_add_path:nN } } -\cs_new_protected:Npn \__file_add_path:nN #1#2 - { - \__ior_open:Nn \g__file_internal_ior {#1} - \ior_if_eof:NTF \g__file_internal_ior - { \__file_add_path_search:nN {#1} #2 } - { \tl_set:Nn #2 {#1} } - \ior_close:N \g__file_internal_ior +\cs_new_protected:Npn \__file_name_quote:nN #1#2 + { + \str_set:Nx #2 {#1} + \int_if_even:nF + { 0 \tl_map_function:NN #2 \__file_name_quote_aux:n } + { + \__msg_kernel_error:nnx + { kernel } { unbalanced-quote-in-filename } {#2} + } + \tl_remove_all:Nn #2 { " } + \tl_if_in:NnT #2 { ~ } + { \str_set:Nx #2 { " \exp_not:V #2 " } } } -\cs_new_protected:Npn \__file_add_path_search:nN #1#2 +\cs_new:Npn \__file_name_quote_aux:n #1 + { \token_if_eq_charcode:NNT #1 " { + 1 } } +\cs_new_protected:Npn \file_get_full_name:nN #1#2 { - \tl_set:Nn #2 { \q_no_value } + \__file_name_sanitize:nN {#1} \l__file_base_name_str + \__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 { - \seq_set_eq:NN \l__file_saved_search_path_seq - \l__file_search_path_seq - \seq_set_split:NnV \l__file_internal_seq { , } \input@path - \seq_concat:NNN \l__file_search_path_seq - \l__file_search_path_seq \l__file_internal_seq + \tl_map_inline:Nn \input@path + { \__file_get_full_name_search:nN { ##1 } \tl_map_break:n } } - \seq_map_inline:Nn \l__file_search_path_seq + \str_clear:N \l__file_full_name_str + \__prg_break_point: + \str_if_empty:NF \l__file_full_name_str { - \__ior_open:Nn \g__file_internal_ior { ##1 #1 } - \ior_if_eof:NF \g__file_internal_ior + \exp_args:NV \file_parse_full_name:nNNN \l__file_full_name_str + \l__file_dir_str \l__file_name_str \l__file_ext_str + \str_if_empty:NT \l__file_ext_str { - \tl_set:Nx #2 { ##1 #1 } - \seq_map_break: + \__ior_open:No \g__file_internal_ior + { \l__file_full_name_str .tex } + \ior_if_eof:NF \g__file_internal_ior + { \str_put_right:Nn \l__file_full_name_str { .tex } } } } - \cs_if_exist:NT \input@path - { - \seq_set_eq:NN \l__file_search_path_seq - \l__file_saved_search_path_seq - } + \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_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 + \__ior_open:No \g__file_internal_ior \l__file_full_name_str + \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_add_path:nN {#1} \l__file_internal_name_tl - \quark_if_no_value:NTF \l__file_internal_name_tl + \file_get_full_name:nN {#1} \l__file_full_name_str + \str_if_empty:NTF \l__file_full_name_str { \prg_return_false: } { \prg_return_true: } } -\cs_new_protected:Npn \file_input:n #1 +\cs_new_protected:Npn \__file_missing:n #1 { - \__file_if_exist:nT {#1} - { \__file_input:V \l__file_internal_name_tl } + \__file_name_sanitize:nN {#1} \l__file_base_name_str + \__msg_kernel_error:nnx { kernel } { file-not-found } + { \l__file_base_name_str } } -\cs_new_protected:Npn \__file_if_exist:nT #1#2 +\cs_new_protected:Npn \file_input:n #1 { - \file_if_exist:nTF {#1} - {#2} - { - \__file_name_sanitize:nn {#1} - { \__msg_kernel_error:nnx { kernel } { file-not-found } } - } + \file_get_full_name:nN {#1} \l__file_full_name_str + \str_if_empty:NTF \l__file_full_name_str + { \__file_missing:n {#1} } + { \__file_input:V \l__file_full_name_str } } \cs_new_protected:Npn \__file_input:n #1 { - \tl_if_in:nnTF {#1} { . } - { \__file_input_aux:n {#1} } - { \__file_input_aux:o { \tl_to_str:n { #1 . tex } } } - } -\cs_generate_variant:Nn \__file_input:n { V } -\cs_new_protected:Npn \__file_input_aux:n #1 - { \clist_if_exist:NTF \@filelist { \@addtofilelist {#1} } { \seq_gput_right:Nn \g__file_record_seq {#1} } - \seq_gpush:No \g__file_stack_seq \g_file_current_name_tl - \tl_gset:Nn \g_file_current_name_tl {#1} + \__file_input_push:n {#1} \tex_input:D #1 \c_space_tl - \seq_gpop:NN \g__file_stack_seq \l__file_internal_tl - \tl_gset_eq:NN \g_file_current_name_tl \l__file_internal_tl + \__file_input_pop: } -\cs_generate_variant:Nn \__file_input_aux:n { o } -\cs_new_protected:Npn \file_path_include:n #1 - { \__file_name_sanitize:nn {#1} { \__file_path_include:n } } -\cs_new_protected:Npn \__file_path_include:n #1 +\cs_generate_variant:Nn \__file_input:n { V } +\cs_new_protected:Npn \__file_input_push:n #1 { - \seq_if_in:NnF \l__file_search_path_seq {#1} - { \seq_put_right:Nn \l__file_search_path_seq {#1} } + \seq_gpush:Nx \g__file_stack_seq + { + { \g_file_curr_dir_str } + { \g_file_curr_name_str } + { \g_file_curr_ext_str } + } + \file_parse_full_name:nNNN {#1} + \l__file_dir_str \l__file_name_str \l__file_ext_str + \str_gset_eq:NN \g_file_curr_dir_str \l__file_dir_str + \str_gset_eq:NN \g_file_curr_name_str \l__file_name_str + \str_gset_eq:NN \g_file_curr_ext_str \l__file_ext_str } -\cs_new_protected:Npn \file_path_remove:n #1 +\cs_new_protected:Npn \__file_input_pop: { - \__file_name_sanitize:nn {#1} - { \seq_remove_all:Nn \l__file_search_path_seq } + \seq_gpop:NN \g__file_stack_seq \l__file_tmp_tl + \exp_after:wN \__file_input_pop:nnn \l__file_tmp_tl } -\cs_new_protected:Npn \file_list: +\cs_new_protected:Npn \__file_input_pop:nnn #1#2#3 { - \seq_set_eq:NN \l__file_internal_seq \g__file_record_seq - \clist_if_exist:NT \@filelist + \str_gset:Nn \g_file_curr_dir_str {#1} + \str_gset:Nn \g_file_curr_name_str {#2} + \str_gset:Nn \g_file_curr_ext_str {#3} + } +\cs_new_protected:Npn \file_parse_full_name:nNNN #1#2#3#4 + { + \exp_after:wN \__file_parse_full_name_auxi:w + \tl_to_str:n { #1 " #1 " } \q_stop #2#3#4 + } +\cs_new_protected:Npn \__file_parse_full_name_auxi:w #1 " #2 " #3 \q_stop #4#5#6 + { + \__file_parse_full_name_split:nNNNTF {#2} / #4 #5 + { \str_if_empty:NT #4 { \str_set:Nn #4 { / } } } + { } + \exp_args:No \__file_parse_full_name_split:nNNNTF {#5} . #5 #6 + { \str_put_left:Nn #6 { . } } + { + \str_set_eq:NN #5 #6 + \str_clear:N #6 + } + } +\cs_new_protected:Npn \__file_parse_full_name_split:nNNNTF #1#2#3#4 + { + \cs_set_protected:Npn \__file_tmp:w ##1 ##2 #2 ##3 \q_stop { - \clist_map_inline:Nn \@filelist + \tl_if_empty:nTF {##3} { - \seq_put_right:No \l__file_internal_seq - { \tl_to_str:n {##1} } + \str_set:Nn #4 {##2} + \tl_if_empty:nTF {##1} + { + \str_clear:N #3 + \use_ii:nn + } + { + \str_set:Nx #3 { \str_tail:n {##1} } + \use_i:nn + } } + { \__file_tmp:w { ##1 #2 ##2 } ##3 \q_stop } + } + \__file_tmp:w { } #1 #2 \q_stop + } +\cs_new_protected:Npn \file_show_list: + { + \seq_clear:N \l__file_tmp_seq + \clist_if_exist:NT \@filelist + { + \exp_args:NNx \seq_set_from_clist:Nn \l__file_tmp_seq + { \tl_to_str:N \@filelist } + } + \seq_concat:NNN \l__file_tmp_seq \l__file_tmp_seq \g__file_record_seq + \seq_remove_duplicates:N \l__file_tmp_seq + \__msg_show_wrap:n + { + >~File~List~< \\ + \seq_map_function:NN \l__file_tmp_seq \__file_list_aux:n + ............ } - \seq_remove_duplicates:N \l__file_internal_seq - \iow_log:n { *~File~List~* } - \seq_map_inline:Nn \l__file_internal_seq { \iow_log:n {##1} } - \iow_log:n { ************* } } +\cs_new:Npn \__file_list_aux:n #1 { #1 \\ } +\cs_new_protected:Npn \file_log_list: + { \__msg_log_next: \file_show_list: } \AtBeginDocument { - \clist_map_inline:Nn \@filelist - { \seq_gput_right:No \g__file_record_seq { \tl_to_str:n {#1} } } + \exp_args:NNx \seq_set_from_clist:Nn \l__file_tmp_seq + { \tl_to_str:N \@filelist } + \seq_gconcat:NNN \g__file_record_seq \g__file_record_seq \l__file_tmp_seq } \int_const:Nn \c_term_ior { 16 } \seq_new:N \g__ior_streams_seq @@ -8585,30 +8658,21 @@ \cs_new_protected:Npn \ior_new:N #1 { \cs_new_eq:NN #1 \c_term_ior } \cs_generate_variant:Nn \ior_new:N { c } \cs_new_protected:Npn \ior_open:Nn #1#2 - { \__file_name_sanitize:nn {#2} { \__ior_open_aux:Nn #1 } } + { \ior_open:NnF #1 {#2} { \__file_missing:n {#2} } } \cs_generate_variant:Nn \ior_open:Nn { c } -\cs_new_protected:Npn \__ior_open_aux:Nn #1#2 - { - \file_add_path:nN {#2} \l__file_internal_name_tl - \quark_if_no_value:NTF \l__file_internal_name_tl - { \__msg_kernel_error:nnx { kernel } { file-not-found } {#2} } - { \__ior_open:No #1 \l__file_internal_name_tl } - } \prg_new_protected_conditional:Npnn \ior_open:Nn #1#2 { T , F , TF } - { \__file_name_sanitize:nn {#2} { \__ior_open_aux:NnTF #1 } } -\cs_generate_variant:Nn \ior_open:NnT { c } -\cs_generate_variant:Nn \ior_open:NnF { c } -\cs_generate_variant:Nn \ior_open:NnTF { c } -\cs_new_protected:Npn \__ior_open_aux:NnTF #1#2 { - \file_add_path:nN {#2} \l__file_internal_name_tl - \quark_if_no_value:NTF \l__file_internal_name_tl + \file_get_full_name:nN {#2} \l__file_full_name_str + \str_if_empty:NTF \l__file_full_name_str { \prg_return_false: } { - \__ior_open:No #1 \l__file_internal_name_tl + \__ior_open:No #1 \l__file_full_name_str \prg_return_true: } } +\cs_generate_variant:Nn \ior_open:NnT { c } +\cs_generate_variant:Nn \ior_open:NnF { c } +\cs_generate_variant:Nn \ior_open:NnTF { c } \exp_args:NNf \cs_new_protected:Npn \__ior_new:N { \exp_args:NNc \exp_after:wN \exp_stop_f: { newread } } \cs_new_protected:Npn \__ior_open:Nn #1#2 @@ -8641,9 +8705,11 @@ } } \cs_generate_variant:Nn \ior_close:N { c } -\cs_new_protected:Npn \ior_list_streams: - { \__ior_list_streams:Nn \g__ior_streams_prop { ior } } -\cs_new_protected:Npn \__ior_list_streams:Nn #1#2 +\cs_new_protected:Npn \ior_show_list: + { \__ior_list:Nn \g__ior_streams_prop { ior } } +\cs_new_protected:Npn \ior_log_list: + { \__msg_log_next: \ior_show_list: } +\cs_new_protected:Npn \__ior_list:Nn #1#2 { \__msg_show_pre:nnxxxx { LaTeX / kernel } { show-streams } {#2} { \prop_if_empty:NF #1 { ? } } { } { } @@ -8743,26 +8809,25 @@ \exp_args:NNf \cs_new_protected:Npn \__iow_new:N { \exp_args:NNc \exp_after:wN \exp_stop_f: { newwrite } } \cs_new_protected:Npn \iow_open:Nn #1#2 - { \__file_name_sanitize:nn {#2} { \__iow_open:Nn #1 } } -\cs_generate_variant:Nn \iow_open:Nn { c } -\cs_new_protected:Npn \__iow_open:Nn #1#2 { + \__file_name_sanitize:nN {#2} \l__file_base_name_str \iow_close:N #1 \seq_gpop:NNTF \g__iow_streams_seq \l__iow_stream_tl - { \__iow_open_stream:Nn #1 {#2} } + { \__iow_open_stream:NV #1 \l__file_base_name_str } { \__iow_new:N #1 \tl_set:Nx \l__iow_stream_tl { \int_eval:n {#1} } - \__iow_open_stream:Nn #1 {#2} + \__iow_open_stream:NV #1 \l__file_base_name_str } } -\cs_generate_variant:Nn \__iow_open:Nn { No } +\cs_generate_variant:Nn \iow_open:Nn { c } \cs_new_protected:Npn \__iow_open_stream:Nn #1#2 { \tex_global:D \tex_chardef:D #1 = \l__iow_stream_tl \scan_stop: \prop_gput:NVn \g__iow_streams_prop #1 {#2} \tex_immediate:D \tex_openout:D #1 #2 \scan_stop: } +\cs_generate_variant:Nn \__iow_open_stream:Nn { NV } \cs_new_protected:Npn \iow_close:N #1 { \int_compare:nT { - \c_log_iow < #1 < \c_term_iow } @@ -8775,9 +8840,11 @@ } } \cs_generate_variant:Nn \iow_close:N { c } -\cs_new_protected:Npn \iow_list_streams: - { \__iow_list_streams:Nn \g__iow_streams_prop { iow } } -\cs_new_eq:NN \__iow_list_streams:Nn \__ior_list_streams:Nn +\cs_new_protected:Npn \iow_show_list: + { \__iow_list:Nn \g__iow_streams_prop { iow } } +\cs_new_protected:Npn \iow_log_list: + { \__msg_log_next: \iow_show_list: } +\cs_new_eq:NN \__iow_list:Nn \__ior_list:Nn \cs_new_protected:Npn \iow_shipout_x:Nn #1#2 { \tex_write:D #1 {#2} } \cs_generate_variant:Nn \iow_shipout_x:Nn { c, Nx, cx } @@ -9118,6 +9185,43 @@ which~will~be~wrapped~using~#1.~ It~was~called~with~argument~'#3'. } +\tl_new:N \g_file_current_name_tl +\tl_gset:Nn \g_file_current_name_tl { \g_file_curr_name_str } +\cs_new_protected:Npn \file_path_include:n #1 + { + \__msg_kernel_warning:nnxxx { kernel } { deprecated-command } + { 2018-12-31 } + { \token_to_str:N \file_path_include:n } + { + \token_to_str:N \seq_put_right:Nn \c_space_tl + \token_to_str:N \l_file_search_path_seq + } + \__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 } + } +\cs_new_protected:Npn \file_path_remove:n #1 + { + \__msg_kernel_warning:nnxxx { kernel } { deprecated-command } + { 2018-12-31 } + { \token_to_str:N \file_path_remove:n } + { + \token_to_str:N \seq_remove_all:Nn \c_space_tl + \token_to_str:N \l_file_search_path_seq + } + \__file_name_sanitize:nN {#1} \l__file_full_name_str + \seq_remove_all:NV \l_file_search_path_seq \l__file_full_name_str + } +\cs_new_protected:Npn \file_add_path:nN #1#2 + { + \__msg_kernel_warning:nnxxx { kernel } { deprecated-command } + { 2018-12-31 } + { \token_to_str:N \file_add_path:nN } + { \token_to_str:N \file_get_full_name:nN } + \file_get_full_name:nN {#1} #2 + \str_if_empty:NT #2 + { \tl_set:Nn #2 { \q_no_value } } + } \cs_new_protected:Npn \ior_get_str:NN { \__msg_kernel_warning:nnxxx { kernel } { deprecated-command } @@ -9127,6 +9231,51 @@ \cs_gset_eq:NN \ior_get_str:NN \ior_str_get:NN \ior_str_get:NN } +\cs_new_protected:Npn \file_list: + { + \__msg_kernel_warning:nnxxx { kernel } { deprecated-command } + { 2018-12-31 } + { \token_to_str:N \file_list: } + { \token_to_str:N \file_log_list: } + \cs_gset_eq:NN \file_list: \file_log_list: + \file_log_list: + } +\cs_new_protected:Npn \ior_list_streams: + { + \__msg_kernel_warning:nnxxx { kernel } { deprecated-command } + { 2018-12-31 } + { \token_to_str:N \ior_list_streams: } + { \token_to_str:N \ior_show_list: } + \cs_gset_eq:NN \ior_list_streams: \ior_show_list: + \ior_show_list: + } +\cs_new_protected:Npn \ior_log_streams: + { + \__msg_kernel_warning:nnxxx { kernel } { deprecated-command } + { 2018-12-31 } + { \token_to_str:N \ior_log_streams: } + { \token_to_str:N \ior_log_list: } + \cs_gset_eq:NN \ior_log_streams: \ior_log_list: + \ior_log_list: + } +\cs_new_protected:Npn \iow_list_streams: + { + \__msg_kernel_warning:nnxxx { kernel } { deprecated-command } + { 2018-12-31 } + { \token_to_str:N \iow_list_streams: } + { \token_to_str:N \iow_show_list: } + \cs_gset_eq:NN \iow_list_streams: \iow_show_list: + \iow_show_list: + } +\cs_new_protected:Npn \iow_log_streams: + { + \__msg_kernel_warning:nnxxx { kernel } { deprecated-command } + { 2018-12-31 } + { \token_to_str:N \iow_log_streams: } + { \token_to_str:N \iow_log_list: } + \cs_gset_eq:NN \iow_log_streams: \iow_log_list: + \iow_log_list: + } %% File: l3skip.dtx Copyright (C) 2004-2011 Frank Mittelbach, The LaTeX3 Project %% (C) 2012-2017 The LaTeX3 Project \cs_new_eq:NN \if_dim:w \tex_ifdim:D @@ -9213,7 +9362,7 @@ \cs_new:Npn \dim_ratio:nn #1#2 { \__dim_ratio:n {#1} / \__dim_ratio:n {#2} } \cs_new:Npn \__dim_ratio:n #1 - { \__int_value:w \__dim_eval:w #1 \__dim_eval_end: } + { \__int_value:w \__dim_eval:w (#1) \__dim_eval_end: } \prg_new_conditional:Npnn \dim_compare:nNn #1#2#3 { p , T , F , TF } { \if_dim:w \__dim_eval:w #1 #2 \__dim_eval:w #3 \__dim_eval_end: @@ -9873,12 +10022,14 @@ } } } -\cs_new_protected:Npn \__keys_cmd_set:nn #1#2 +\__debug_patch:nnNw { \cs_if_exist:cF { \c__keys_code_root_tl #1 } - { \__chk_log:x { Defining~key~#1~\msg_line_context: } } - \cs_set_protected:cpn { \c__keys_code_root_tl #1 } ##1 {#2} + { \__debug_log:x { Defining~key~#1~\msg_line_context: } } } + { } +\cs_new_protected:Npn \__keys_cmd_set:nn #1#2 + { \cs_set_protected:cpn { \c__keys_code_root_tl #1 } ##1 {#2} } \cs_generate_variant:Nn \__keys_cmd_set:nn { nx , Vn , Vo } \cs_new_protected:Npn \__keys_default_set:n #1 { @@ -9903,7 +10054,7 @@ \tex_undefined:D } { - \clist_set_eq:cN { \c__keys_groups_root_tl \l_keys_path_tl } + \cs_set_eq:cN { \c__keys_groups_root_tl \l_keys_path_tl } \l__keys_groups_clist } } @@ -16159,14 +16310,14 @@ \cs_new_protected:Npn \__sort_return_mark:N #1 { } \cs_new_protected:Npn \__sort_return_none_error: { - \__msg_kernel_error:nnxx { sort } { return-none } + \__msg_kernel_error:nnxx { kernel } { return-none } { \tex_the:D \tex_toks:D \l__sort_A_int } { \tex_the:D \tex_toks:D \l__sort_C_int } \__sort_return_same: } \cs_new_protected:Npn \__sort_return_two_error:w #1 \__sort_return_none_error: - { \__msg_kernel_error:nn { sort } { return-two } } + { \__msg_kernel_error:nn { kernel } { return-two } } \cs_new_protected:Npn \__sort_return_same: { \tex_toks:D \l__sort_B_int \tex_toks:D \l__sort_C_int @@ -16288,12 +16439,12 @@ { \cs_set_eq:NN \toksdef \__sort_disabled_toksdef:n } \cs_new_protected:Npn \__sort_disabled_toksdef:n #1 { - \__msg_kernel_error:nnx { sort } { toksdef } + \__msg_kernel_error:nnx { kernel } { toksdef } { \token_to_str:N #1 } \__sort_error: \tex_toksdef:D #1 } -\__msg_kernel_new:nnnn { sort } { toksdef } +\__msg_kernel_new:nnnn { kernel } { toksdef } { Allocation~of~\iow_char:N\\toks~registers~impossible~while~sorting. } { The~comparison~code~used~for~sorting~a~list~has~attempted~to~ @@ -16303,20 +16454,20 @@ \cs_new_protected:Npn \__sort_too_long_error:NNw #1#2 \fi: { \fi: - \__msg_kernel_error:nnxxx { sort } { too-large } + \__msg_kernel_error:nnxxx { kernel } { too-large } { \token_to_str:N #2 } { \int_eval:n { \l__sort_true_max_int - \l__sort_min_int } } { \int_eval:n { \l__sort_top_int - \l__sort_min_int } } #1 \__sort_error: } -\__msg_kernel_new:nnnn { sort } { too-large } +\__msg_kernel_new:nnnn { kernel } { too-large } { The~list~#1~is~too~long~to~be~sorted~by~TeX. } { TeX~has~#2~toks~registers~still~available:~ this~only~allows~to~sort~with~up~to~#3~ items.~All~extra~items~will~be~deleted. } -\__msg_kernel_new:nnnn { sort } { return-none } +\__msg_kernel_new:nnnn { kernel } { return-none } { The~comparison~code~did~not~return. } { When~sorting~a~list,~the~code~to~compare~items~#1~and~#2~ @@ -16325,7 +16476,7 @@ \iow_char:N\\sort_return_swapped: .~ Exactly~one~of~these~should~be~called. } -\__msg_kernel_new:nnnn { sort } { return-two } +\__msg_kernel_new:nnnn { kernel } { return-two } { The~comparison~code~returned~multiple~times. } { When~sorting~a~list,~the~code~to~compare~items~called~ @@ -16870,10 +17021,10 @@ } \cs_new_protected:Npn \__regex_toks_put_right:Nn #1#2 { \tex_toks:D #1 \exp_after:wN { \tex_the:D \tex_toks:D #1 #2 } } -\cs_new:Npn \__regex_current_cs_to_str: +\cs_new:Npn \__regex_curr_cs_to_str: { \exp_after:wN \exp_after:wN \exp_after:wN \cs_to_str:N - \tex_the:D \tex_toks:D \l__regex_current_pos_int + \tex_the:D \tex_toks:D \l__regex_curr_pos_int } \cs_new:Npn \__regex_tmp:w { } \tl_new:N \l__regex_internal_a_tl @@ -16908,21 +17059,21 @@ } \cs_new_protected:Npn \__regex_item_caseful_equal:n #1 { - \if_int_compare:w #1 = \l__regex_current_char_int + \if_int_compare:w #1 = \l__regex_curr_char_int \exp_after:wN \__regex_break_true:w \fi: } \cs_new_protected:Npn \__regex_item_caseful_range:nn #1 #2 { - \reverse_if:N \if_int_compare:w #1 > \l__regex_current_char_int - \reverse_if:N \if_int_compare:w #2 < \l__regex_current_char_int + \reverse_if:N \if_int_compare:w #1 > \l__regex_curr_char_int + \reverse_if:N \if_int_compare:w #2 < \l__regex_curr_char_int \exp_after:wN \exp_after:wN \exp_after:wN \__regex_break_true:w \fi: \fi: } \cs_new_protected:Npn \__regex_item_caseless_equal:n #1 { - \if_int_compare:w #1 = \l__regex_current_char_int + \if_int_compare:w #1 = \l__regex_curr_char_int \exp_after:wN \__regex_break_true:w \fi: \if_int_compare:w \l__regex_case_changed_char_int = \c_max_int @@ -16934,8 +17085,8 @@ } \cs_new_protected:Npn \__regex_item_caseless_range:nn #1 #2 { - \reverse_if:N \if_int_compare:w #1 > \l__regex_current_char_int - \reverse_if:N \if_int_compare:w #2 < \l__regex_current_char_int + \reverse_if:N \if_int_compare:w #1 > \l__regex_curr_char_int + \reverse_if:N \if_int_compare:w #2 < \l__regex_curr_char_int \exp_after:wN \exp_after:wN \exp_after:wN \__regex_break_true:w \fi: \fi: @@ -16950,15 +17101,15 @@ } \cs_new_protected:Npn \__regex_compute_case_changed_char: { - \int_set_eq:NN \l__regex_case_changed_char_int \l__regex_current_char_int - \if_int_compare:w \l__regex_current_char_int > `Z \exp_stop_f: - \if_int_compare:w \l__regex_current_char_int > `z \exp_stop_f: \else: - \if_int_compare:w \l__regex_current_char_int < `a \exp_stop_f: \else: + \int_set_eq:NN \l__regex_case_changed_char_int \l__regex_curr_char_int + \if_int_compare:w \l__regex_curr_char_int > `Z \exp_stop_f: + \if_int_compare:w \l__regex_curr_char_int > `z \exp_stop_f: \else: + \if_int_compare:w \l__regex_curr_char_int < `a \exp_stop_f: \else: \int_sub:Nn \l__regex_case_changed_char_int { \c__regex_ascii_lower_int } \fi: \fi: \else: - \if_int_compare:w \l__regex_current_char_int < `A \exp_stop_f: \else: + \if_int_compare:w \l__regex_curr_char_int < `A \exp_stop_f: \else: \int_add:Nn \l__regex_case_changed_char_int { \c__regex_ascii_lower_int } \fi: \fi: @@ -16968,7 +17119,7 @@ \cs_new_protected:Npn \__regex_item_catcode: { " - \if_case:w \l__regex_current_catcode_int + \if_case:w \l__regex_curr_catcode_int 1 \or: 4 \or: 10 \or: 40 \or: 100 \or: \or: 1000 \or: 4000 \or: 10000 \or: \or: 100000 \or: 400000 @@ -16987,18 +17138,18 @@ { \__regex_item_catcode:nT {#1} { \__regex_item_reverse:n {#2} } } \cs_new_protected:Npn \__regex_item_exact:nn #1#2 { - \if_int_compare:w #1 = \l__regex_current_catcode_int - \if_int_compare:w #2 = \l__regex_current_char_int + \if_int_compare:w #1 = \l__regex_curr_catcode_int + \if_int_compare:w #2 = \l__regex_curr_char_int \exp_after:wN \exp_after:wN \exp_after:wN \__regex_break_true:w \fi: \fi: } \cs_new_protected:Npn \__regex_item_exact_cs:n #1 { - \int_compare:nNnTF \l__regex_current_catcode_int = 0 + \int_compare:nNnTF \l__regex_curr_catcode_int = 0 { \tl_set:Nx \l__regex_internal_a_tl - { \scan_stop: \__regex_current_cs_to_str: \scan_stop: } + { \scan_stop: \__regex_curr_cs_to_str: \scan_stop: } \tl_if_in:noTF { \scan_stop: #1 \scan_stop: } \l__regex_internal_a_tl { \__regex_break_true:w } { } } @@ -17006,10 +17157,10 @@ } \cs_new_protected:Npn \__regex_item_cs:n #1 { - \int_compare:nNnT \l__regex_current_catcode_int = 0 + \int_compare:nNnT \l__regex_curr_catcode_int = 0 { \group_begin: - \tl_set:Nx \l__regex_cs_name_tl { \__regex_current_cs_to_str: } + \tl_set:Nx \l__regex_cs_name_tl { \__regex_curr_cs_to_str: } \__regex_single_match: \__regex_disable_submatches: \__regex_build_for_cs:n {#1} @@ -17134,7 +17285,7 @@ \cs_new:cpn { __regex_escape_/break:w } { \if_false: { \fi: } - \__msg_kernel_error:nn { regex } { trailing-backslash } + \__msg_kernel_error:nn { kernel } { trailing-backslash } \exp_after:wN \use_none:n \exp_after:wN { \if_false: } \fi: } \cs_new:cpn { __regex_escape_~:w } { } @@ -17161,7 +17312,7 @@ { \if_false: { \fi: } \__tl_build_one:o \l__regex_internal_b_tl - \__msg_kernel_error:nnx { regex } { x-overflow } {#1} + \__msg_kernel_error:nnx { kernel } { x-overflow } {#1} \tl_set:Nx \l__regex_internal_b_tl { \if_false: } \fi: } @@ -17225,7 +17376,7 @@ { \if_false: { \fi: } \__tl_build_one:o \l__regex_internal_b_tl - \__msg_kernel_error:nnx { regex } { x-missing-rbrace } {#1} + \__msg_kernel_error:nnx { kernel } { x-missing-rbrace } {#1} \tl_set:Nx \l__regex_internal_b_tl { \if_false: } \fi: \__regex_escape_loop:N #1 } @@ -17390,7 +17541,7 @@ \if_int_compare:w \l__regex_mode_int = \c__regex_class_mode_int \exp_after:wN \exp_after:wN \exp_after:wN \use:n \else: - \__msg_kernel_error:nn { regex } { c-bad-mode } + \__msg_kernel_error:nn { kernel } { c-bad-mode } \exp_after:wN \exp_after:wN \exp_after:wN \use_none:n \fi: \fi: @@ -17419,13 +17570,13 @@ { \__regex_if_in_class:TF { - \__msg_kernel_error:nn { regex } { missing-rbrack } + \__msg_kernel_error:nn { kernel } { missing-rbrack } \use:c { __regex_compile_]: } \prg_do_nothing: \prg_do_nothing: } { } \if_int_compare:w \l__regex_group_level_int > 0 \exp_stop_f: - \__msg_kernel_error:nnx { regex } { missing-rparen } + \__msg_kernel_error:nnx { kernel } { missing-rparen } { \int_use:N \l__regex_group_level_int } \prg_replicate:nn { \l__regex_group_level_int } @@ -17461,10 +17612,10 @@ \prg_do_nothing: \prg_do_nothing: \prg_do_nothing: \prg_do_nothing: \int_compare:nNnT \l__regex_mode_int = \c__regex_catcode_mode_int - { \__msg_kernel_error:nn { regex } { c-trailing } } + { \__msg_kernel_error:nn { kernel } { c-trailing } } \int_compare:nNnT \l__regex_mode_int < \c__regex_outer_mode_int { - \__msg_kernel_error:nn { regex } { c-missing-rbrace } + \__msg_kernel_error:nn { kernel } { c-missing-rbrace } \__regex_compile_end_cs: \prg_do_nothing: \prg_do_nothing: \prg_do_nothing: \prg_do_nothing: @@ -17524,7 +17675,7 @@ \cs_new_protected:Npn \__regex_compile_quantifier_abort:xNN #1#2#3 { \__regex_compile_quantifier_none: - \__msg_kernel_warning:nnxx { regex } { invalid-quantifier } {#1} {#3} + \__msg_kernel_warning:nnxx { kernel } { invalid-quantifier } {#1} {#3} \__regex_compile_abort_tokens:x {#1} #2 #3 } @@ -17591,7 +17742,7 @@ { #1 #2 } { \__regex_compile_special:N \c_right_brace_str } { \if_int_compare:w \l__regex_internal_a_int > \l__regex_internal_b_int - \__msg_kernel_error:nnxx { regex } { backwards-quantifier } + \__msg_kernel_error:nnxx { kernel } { backwards-quantifier } { \int_use:N \l__regex_internal_a_int } { \int_use:N \l__regex_internal_b_int } \int_zero:N \l__regex_internal_b_int @@ -17614,7 +17765,7 @@ } \cs_new_protected:Npn \__regex_compile_raw_error:N #1 { - \__msg_kernel_error:nnx { regex } { bad-escape } {#1} + \__msg_kernel_error:nnx { kernel } { bad-escape } {#1} \__regex_compile_raw:N #1 } \cs_new_protected:Npn \__regex_compile_raw:N #1#2#3 @@ -17656,7 +17807,7 @@ \__regex_if_end_range:NNTF #2 #3 { \if_int_compare:w `#1 > `#3 \exp_stop_f: - \__msg_kernel_error:nnxx { regex } { range-backwards } {#1} {#3} + \__msg_kernel_error:nnxx { kernel } { range-backwards } {#1} {#3} \else: \__tl_build_one:x { @@ -17670,7 +17821,7 @@ \fi: } { - \__msg_kernel_warning:nnxx { regex } { range-missing-end } + \__msg_kernel_warning:nnxx { kernel } { range-missing-end } {#1} { \c_backslash_str #3 } \__tl_build_one:x { @@ -17688,7 +17839,7 @@ } \cs_new_protected:cpn { __regex_prop_.: } { - \if_int_compare:w \l__regex_current_char_int > - 2 \exp_stop_f: + \if_int_compare:w \l__regex_curr_char_int > - 2 \exp_stop_f: \exp_after:wN \__regex_break_true:w \fi: } @@ -17822,8 +17973,8 @@ \str_case:nn { #2 } { : { \__regex_compile_class_posix:NNNNw } - = { \__msg_kernel_warning:nnx { regex } { posix-unsupported } { = } } - . { \__msg_kernel_warning:nnx { regex } { posix-unsupported } { . } } + = { \__msg_kernel_warning:nnx { kernel } { posix-unsupported } { = } } + . { \__msg_kernel_warning:nnx { kernel } { posix-unsupported } { . } } } } \__regex_compile_raw:N [ #1 #2 @@ -17862,7 +18013,7 @@ } } { - \__msg_kernel_warning:nnx { regex } { posix-unknown } + \__msg_kernel_warning:nnx { kernel } { posix-unknown } { \l__regex_internal_a_tl } \__regex_compile_abort_tokens:x { @@ -17872,7 +18023,7 @@ } } { - \__msg_kernel_error:nnxx { regex } { posix-missing-close } + \__msg_kernel_error:nnxx { kernel } { posix-missing-close } { [: \l__regex_internal_a_tl } { #2 #4 } \__regex_compile_abort_tokens:x { [: \l__regex_internal_a_tl } #1 #2 #3 #4 @@ -17896,7 +18047,7 @@ \__tl_build_one:o \l__regex_internal_regex \exp_after:wN \__regex_compile_quantifier:w \else: - \__msg_kernel_warning:nn { regex } { extra-rparen } + \__msg_kernel_warning:nn { kernel } { extra-rparen } \exp_after:wN \__regex_compile_raw:N \exp_after:wN ) \fi: } @@ -17912,7 +18063,7 @@ \cs_if_exist_use:cF { __regex_compile_special_group_\token_to_str:N #4 :w } { - \__msg_kernel_warning:nnx { regex } { special-group-unknown } + \__msg_kernel_warning:nnx { kernel } { special-group-unknown } { (? #4 } \__regex_compile_group_begin:N \__regex_group:nnnN \__regex_compile_raw:N ? #3 #4 @@ -17948,7 +18099,7 @@ \cs_set:Npn \__regex_item_range:nn { \__regex_item_caseless_range:nn } } { - \__msg_kernel_warning:nnx { regex } { unknown-option } { (?i #2 } + \__msg_kernel_warning:nnx { kernel } { unknown-option } { (?i #2 } \__regex_compile_raw:N ( \__regex_compile_raw:N ? \__regex_compile_raw:N i @@ -17964,7 +18115,7 @@ \cs_set:Npn \__regex_item_range:nn { \__regex_item_caseful_range:nn } } { - \__msg_kernel_warning:nnx { regex } { unknown-option } { (?-#2#4 } + \__msg_kernel_warning:nnx { kernel } { unknown-option } { (?-#2#4 } \__regex_compile_raw:N ( \__regex_compile_raw:N ? \__regex_compile_raw:N - @@ -17986,14 +18137,27 @@ \else: \c__regex_catcode_in_class_mode_int \fi: + \token_if_eq_charcode:NNT C #2 { \__regex_compile_c_C:NN } } } { \cs_if_exist_use:cF { __regex_compile_c_#2:w } } { - \__msg_kernel_error:nnx { regex } { c-missing-category } {#2} + \__msg_kernel_error:nnx { kernel } { c-missing-category } {#2} #1 #2 } } +\cs_new_protected:Npn \__regex_compile_c_C:NN #1#2 + { + \token_if_eq_meaning:NNTF #1 \__regex_compile_special:N + { + \token_if_eq_charcode:NNTF #2 . + { \use_none:n } + { \token_if_eq_charcode:NNF #2 ( } % ) + } + { \use:n } + { \__msg_kernel_error:nnn { kernel } { c-C-invalid } {#2} } + #1 #2 + } \cs_new_protected:cpn { __regex_compile_c_[:w } #1#2 { \l__regex_mode_int @@ -18030,7 +18194,7 @@ { \__regex_compile_c_lbrack_end: } } { - \__msg_kernel_error:nnx { regex } { c-missing-rbrack } {#2} + \__msg_kernel_error:nnx { kernel } { c-missing-rbrack } {#2} \__regex_compile_c_lbrack_end: #1 #2 } @@ -18132,7 +18296,7 @@ \__regex_compile_u_loop:NN } { - \__msg_kernel_error:nn { regex } { u-missing-lbrace } + \__msg_kernel_error:nn { kernel } { u-missing-lbrace } \__regex_compile_raw:N u #1 #2 } } @@ -18150,7 +18314,7 @@ } { \if_false: { \fi: } - \__msg_kernel_error:nnx { regex } { u-missing-rbrace } {#2} + \__msg_kernel_error:nnx { kernel } { u-missing-rbrace } {#2} \__regex_compile_u_end: #1 #2 } @@ -18395,7 +18559,7 @@ \__regex_pop_lr_states: \__regex_toks_put_right:Nn \l__regex_right_state_int { - \if_int_compare:w \l__regex_current_pos_int = \l__regex_max_pos_int + \if_int_compare:w \l__regex_curr_pos_int = \l__regex_max_pos_int \exp_after:wN \__regex_action_success: \fi: } @@ -18676,14 +18840,14 @@ } \cs_new_protected:Npn \__regex_anchor:N #1 { - \if_int_compare:w #1 = \l__regex_current_pos_int + \if_int_compare:w #1 = \l__regex_curr_pos_int \exp_after:wN \__regex_break_true:w \fi: } \cs_new_protected:Npn \__regex_b_test: { \group_begin: - \int_set_eq:NN \l__regex_current_char_int \l__regex_last_char_int + \int_set_eq:NN \l__regex_curr_char_int \l__regex_last_char_int \__regex_prop_w: \__regex_break_point:TF { \group_end: \__regex_item_reverse:n \__regex_prop_w: } @@ -18703,15 +18867,15 @@ } \int_new:N \l__regex_min_pos_int \int_new:N \l__regex_max_pos_int -\int_new:N \l__regex_current_pos_int +\int_new:N \l__regex_curr_pos_int \int_new:N \l__regex_start_pos_int \int_new:N \l__regex_success_pos_int -\int_new:N \l__regex_current_char_int -\int_new:N \l__regex_current_catcode_int +\int_new:N \l__regex_curr_char_int +\int_new:N \l__regex_curr_catcode_int \int_new:N \l__regex_last_char_int \int_new:N \l__regex_case_changed_char_int -\int_new:N \l__regex_current_state_int -\prop_new:N \l__regex_current_submatches_prop +\int_new:N \l__regex_curr_state_int +\prop_new:N \l__regex_curr_submatches_prop \prop_new:N \l__regex_success_submatches_prop \int_new:N \l__regex_step_int \int_new:N \l__regex_min_active_int @@ -18728,12 +18892,12 @@ \cs_new_protected:Npn \__regex_match:n #1 { \int_zero:N \l__regex_balance_int - \int_set:Nn \l__regex_current_pos_int { 2 * \l__regex_max_state_int } + \int_set:Nn \l__regex_curr_pos_int { 2 * \l__regex_max_state_int } \__regex_query_set:nnn { } { -1 } { -2 } - \int_set_eq:NN \l__regex_min_pos_int \l__regex_current_pos_int + \int_set_eq:NN \l__regex_min_pos_int \l__regex_curr_pos_int \__tl_analysis_map_inline:nn {#1} { \__regex_query_set:nnn {##1} {"##2} {##3} } - \int_set_eq:NN \l__regex_max_pos_int \l__regex_current_pos_int + \int_set_eq:NN \l__regex_max_pos_int \l__regex_curr_pos_int \__regex_query_set:nnn { } { -1 } { -2 } \bool_gset_false:N \g__regex_success_bool \int_step_inline:nnnn @@ -18752,16 +18916,16 @@ { \if_meaning:w \c_true_bool \l__regex_empty_success_bool \cs_set:Npn \__regex_if_two_empty_matches:F - { \int_compare:nNnF \l__regex_start_pos_int = \l__regex_current_pos_int } + { \int_compare:nNnF \l__regex_start_pos_int = \l__regex_curr_pos_int } \else: \cs_set_eq:NN \__regex_if_two_empty_matches:F \use:n \fi: \int_set_eq:NN \l__regex_start_pos_int \l__regex_success_pos_int \bool_set_false:N \l__regex_match_success_bool - \prop_clear:N \l__regex_current_submatches_prop + \prop_clear:N \l__regex_curr_submatches_prop \int_set_eq:NN \l__regex_max_active_int \l__regex_min_active_int \__regex_store_state:n { \l__regex_min_state_int } - \int_set:Nn \l__regex_current_pos_int + \int_set:Nn \l__regex_curr_pos_int { \l__regex_start_pos_int - 1 } \__regex_query_get: \__regex_match_loop: @@ -18786,8 +18950,8 @@ \cs_new_protected:Npn \__regex_match_loop: { \int_add:Nn \l__regex_step_int { 2 } - \int_incr:N \l__regex_current_pos_int - \int_set_eq:NN \l__regex_last_char_int \l__regex_current_char_int + \int_incr:N \l__regex_curr_pos_int + \int_set_eq:NN \l__regex_last_char_int \l__regex_curr_char_int \int_set_eq:NN \l__regex_case_changed_char_int \c_max_int \__regex_query_get: \use:x @@ -18802,7 +18966,7 @@ \__prg_break_point: \bool_set_false:N \l__regex_fresh_thread_bool %^^A was arg of break_point:n \if_int_compare:w \l__regex_max_active_int > \l__regex_min_active_int - \if_int_compare:w \l__regex_current_pos_int < \l__regex_max_pos_int + \if_int_compare:w \l__regex_curr_pos_int < \l__regex_max_pos_int \exp_after:wN \exp_after:wN \exp_after:wN \__regex_match_loop: \fi: \fi: @@ -18816,13 +18980,13 @@ \cs_new_protected:Npn \__regex_query_set:nnn #1#2#3 { \__intarray_gset_fast:Nnn \g__regex_charcode_intarray - { \l__regex_current_pos_int } {#3} + { \l__regex_curr_pos_int } {#3} \__intarray_gset_fast:Nnn \g__regex_catcode_intarray - { \l__regex_current_pos_int } {#2} + { \l__regex_curr_pos_int } {#2} \__intarray_gset_fast:Nnn \g__regex_balance_intarray - { \l__regex_current_pos_int } { \l__regex_balance_int } - \__regex_toks_set:Nn \l__regex_current_pos_int {#1} - \int_incr:N \l__regex_current_pos_int + { \l__regex_curr_pos_int } { \l__regex_balance_int } + \__regex_toks_set:Nn \l__regex_curr_pos_int {#1} + \int_incr:N \l__regex_curr_pos_int \if_case:w #2 \exp_stop_f: \or: \int_incr:N \l__regex_balance_int \or: \int_decr:N \l__regex_balance_int @@ -18830,29 +18994,29 @@ } \cs_new_protected:Npn \__regex_query_get: { - \l__regex_current_char_int + \l__regex_curr_char_int = \__intarray_item_fast:Nn \g__regex_charcode_intarray - { \l__regex_current_pos_int } \scan_stop: - \l__regex_current_catcode_int + { \l__regex_curr_pos_int } \scan_stop: + \l__regex_curr_catcode_int = \__intarray_item_fast:Nn \g__regex_catcode_intarray - { \l__regex_current_pos_int } \scan_stop: + { \l__regex_curr_pos_int } \scan_stop: } \cs_new_protected:Npn \__regex_use_state: { \__intarray_gset_fast:Nnn \g__regex_state_active_intarray - { \l__regex_current_state_int } { \l__regex_step_int } - \__regex_toks_use:w \l__regex_current_state_int + { \l__regex_curr_state_int } { \l__regex_step_int } + \__regex_toks_use:w \l__regex_curr_state_int \__intarray_gset_fast:Nnn \g__regex_state_active_intarray - { \l__regex_current_state_int } { \l__regex_step_int + 1 } + { \l__regex_curr_state_int } { \l__regex_step_int + 1 } } \cs_new_protected:Npn \__regex_use_state_and_submatches:nn #1 #2 { - \int_set:Nn \l__regex_current_state_int {#1} + \int_set:Nn \l__regex_curr_state_int {#1} \if_int_compare:w \__intarray_item_fast:Nn \g__regex_state_active_intarray - { \l__regex_current_state_int } + { \l__regex_curr_state_int } < \l__regex_step_int - \tl_set:Nn \l__regex_current_submatches_prop {#2} + \tl_set:Nn \l__regex_curr_submatches_prop {#2} \exp_after:wN \__regex_use_state: \fi: \scan_stop: @@ -18872,26 +19036,26 @@ { \use:x { - \int_add:Nn \l__regex_current_state_int {#2} + \int_add:Nn \l__regex_curr_state_int {#2} \exp_not:n { \if_int_compare:w \__intarray_item_fast:Nn \g__regex_state_active_intarray - { \l__regex_current_state_int } + { \l__regex_curr_state_int } #1 \exp_after:wN \__regex_use_state: \fi: } - \int_set:Nn \l__regex_current_state_int - { \int_use:N \l__regex_current_state_int } - \tl_set:Nn \exp_not:N \l__regex_current_submatches_prop - { \exp_not:o \l__regex_current_submatches_prop } + \int_set:Nn \l__regex_curr_state_int + { \int_use:N \l__regex_curr_state_int } + \tl_set:Nn \exp_not:N \l__regex_curr_submatches_prop + { \exp_not:o \l__regex_curr_submatches_prop } } } \cs_new_protected:Npn \__regex_action_cost:n #1 { \exp_args:No \__regex_store_state:n - { \__int_value:w \__int_eval:w \l__regex_current_state_int + #1 } + { \__int_value:w \__int_eval:w \l__regex_curr_state_int + #1 } } \cs_new_protected:Npn \__regex_store_state:n #1 { @@ -18903,7 +19067,7 @@ \cs_new_protected:Npn \__regex_store_submatches: { \__regex_toks_set:No \l__regex_max_active_int - { \l__regex_current_submatches_prop } + { \l__regex_curr_submatches_prop } } \cs_new_protected:Npn \__regex_disable_submatches: { @@ -18912,8 +19076,8 @@ } \cs_new_protected:Npn \__regex_action_submatch:n #1 { - \prop_put:Nno \l__regex_current_submatches_prop {#1} - { \int_use:N \l__regex_current_pos_int } + \prop_put:Nno \l__regex_curr_submatches_prop {#1} + { \int_use:N \l__regex_curr_pos_int } } \cs_new_protected:Npn \__regex_action_success: { @@ -18922,9 +19086,9 @@ \bool_set_true:N \l__regex_match_success_bool \bool_set_eq:NN \l__regex_empty_success_bool \l__regex_fresh_thread_bool - \int_set_eq:NN \l__regex_success_pos_int \l__regex_current_pos_int + \int_set_eq:NN \l__regex_success_pos_int \l__regex_curr_pos_int \prop_set_eq:NN \l__regex_success_submatches_prop - \l__regex_current_submatches_prop + \l__regex_curr_submatches_prop \__prg_break: } } @@ -19003,14 +19167,14 @@ {#1} \prg_do_nothing: \prg_do_nothing: \if_int_compare:w \l__regex_replacement_csnames_int > 0 \exp_stop_f: - \__msg_kernel_error:nnx { regex } { replacement-missing-rbrace } + \__msg_kernel_error:nnx { kernel } { replacement-missing-rbrace } { \int_use:N \l__regex_replacement_csnames_int } \__tl_build_one:x { \prg_replicate:nn \l__regex_replacement_csnames_int \cs_end: } \fi: \seq_if_empty:NF \l__regex_replacement_category_seq { - \__msg_kernel_error:nnx { regex } { replacement-missing-rparen } + \__msg_kernel_error:nnx { kernel } { replacement-missing-rparen } { \seq_count:N \l__regex_replacement_category_seq } \seq_clear:N \l__regex_replacement_category_seq } @@ -19145,12 +19309,12 @@ \cs_new_protected:Npn \__regex_replacement_cat:NNN #1#2#3 { \token_if_eq_meaning:NNTF \prg_do_nothing: #3 - { \__msg_kernel_error:nn { regex } { replacement-catcode-end } } + { \__msg_kernel_error:nn { kernel } { replacement-catcode-end } } { \int_compare:nNnTF { \l__regex_replacement_csnames_int } > 0 { \__msg_kernel_error:nnnn - { regex } { replacement-catcode-in-cs } {#1} {#3} + { kernel } { replacement-catcode-in-cs } {#1} {#3} #2 #3 } { @@ -19160,7 +19324,19 @@ \l__regex_replacement_category_tl \tl_set:Nn \l__regex_replacement_category_tl {#1} } - { \use:c { __regex_replacement_c_#1:w } #2 #3 } + { + \token_if_eq_meaning:NNT #2 \__regex_replacement_escaped:N + { + \__regex_char_if_alphanumeric:NTF #3 + { + \__msg_kernel_error:nnnn + { kernel } { replacement-catcode-escaped } + {#1} {#3} + } + { } + } + \use:c { __regex_replacement_c_#1:w } #2 #3 + } } } } @@ -19214,7 +19390,7 @@ \cs_new_protected:Npn \__regex_replacement_c_S:w #1#2 { \if_int_compare:w `#2 = 0 \exp_stop_f: - \__msg_kernel_error:nn { regex } { replacement-null-space } + \__msg_kernel_error:nn { kernel } { replacement-null-space } \fi: \tex_lccode:D `\ = `#2 \scan_stop: \tex_lowercase:D { \__tl_build_one:n {~} } @@ -19228,7 +19404,7 @@ \group_end: \cs_new_protected:Npn \__regex_replacement_error:NNN #1#2#3 { - \__msg_kernel_error:nnx { regex } { replacement-#1 } {#3} + \__msg_kernel_error:nnx { kernel } { replacement-#1 } {#3} #2 #3 } \cs_new_protected:Npn \regex_new:N #1 @@ -19399,7 +19575,7 @@ { \flag_height:n { __regex_begin } + \flag_height:n { __regex_end } } = 0 { - \__msg_kernel_error:nnxxx { regex } { result-unbalanced } + \__msg_kernel_error:nnxxx { kernel } { result-unbalanced } { splitting~or~extracting~submatches } { \flag_height:n { __regex_end } } { \flag_height:n { __regex_begin } } @@ -19522,7 +19698,7 @@ { \if_int_compare:w \l__regex_balance_int = 0 \exp_stop_f: \else: - \__msg_kernel_error:nnxxx { regex } { result-unbalanced } + \__msg_kernel_error:nnxxx { kernel } { result-unbalanced } { replacing } { \int_max:nn { - \l__regex_balance_int } { 0 } } { \int_max:nn { \l__regex_balance_int } { 0 } } @@ -19544,20 +19720,20 @@ } } } -\__msg_kernel_new:nnnn { regex } { trailing-backslash } +\__msg_kernel_new:nnnn { kernel } { trailing-backslash } { Trailing~escape~character~'\iow_char:N\\'. } { A~regular~expression~or~its~replacement~text~ends~with~ the~escape~character~'\iow_char:N\\'.~It~will~be~ignored. } -\__msg_kernel_new:nnnn { regex } { x-missing-rbrace } +\__msg_kernel_new:nnnn { kernel } { x-missing-rbrace } { Missing~closing~brace~in~'\iow_char:N\\x'~hexadecimal~sequence. } { You~wrote~something~like~ '\iow_char:N\\x\{...#1'.~ The~closing~brace~is~missing. } -\__msg_kernel_new:nnnn { regex } { x-overflow } +\__msg_kernel_new:nnnn { kernel } { x-overflow } { Character~code~'#1'~too~large~in~'\iow_char:N\\x'~hexadecimal~sequence. } { You~wrote~something~like~ @@ -19565,20 +19741,20 @@ The~character~code~#1~is~larger~than~ the~maximum~value~\int_use:N \c_max_char_int. } -\__msg_kernel_new:nnnn { regex } { invalid-quantifier } +\__msg_kernel_new:nnnn { kernel } { invalid-quantifier } { Braced~quantifier~'#1'~may~not~be~followed~by~'#2'. } { The~character~'#2'~is~invalid~in~the~braced~quantifier~'#1'.~ The~only~valid~quantifiers~are~'*',~'?',~'+',~'{<int>}',~ '{<min>,}'~and~'{<min>,<max>}',~optionally~followed~by~'?'. } -\__msg_kernel_new:nnnn { regex } { missing-rbrack } +\__msg_kernel_new:nnnn { kernel } { missing-rbrack } { Missing~right~bracket~inserted~in~regular~expression. } { LaTeX~was~given~a~regular~expression~where~a~character~class~ was~started~with~'[',~but~the~matching~']'~is~missing. } -\__msg_kernel_new:nnnn { regex } { missing-rparen } +\__msg_kernel_new:nnnn { kernel } { missing-rparen } { Missing~right~ \int_compare:nTF { #1 = 1 } { parenthesis } { parentheses } ~ @@ -19588,13 +19764,13 @@ LaTeX~was~given~a~regular~expression~with~\int_eval:n {#1} ~ more~left~parentheses~than~right~parentheses. } -\__msg_kernel_new:nnnn { regex } { extra-rparen } +\__msg_kernel_new:nnnn { kernel } { extra-rparen } { Extra~right~parenthesis~ignored~in~regular~expression. } { LaTeX~came~across~a~closing~parenthesis~when~no~submatch~group~ was~open.~The~parenthesis~will~be~ignored. } -\__msg_kernel_new:nnnn { regex } { bad-escape } +\__msg_kernel_new:nnnn { kernel } { bad-escape } { Invalid~escape~'\iow_char:N\\#1'~ \__regex_if_in_cs:TF { within~a~control~sequence. } @@ -19618,14 +19794,14 @@ because~it~does~not~match~exactly~one~character. } } -\__msg_kernel_new:nnnn { regex } { range-missing-end } +\__msg_kernel_new:nnnn { kernel } { range-missing-end } { Invalid~end-point~for~range~'#1-#2'~in~character~class. } { The~end-point~'#2'~of~the~range~'#1-#2'~may~not~serve~as~an~ end-point~for~a~range:~alphanumeric~characters~should~not~be~ escaped,~and~non-alphanumeric~characters~should~be~escaped. } -\__msg_kernel_new:nnnn { regex } { range-backwards } +\__msg_kernel_new:nnnn { kernel } { range-backwards } { Range~'[#1-#2]'~out~of~order~in~character~class. } { In~ranges~of~characters~'[x-y]'~appearing~in~character~classes,~ @@ -19633,27 +19809,34 @@ Here,~'#1'~has~character~code~\int_eval:n {`#1},~while~ '#2'~has~character~code~\int_eval:n {`#2}. } -\__msg_kernel_new:nnnn { regex } { c-bad-mode } +\__msg_kernel_new:nnnn { kernel } { c-bad-mode } { Invalid~nested~'\iow_char:N\\c'~escape~in~regular~expression. } { The~'\iow_char:N\\c'~escape~cannot~be~used~within~ a~control~sequence~test~'\iow_char:N\\c{...}'.~ To~combine~several~category~tests,~use~'\iow_char:N\\c[...]'. } -\__msg_kernel_new:nnnn { regex } { c-missing-rbrace } +\__msg_kernel_new:nnnn { kernel } { c-C-invalid } + { '\iow_char:N\\cC'~should~be~followed~by~'.'~or~'(',~not~'#1'. } + { + The~'\iow_char:N\\cC'~construction~restricts~the~next~item~to~be~a~ + control~sequence~or~the~next~group~to~be~made~of~control~sequences.~ + It~only~makes~sense~to~follow~it~by~'.'~or~by~a~group. + } +\__msg_kernel_new:nnnn { kernel } { c-missing-rbrace } { Missing~right~brace~inserted~for~'\iow_char:N\\c'~escape. } { LaTeX~was~given~a~regular~expression~where~a~ '\iow_char:N\\c\iow_char:N\{...'~construction~was~not~ended~ with~a~closing~brace~'\iow_char:N\}'. } -\__msg_kernel_new:nnnn { regex } { c-missing-rbrack } +\__msg_kernel_new:nnnn { kernel } { c-missing-rbrack } { Missing~right~bracket~inserted~for~'\iow_char:N\\c'~escape. } { A~construction~'\iow_char:N\\c[...'~appears~in~a~ regular~expression,~but~the~closing~']'~is~not~present. } -\__msg_kernel_new:nnnn { regex } { c-missing-category } +\__msg_kernel_new:nnnn { kernel } { c-missing-category } { Invalid~character~'#1'~following~'\iow_char:N\\c'~escape. } { In~regular~expressions,~the~'\iow_char:N\\c'~escape~sequence~ @@ -19661,19 +19844,19 @@ capital~letter~representing~a~character~category,~namely~ one~of~'ABCDELMOPSTU'. } -\__msg_kernel_new:nnnn { regex } { c-trailing } +\__msg_kernel_new:nnnn { kernel } { c-trailing } { Trailing~category~code~escape~'\iow_char:N\\c'... } { A~regular~expression~ends~with~'\iow_char:N\\c'~followed~ by~a~letter.~It~will~be~ignored. } -\__msg_kernel_new:nnnn { regex } { u-missing-lbrace } +\__msg_kernel_new:nnnn { kernel } { u-missing-lbrace } { Missing~left~brace~following~'\iow_char:N\\u'~escape. } { The~'\iow_char:N\\u'~escape~sequence~must~be~followed~by~ a~brace~group~with~the~name~of~the~variable~to~use. } -\__msg_kernel_new:nnnn { regex } { u-missing-rbrace } +\__msg_kernel_new:nnnn { kernel } { u-missing-rbrace } { Missing~right~brace~inserted~for~'\iow_char:N\\u'~escape. } { LaTeX~ @@ -19682,14 +19865,14 @@ { encountered~an~escaped~alphanumeric~character '\iow_char:N\\#2'~ } when~parsing~the~argument~of~an~'\iow_char:N\\u\iow_char:N\{...\}'~escape. } -\__msg_kernel_new:nnnn { regex } { posix-unsupported } +\__msg_kernel_new:nnnn { kernel } { posix-unsupported } { POSIX~collating~element~'[#1 ~ #1]'~not~supported. } { The~'[.foo.]'~and~'[=bar=]'~syntaxes~have~a~special~meaning~ in~POSIX~regular~expressions.~This~is~not~supported~by~LaTeX.~ Maybe~you~forgot~to~escape~a~left~bracket~in~a~character~class? } -\__msg_kernel_new:nnnn { regex } { posix-unknown } +\__msg_kernel_new:nnnn { kernel } { posix-unknown } { POSIX~class~'[:#1:]'~unknown. } { '[:#1:]'~is~not~among~the~known~POSIX~classes~ @@ -19698,10 +19881,10 @@ '[:print:]',~'[:punct:]',~'[:space:]',~'[:upper:]',~ '[:word:]',~and~'[:xdigit:]'. } -\__msg_kernel_new:nnnn { regex } { posix-missing-close } +\__msg_kernel_new:nnnn { kernel } { posix-missing-close } { Missing~closing~':]'~for~POSIX~class. } { The~POSIX~syntax~'#1'~must~be~followed~by~':]',~not~'#2'. } -\__msg_kernel_new:nnnn { regex } { result-unbalanced } +\__msg_kernel_new:nnnn { kernel } { result-unbalanced } { Missing~brace~inserted~when~#1. } { LaTeX~was~asked~to~do~some~regular~expression~operation,~ @@ -19709,33 +19892,33 @@ of~begin-group~and~end-group~tokens.~Braces~were~inserted:~ #2~left,~#3~right. } -\__msg_kernel_new:nnnn { regex } { unknown-option } +\__msg_kernel_new:nnnn { kernel } { unknown-option } { Unknown~option~'#1'~for~regular~expressions. } { The~only~available~option~is~'case-insensitive',~toggled~by~ '(?i)'~and~'(?-i)'. } -\__msg_kernel_new:nnnn { regex } { special-group-unknown } +\__msg_kernel_new:nnnn { kernel } { special-group-unknown } { Unknown~special~group~'#1~...'~in~a~regular~expression. } { The~only~valid~constructions~starting~with~'(?'~are~ '(?:~...~)',~'(?|~...~)',~'(?i)',~and~'(?-i)'. } -\__msg_kernel_new:nnnn { regex } { replacement-c } +\__msg_kernel_new:nnnn { kernel } { replacement-c } { Misused~'\iow_char:N\\c'~command~in~a~replacement~text. } { In~a~replacement~text,~the~'\iow_char:N\\c'~escape~sequence~ can~be~followed~by~one~of~the~letters~'ABCDELMOPSTU'~ or~a~brace~group,~not~by~'#1'. } -\__msg_kernel_new:nnnn { regex } { replacement-u } +\__msg_kernel_new:nnnn { kernel } { replacement-u } { Misused~'\iow_char:N\\u'~command~in~a~replacement~text. } { In~a~replacement~text,~the~'\iow_char:N\\u'~escape~sequence~ must~be~~followed~by~a~brace~group~holding~the~name~of~the~ variable~to~use. } -\__msg_kernel_new:nnnn { regex } { replacement-g } +\__msg_kernel_new:nnnn { kernel } { replacement-g } { Missing~brace~for~the~'\iow_char:N\\g'~construction~ in~a~replacement~text. @@ -19745,7 +19928,7 @@ submatches~are~represented~either~as~'\iow_char:N \\g{dd..d}',~ or~'\\d',~where~'d'~are~single~digits.~Here,~a~brace~is~missing. } -\__msg_kernel_new:nnnn { regex } { replacement-catcode-end } +\__msg_kernel_new:nnnn { kernel } { replacement-catcode-end } { Missing~character~for~the~'\iow_char:N\\c<category><character>'~ construction~in~a~replacement~text. @@ -19756,7 +19939,17 @@ the~character~category.~Then,~a~character~must~follow.~LaTeX~ reached~the~end~of~the~replacement~when~looking~for~that. } -\__msg_kernel_new:nnnn { regex } { replacement-catcode-in-cs } +\__msg_kernel_new:nnnn { kernel } { replacement-catcode-escaped } + { + Escaped~letter~or~digit~after~category~code~in~replacement~text. + } + { + In~a~replacement~text,~the~'\iow_char:N\\c'~escape~sequence~ + can~be~followed~by~one~of~the~letters~'ABCDELMOPSTU'~representing~ + the~character~category.~Then,~a~character~must~follow,~not~ + '\iow_char:N\\#2'. + } +\__msg_kernel_new:nnnn { kernel } { replacement-catcode-in-cs } { Category~code~'\iow_char:N\\c#1#3'~ignored~inside~ '\iow_char:N\\c\{...\}'~in~a~replacement~text. @@ -19766,7 +19959,7 @@ '\iow_char:N\\c\{...\}'~are~ignored~when~building~the~control~ sequence~name. } -\__msg_kernel_new:nnnn { regex } { replacement-null-space } +\__msg_kernel_new:nnnn { kernel } { replacement-null-space } { TeX~cannot~build~a~space~token~with~character~code~0. } { You~asked~for~a~character~token~with~category~space,~ @@ -19775,13 +19968,13 @@ This~specific~case~is~impossible~and~will~be~replaced~ by~a~normal~space. } -\__msg_kernel_new:nnnn { regex } { replacement-missing-rbrace } +\__msg_kernel_new:nnnn { kernel } { replacement-missing-rbrace } { Missing~right~brace~inserted~in~replacement~text. } { There~ \int_compare:nTF { #1 = 1 } { was } { were } ~ #1~ missing~right~\int_compare:nTF { #1 = 1 } { brace } { braces } . } -\__msg_kernel_new:nnnn { regex } { replacement-missing-rparen } +\__msg_kernel_new:nnnn { kernel } { replacement-missing-rparen } { Missing~right~parenthesis~inserted~in~replacement~text. } { There~ \int_compare:nTF { #1 = 1 } { was } { were } ~ #1~ @@ -19965,6 +20158,16 @@ \c_group_end_token } \cs_new_eq:NN \hbox_gset_end: \hbox_set_end: +\cs_new_protected:Npn \hbox_set_to_wd:Nnw #1#2 + { + \tex_setbox:D #1 \tex_hbox:D to \__dim_eval:w #2 \__dim_eval_end: + \c_group_begin_token + \group_begin: + } +\cs_new_protected:Npn \hbox_gset_to_wd:Nnw + { \tex_global:D \hbox_set_to_wd:Nnw } +\cs_generate_variant:Nn \hbox_set_to_wd:Nnw { c } +\cs_generate_variant:Nn \hbox_gset_to_wd:Nnw { c } \cs_new_protected:Npn \hbox_to_wd:nn #1#2 { \tex_hbox:D to \__dim_eval:w #1 \__dim_eval_end: @@ -20037,6 +20240,16 @@ \c_group_end_token } \cs_new_eq:NN \vbox_gset_end: \vbox_set_end: +\cs_new_protected:Npn \vbox_set_to_ht:Nnw #1#2 + { + \tex_setbox:D #1 \tex_vbox:D to \__dim_eval:w #2 \__dim_eval_end: + \c_group_begin_token + \group_begin: + } +\cs_new_protected:Npn \vbox_gset_to_ht:Nnw + { \tex_global:D \vbox_set_to_ht:Nnw } +\cs_generate_variant:Nn \vbox_set_to_ht:Nnw { c } +\cs_generate_variant:Nn \vbox_gset_to_ht:Nnw { c } \cs_new_eq:NN \vbox_unpack:N \tex_unvcopy:D \cs_new_eq:NN \vbox_unpack_clear:N \tex_unvbox:D \cs_generate_variant:Nn \vbox_unpack:N { c } @@ -20411,14 +20624,14 @@ \cs_new_protected:Npn \coffin_new:N #1 { \box_new:N #1 - \__chk_suspend_log: + \__debug_suspend_log: \prop_clear_new:c { l__coffin_corners_ \__int_value:w #1 _prop } \prop_clear_new:c { l__coffin_poles_ \__int_value:w #1 _prop } \prop_gset_eq:cN { l__coffin_corners_ \__int_value:w #1 _prop } \c__coffin_corners_prop \prop_gset_eq:cN { l__coffin_poles_ \__int_value:w #1 _prop } \c__coffin_poles_prop - \__chk_resume_log: + \__debug_resume_log: } \cs_generate_variant:Nn \coffin_new:N { c } \cs_new_protected:Npn \hcoffin_set:Nn #1#2 @@ -20898,7 +21111,7 @@ } \cs_new_protected:Npn \coffin_typeset:Nnnnn #1#2#3#4#5 { - \hbox_unpack:N \c_empty_box + \mode_leave_vertical: \__coffin_align:NnnNnnnnN \c_empty_coffin { H } { l } #1 {#2} {#3} {#4} {#5} \l__coffin_aligned_coffin \box_use:N \l__coffin_aligned_coffin @@ -21151,7 +21364,12 @@ \group_end: } \cs_new_protected:Npn \color_ensure_current: - { \__driver_color_ensure_current: } + { + \__driver_color_ensure_current: + \group_insert_after:N \__driver_color_reset: + } +\tl_new:N \l__color_current_tl +\tl_set:Nn \l__color_current_tl { gray~0 } %% File: l3sys.dtx Copyright (C) 2015-2017 The LaTeX3 Project \str_const:Nx \c_sys_jobname_str { \tex_jobname:D } \int_const:Nn \c_sys_minute_int @@ -21290,10 +21508,34 @@ \__deprecation_error:Nnn \c_minus_one { - 1 } { 2018-12-31 } \__deprecation_error:Nnn \sort_ordered: { \sort_return_same: } { 2018-12-31 } \__deprecation_error:Nnn \sort_reversed: { \sort_return_swapped: } { 2018-12-31 } + \__deprecation_error:Nnn \g_file_current_name_tl { \g_file_curr_name_str } { 2018-12-31 } + \__deprecation_error:Nnn \file_add_path:nN { \file_get_full_name:nN } { 2018-12-31 } + \__deprecation_error:Nnn \file_path_include:n + { \seq_put_right:Nn \l_file_search_path_seq } { 2018-12-31 } + \__deprecation_error:Nnn \file_path_remove:n + { \seq_remove_all:Nn \l_file_search_path_seq } { 2018-12-31 } + \__deprecation_error:Nnn \file_list: { \file_log_list: } { 2018-12-31 } + \__deprecation_error:Nnn \ior_list_streams: { \ior_show_list: } { 2018-12-31 } + \__deprecation_error:Nnn \ior_log_streams: { \ior_log_list: } { 2018-12-31 } + \__deprecation_error:Nnn \iow_list_streams: { \iow_show_list: } { 2018-12-31 } + \__deprecation_error:Nnn \iow_log_streams: { \iow_log_list: } { 2018-12-31 } \cs_set_eq:NN \__fp_parse_round:Nw \__fp_parse_round_deprecation_error:Nw \cs_set_eq:NN \deprecation_error: \scan_stop: } %% File: l3candidates.dtx Copyright (C) 2012-2017 The LaTeX3 Project +\cs_new_protected:Npx \mode_leave_vertical: + { + \cs_if_exist:NTF \pdftex_quitvmode:D + { \pdftex_quitvmode:D } + { + \exp_not:n + { + \if_mode_vertical: + \exp_after:wN \tex_indent:D + \fi: + } + } + } \cs_new_protected:Npn \box_clip:N #1 { \hbox_set:Nn #1 { \__driver_box_use_clip:N #1 } } \cs_generate_variant:Nn \box_clip:N { c } @@ -21632,36 +21874,96 @@ {#5} {#6} } } +\cs_new_protected:Npn \file_get_mdfive_hash:nN #1#2 + { \__file_get_details:nnN {#1} { mdfivesum } {#2} } +\cs_new_protected:Npn \file_get_size:nN #1#2 + { \__file_get_details:nnN {#1} { size } {#2} } +\cs_new_protected:Npn \file_get_timestamp:nN #1#2 + { \__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 + { + \use:c { pdftex_file #2 :D } \exp_after:wN + { \l__file_full_name_str } + } + } +\cs_if_exist:NTF \luatex_directlua:D + { + \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 + { + \lua_now_x:n + { + l3kernel.file#2 + ( " \lua_escape_x:n { \l__file_full_name_str } " ) + } + } + } + } + { + \cs_set_protected:Npn \file_get_mdfive_hash:nN #1#2 + { + \file_get_full_name:nN {#1} \l__file_full_name_str + \tl_set:Nx #2 + { + \pdftex_mdfivesum:D file \exp_after:wN + { \l__file_full_name_str } + } + } + \cs_if_exist:NT \xetex_XeTeXversion:D + { + \cs_set_protected:Npn \__file_get_details:nnN #1#2#3 + { + \tl_clear:N #3 + \__msg_kernel_error:nnx + { kernel } { xetex-primitive-not-available } + { \exp_not:c { pdffile #2 } } + } + } + } +\__msg_kernel_new:nnnn { kernel } { xetex-primitive-not-available } + { Primitive~\token_to_str:N #1 not~available } + { + XeTeX~does~not~currently~provide~functionality~equivalent~to~the~ + \token_to_str:N #1 primitive. + } \cs_new_protected:Npn \file_if_exist_input:n #1 { - \file_if_exist:nT {#1} - { \__file_input:V \l__file_internal_name_tl } + \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 } } \cs_new_protected:Npn \file_if_exist_input:nT #1#2 { - \file_if_exist:nT {#1} + \file_get_full_name:nN {#1} \l__file_full_name_str + \str_if_empty:NF \l__file_full_name_str { #2 - \__file_input:V \l__file_internal_name_tl + \__file_input:V \l__file_full_name_str } } -\cs_new_protected:Npn \file_if_exist_input:nF #1 +\cs_new_protected:Npn \file_if_exist_input:nF #1#2 { - \file_if_exist:nTF {#1} - { \__file_input:V \l__file_internal_name_tl } + \file_get_full_name:nN {#1} \l__file_full_name_str + \str_if_empty:NTF \l__file_full_name_str + {#2} + { \__file_input:V \l__file_full_name_str } } -\cs_new_protected:Npn \file_if_exist_input:nTF #1#2 +\cs_new_protected:Npn \file_if_exist_input:nTF #1#2#3 { - \file_if_exist:nTF {#1} + \file_get_full_name:nN {#1} \l__file_full_name_str + \str_if_empty:NTF \l__file_full_name_str + {#3} { #2 - \__file_input:V \l__file_internal_name_tl + \__file_input:V \l__file_full_name_str } } -\cs_new_protected:Npn \ior_log_streams: - { \__msg_log_next: \ior_list_streams: } -\cs_new_protected:Npn \iow_log_streams: - { \__msg_log_next: \iow_list_streams: } +\cs_new_protected:Npn \file_input_stop: { \tex_endinput:D } \cs_if_exist:NTF \pdftex_uniformdeviate:D { \cs_new:Npn \int_rand:nn #1#2 @@ -21998,7 +22300,9 @@ \cs_generate_variant:Nn \tl_gset_from_file:Nnn { c } \cs_new_protected:Npn \__tl_set_from_file:NNnn #1#2#3#4 { - \__file_if_exist:nT {#4} + \file_get_full_name:nN {#4} \l__file_full_name_str + \str_if_empty:NTF \l__file_full_name_str + { \__file_missing:n {#4} } { \group_begin: \exp_args:No \etex_everyeof:D @@ -22006,7 +22310,7 @@ #3 \scan_stop: \exp_after:wN \__tl_from_file_do:w \exp_after:wN \prg_do_nothing: - \tex_input:D \l__file_internal_name_tl \scan_stop: + \tex_input:D \l__file_full_name_str \scan_stop: \exp_args:NNNo \group_end: #1 #2 \l__tl_internal_a_tl } @@ -22023,13 +22327,15 @@ \cs_generate_variant:Nn \tl_gset_from_file_x:Nnn { c } \cs_new_protected:Npn \__tl_set_from_file_x:NNnn #1#2#3#4 { - \__file_if_exist:nT {#4} + \file_get_full_name:nN {#4} \l__file_full_name_str + \str_if_empty:NTF \l__file_full_name_str + { \__file_missing:n {#4} } { \group_begin: \etex_everyeof:D { \exp_not:N } #3 \scan_stop: \tl_set:Nx \l__tl_internal_a_tl - { \tex_input:D \l__file_internal_name_tl \c_space_token } + { \tex_input:D \l__file_full_name_str \c_space_token } \exp_args:NNNo \group_end: #1 #2 \l__tl_internal_a_tl } @@ -22037,10 +22343,10 @@ \cs_generate_variant:Nn \tl_if_head_eq_catcode:nNTF { o } \cs_new:Npn \tl_lower_case:n { \__tl_change_case:nnn { lower } { } } \cs_new:Npn \tl_upper_case:n { \__tl_change_case:nnn { upper } { } } -\cs_new:Npn \tl_mixed_case:n { \__tl_mixed_case:nn { } } +\cs_new:Npn \tl_mixed_case:n { \__tl_change_case:nnn { mixed } { } } \cs_new:Npn \tl_lower_case:nn { \__tl_change_case:nnn { lower } } \cs_new:Npn \tl_upper_case:nn { \__tl_change_case:nnn { upper } } -\cs_new:Npn \tl_mixed_case:nn { \__tl_mixed_case:nn } +\cs_new:Npn \tl_mixed_case:nn { \__tl_change_case:nnn { mixed } } \cs_new:Npn \__tl_change_case:nnn #1#2#3 { \etex_unexpanded:D \exp_after:wN @@ -22078,6 +22384,10 @@ } \cs_new:Npn \__tl_change_case_group:nwnn #1#2 \q_recursion_stop #3#4 { + \use:c { __tl_change_case_group_ #3 : nnnn } {#1} {#2} {#3} {#4} + } +\cs_new:Npn \__tl_change_case_group_lower:nnnn #1#2#3#4 + { \__tl_change_case_output:own { \exp_after:wN @@ -22088,6 +22398,20 @@ } \__tl_change_case_loop:wnn #2 \q_recursion_stop {#3} {#4} } +\cs_new_eq:NN \__tl_change_case_group_upper:nnnn + \__tl_change_case_group_lower:nnnn +\cs_new:Npn \__tl_change_case_group_mixed:nnnn #1#2#3#4 + { + \__tl_change_case_output:own + { + \exp_after:wN + { + \exp:w + \__tl_change_case_aux:nnn {#3} {#4} {#1} + } + } + \__tl_change_case_loop:wnn #2 \q_recursion_stop { lower } {#4} + } \exp_last_unbraced:NNo \cs_new:Npn \__tl_change_case_space:wnn \c_space_tl { \__tl_change_case_output:nwn { ~ } @@ -22156,11 +22480,11 @@ \cs_new:Npn \__tl_change_case_N_type:Nnnn #1#2#3#4 { \token_if_cs:NTF #1 - { \__tl_change_case_cs_letterlike:Nnn #1 {#3} { } } - { \__tl_change_case_char:Nnn #1 {#3} {#4} } + { \__tl_change_case_cs_letterlike:Nn #1 {#3} } + { \use:c { __tl_change_case_char_ #3 :Nnn } #1 {#3} {#4} } \__tl_change_case_loop:wnn #2 \q_recursion_stop {#3} {#4} } -\cs_new:Npn \__tl_change_case_char:Nnn #1#2#3 +\cs_new:Npn \__tl_change_case_char_lower:Nnn #1#2#3 { \cs_if_exist_use:cF { __tl_change_case_ #2 _ #3 :Nnw } { \use_ii:nn } @@ -22170,6 +22494,19 @@ { \__tl_change_case_char:nN {#2} #1 } } } +\cs_new_eq:NN \__tl_change_case_char_upper:Nnn + \__tl_change_case_char_lower:Nnn +\cs_new:Npn \__tl_change_case_char_mixed:Nnn #1#2#3 + { + \__tl_change_case_mixed_switch:w + \cs_if_exist_use:cF { __tl_change_case_mixed_ #3 :Nnw } + { + \cs_if_exist_use:cF { __tl_change_case_upper_ #3 :Nnw } + { \use_ii:nn } + } + #1 + { \__tl_change_case_mixed_skip:N #1 } + } \cs_if_exist:NTF \utex_char:D { \cs_new:Npn \__tl_change_case_char:nN #1#2 @@ -22192,13 +22529,32 @@ } } \cs_new:Npn \__tl_change_case_char_auxi:nN #1#2 + { \use:c { __tl_change_case_char_ #1 :N } #2 } +\cs_new:Npn \__tl_change_case_char_lower:N #1 + { + \__tl_change_case_output:fwn + { + \cs_if_exist_use:cF { c__unicode_lower_ \token_to_str:N #1 _tl } + { \__tl_change_case_char_auxii:nN { lower } #1 } + } + } +\cs_new:Npn \__tl_change_case_char_upper:N #1 { \__tl_change_case_output:fwn { - \cs_if_exist_use:cF { c__unicode_ #1 _ \token_to_str:N #2 _tl } - { \__tl_change_case_char_auxii:nN {#1} #2 } + \cs_if_exist_use:cF { c__unicode_upper_ \token_to_str:N #1 _tl } + { \__tl_change_case_char_auxii:nN { upper } #1 } } } +\cs_new:Npn \__tl_change_case_char_mixed:N #1 + { + \cs_if_exist:cTF { c__unicode_mixed_ \token_to_str:N #1 _tl } + { + \__tl_change_case_output:fwn + { \tl_use:c { c__unicode_mixed_ \token_to_str:N #1 _tl } } + } + { \__tl_change_case_char_upper:N #1 } + } \cs_if_exist:NTF \utex_char:D { \cs_new:Npn \__tl_change_case_char_auxii:nN #1#2 @@ -22213,7 +22569,7 @@ } \cs_new_protected:Npn \__tl_lookup_lower:N #1 { \tex_lccode:D `#1 } \cs_new_protected:Npn \__tl_lookup_upper:N #1 { \tex_uccode:D `#1 } - \cs_new_eq:NN \__tl_lookup_title:N \__tl_lookup_upper:N + \cs_new_eq:NN \__tl_lookup_mixed:N \__tl_lookup_upper:N } { \cs_new:Npn \__tl_change_case_char_auxii:nN #1#2 { \exp_stop_f: #2 } @@ -22234,7 +22590,16 @@ #3 } } -\cs_new:Npn \__tl_change_case_cs_letterlike:Nnn #1#2#3 +\cs_new:Npn \__tl_change_case_cs_letterlike:Nn #1#2 + { + \str_if_eq:nnTF {#2} { mixed } + { + \__tl_change_case_cs_letterlike:NnN #1 { upper } + \__tl_change_case_mixed_switch:w + } + { \__tl_change_case_cs_letterlike:NnN #1 {#2} \prg_do_nothing: } + } +\cs_new:Npn \__tl_change_case_cs_letterlike:NnN #1#2#3 { \cs_if_exist:cTF { c__tl_change_case_ #2 _ \token_to_str:N #1 _tl } { @@ -22322,6 +22687,36 @@ } \cs_new:Npn \__tl_change_case_cs_expand:NN #1#2 { \exp_after:wN #2 #1 } +\cs_new:Npn \__tl_change_case_mixed_skip:N #1 + { + \exp_after:wN \__tl_change_case_mixed_skip:NN + \exp_after:wN #1 \l_tl_mixed_case_ignore_tl + \q_recursion_tail \q_recursion_stop + } +\cs_new:Npn \__tl_change_case_mixed_skip:NN #1#2 + { + \quark_if_recursion_tail_stop_do:nn {#2} + { \__tl_change_case_char:nN { mixed } #1 } + \int_compare:nNnT { `#1 } = { `#2 } + { + \use_i_delimit_by_q_recursion_stop:nw + { + \__tl_change_case_output:nwn {#1} + \__tl_change_case_mixed_skip_tidy:Nwn + } + } + \__tl_change_case_mixed_skip:NN #1 + } +\cs_new:Npn \__tl_change_case_mixed_skip_tidy:Nwn #1#2 \q_recursion_stop #3 + { + \__tl_change_case_loop:wnn #2 \q_recursion_stop { mixed } + } +\cs_new:Npn \__tl_change_case_mixed_switch:w + #1 \__tl_change_case_loop:wnn #2 \q_recursion_stop #3 + { + #1 + \__tl_change_case_loop:wnn #2 \q_recursion_stop { lower } + } \cs_new:Npn \__tl_change_case_lower_sigma:Nnw #1#2#3#4 \q_recursion_stop { \int_compare:nNnTF { `#1 } = { "03A3 } @@ -22795,7 +23190,7 @@ \group_end: } \__tl_tmp:w { 00DF } { SS } { upper } - \__tl_tmp:w { 00DF } { Ss } { title } + \__tl_tmp:w { 00DF } { Ss } { mixed } \__tl_tmp:w { 0131 } { I } { upper } } \group_end: @@ -22827,129 +23222,6 @@ \tl_new:N \l_tl_case_change_accents_tl \tl_set:Nn \l_tl_case_change_accents_tl { \" \' \. \^ \` \~ \c \H \k \r \t \u \v } -\cs_new:Npn \__tl_mixed_case:nn #1#2 - { - \etex_unexpanded:D \exp_after:wN - { - \exp:w - \__tl_mixed_case_aux:nn {#1} {#2} - } - } -\cs_new:Npn \__tl_mixed_case_aux:nn #1#2 - { - \group_align_safe_begin: - \__tl_mixed_case_loop:wn - #2 \q_recursion_tail \q_recursion_stop {#1} - \__tl_change_case_result:n { } - } -\cs_new:Npn \__tl_mixed_case_loop:wn #1 \q_recursion_stop - { - \tl_if_head_is_N_type:nTF {#1} - { \__tl_mixed_case_N_type:Nwn } - { - \tl_if_head_is_group:nTF {#1} - { \__tl_mixed_case_group:nwn } - { \__tl_mixed_case_space:wn } - } - #1 \q_recursion_stop - } -\cs_new:Npn \__tl_mixed_case_group:nwn #1#2 \q_recursion_stop #3 - { - \__tl_change_case_output:own - { - \exp_after:wN - { - \exp:w - \__tl_mixed_case_aux:nn {#3} {#1} - } - } - \__tl_change_case_loop:wnn #2 \q_recursion_stop { lower } {#3} - } -\exp_last_unbraced:NNo \cs_new:Npn \__tl_mixed_case_space:wn \c_space_tl - { - \__tl_change_case_output:nwn { ~ } - \__tl_mixed_case_loop:wn - } -\cs_new:Npn \__tl_mixed_case_N_type:Nwn #1#2 \q_recursion_stop - { - \quark_if_recursion_tail_stop_do:Nn #1 - { \__tl_change_case_end:wn } - \exp_after:wN \__tl_mixed_case_N_type:NNNnn - \exp_after:wN #1 \l_tl_case_change_math_tl - \q_recursion_tail ? \q_recursion_stop {#2} - } -\cs_new:Npn \__tl_mixed_case_N_type:NNNnn #1#2#3 - { - \quark_if_recursion_tail_stop_do:Nn #2 - { \__tl_mixed_case_N_type:Nnn #1 } - \token_if_eq_meaning:NNTF #1 #2 - { - \use_i_delimit_by_q_recursion_stop:nw - { - \__tl_change_case_math:NNNnnn - #1 #3 \__tl_mixed_case_loop:wn - } - } - { \__tl_mixed_case_N_type:NNNnn #1 } - } -\cs_new:Npn \__tl_mixed_case_N_type:Nnn #1#2#3 - { - \token_if_cs:NTF #1 - { - \__tl_change_case_cs_letterlike:Nnn #1 { upper } - { \__tl_mixed_case_letterlike:Nw } - \__tl_mixed_case_loop:wn #2 \q_recursion_stop {#3} - } - { - \__tl_mixed_case_char:Nn #1 {#3} - \__tl_change_case_loop:wnn #2 \q_recursion_stop { lower } {#3} - } - } -\cs_new:Npn \__tl_mixed_case_letterlike:Nw #1#2 \q_recursion_stop - { \__tl_change_case_loop:wnn #2 \q_recursion_stop { lower } } -\cs_new:Npn \__tl_mixed_case_char:Nn #1#2 - { - \cs_if_exist_use:cF { __tl_change_case_mixed_ #2 :Nnw } - { - \cs_if_exist_use:cF { __tl_change_case_upper_ #2 :Nnw } - { \use_ii:nn } - } - #1 - { \__tl_mixed_case_skip:N #1 } - } -\cs_new:Npn \__tl_mixed_case_skip:N #1 - { - \exp_after:wN \__tl_mixed_case_skip:NN - \exp_after:wN #1 \l_tl_mixed_case_ignore_tl - \q_recursion_tail \q_recursion_stop - } -\cs_new:Npn \__tl_mixed_case_skip:NN #1#2 - { - \quark_if_recursion_tail_stop_do:nn {#2} - { \__tl_mixed_case_char:N #1 } - \int_compare:nNnT { `#1 } = { `#2 } - { - \use_i_delimit_by_q_recursion_stop:nw - { - \__tl_change_case_output:nwn {#1} - \__tl_mixed_case_skip_tidy:Nwn - } - } - \__tl_mixed_case_skip:NN #1 - } -\cs_new:Npn \__tl_mixed_case_skip_tidy:Nwn #1#2 \q_recursion_stop #3 - { - \__tl_mixed_case_loop:wn #2 \q_recursion_stop - } -\cs_new:Npn \__tl_mixed_case_char:N #1 - { - \cs_if_exist:cTF { c__unicode_title_ #1 _tl } - { - \__tl_change_case_output:fwn - { \tl_use:c { c__unicode_title_ #1 _tl } } - } - { \__tl_change_case_char:nN { upper } #1 } - } \cs_new:Npn \__tl_change_case_mixed_nl:Nnw #1 { \bool_lazy_or:nnTF diff --git a/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex b/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex index 2dfdc116f31..7dcf18f679b 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 Copyright (C) 1990-2017 The LaTeX3 Project -\def\ExplFileDate{2017/05/29}% +\def\ExplFileDate{2017/07/15}% \let\ExplLoaderFileDate\ExplFileDate \begingroup \def\tempa{LaTeX2e}% @@ -59,6 +59,7 @@ \catcode64=11 % \chardef \l@expl@check@declarations@bool = 0 % \chardef \l@expl@log@functions@bool = 0 % +\chardef \l@expl@enable@debug@bool = 0 % \let\expl@AtBeginDocument\AtBeginDocument \def\AtBeginDocument#1{}% \expandafter\def\expandafter\l@expl@tidy@tl\expandafter diff --git a/Master/texmf-dist/tex/latex/l3kernel/expl3.lua b/Master/texmf-dist/tex/latex/l3kernel/expl3.lua index 1da6f623d37..ca496b495c9 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/expl3.lua +++ b/Master/texmf-dist/tex/latex/l3kernel/expl3.lua @@ -20,23 +20,114 @@ -- -- File: l3luatex.dtx Copyright (C) 2010-2017 The LaTeX3 Project l3kernel = l3kernel or { } -local tex_setcatcode = tex.setcatcode -local tex_sprint = tex.sprint -local tex_write = tex.write -local unicode_utf8_char = unicode.utf8.char -local function strcmp (A, B) +local io = io +local kpse = kpse +local lfs = lfs +local math = math +local md5 = md5 +local os = os +local string = string +local tex = tex +local unicode = unicode +local abs = math.abs +local byte = string.byte +local floor = math.floor +local format = string.format +local gsub = string.gsub +local kpse_find = kpse.find_file +local lfs_attr = lfs.attributes +local md5_sum = md5.sum +local open = io.open +local os_date = os.date +local setcatcode = tex.setcatcode +local str_format = string.format +local sprint = tex.sprint +local write = tex.write +local utf8_char = unicode.utf8.char +local function escapehex(str) + write((gsub(str, ".", + function (ch) return format("%02X", byte(ch)) end))) +end +local charcat_table = l3kernel.charcat_table or 1 +local function charcat(charcode, catcode) + setcatcode(charcat_table, charcode, catcode) + sprint(charcat_table, utf8_char(charcode)) +end +l3kernel.charcat = charcat +local function filemdfivesum(name) + local file = kpse_find(name, "tex", true) + if file then + local f = open(file, "r") + if f then + local data = f:read("*a") + escapehex(md5_sum(data)) + f:close() + end + end +end +l3kernel.filemdfivesum = filemdfivesum +local function filemoddate(name) + local file = kpse_find(name, "tex", true) + if file then + local date = lfs_attr(file, "modification") + if date then + local d = os_date("*t", date) + if d.sec >= 60 then + d.sec = 59 + end + local u = os_date("!*t", date) + local off = 60 * (d.hour - u.hour) + d.min - u.min + if d.year ~= u.year then + if d.year > u.year then + off = off + 1440 + else + off = off - 1440 + end + elseif d.yday ~= u.yday then + if d.yday > u.yday then + off = off + 1440 + else + off = off - 1440 + end + end + local timezone + if off == 0 then + timezone = "Z" + else + local hours = floor(off / 60) + local mins = abs(off - hours * 60) + timezone = str_format("%+03d", hours) + .. "'" .. str_format("%02d", mins) .. "'" + end + write("D:" + .. str_format("%04d", d.year) + .. str_format("%02d", d.month) + .. str_format("%02d", d.day) + .. str_format("%02d", d.hour) + .. str_format("%02d", d.min) + .. str_format("%02d", d.sec) + .. timezone) + end + end +end +l3kernel.filemoddate = filemoddate +local function filesize(name) + local file = kpse_find(name, "tex", true) + if file then + local size = lfs_attr(file, "size") + if size then + write(size) + end + end +end +l3kernel.filesize = filesize +local function strcmp(A, B) if A == B then - tex_write("0") + write("0") elseif A < B then - tex_write("-1") + write("-1") else - tex_write("1") + write("1") end end l3kernel.strcmp = strcmp -local charcat_table = l3kernel.charcat_table or 1 -local function charcat (charcode, catcode) - tex_setcatcode(charcat_table, charcode, catcode) - tex_sprint(charcat_table, unicode_utf8_char(charcode)) -end -l3kernel.charcat = charcat diff --git a/Master/texmf-dist/tex/latex/l3kernel/expl3.sty b/Master/texmf-dist/tex/latex/l3kernel/expl3.sty index 10791bf2dc1..2ca397563e7 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 Copyright (C) 1990-2017 The LaTeX3 Project -\def\ExplFileDate{2017/05/29}% +\def\ExplFileDate{2017/07/15}% \let\ExplLoaderFileDate\ExplFileDate \ProvidesPackage{expl3} [% @@ -36,7 +36,9 @@ } \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 \let\expl@create@bool@option\@undefined +\chardef\l@expl@enable@debug@bool=0 % \newcommand*\l@expl@options@clist{} \DeclareOption* {% @@ -50,6 +52,12 @@ \fi } \ProcessOptions\relax +\ifodd\l@expl@check@declarations@bool + \chardef\l@expl@enable@debug@bool=1 % +\fi +\ifodd\l@expl@log@functions@bool + \chardef\l@expl@enable@debug@bool=1 % +\fi \protected\def\ProvidesExplPackage#1#2#3#4% {% \ProvidesPackage{#1}[#2 \ifx\relax#3\relax\else v#3\space\fi #4]% @@ -275,6 +283,11 @@ } \tl_put_left:Nn \@pushfilename { + \exp_args:Nx \__file_input_push:n + { + \tl_to_str:N \@currname + \tl_to_str:N \@currext + } \tl_put_left:Nx \l__expl_status_stack_tl { \bool_if:NTF \l__kernel_expl_bool @@ -283,8 +296,15 @@ } \ExplSyntaxOff } +\tl_put_right:Nn \@pushfilename { \@pushfilenameaux } +\cs_set_protected:Npn \@pushfilenameaux #1#2#3 + { + \str_gset:Nn \g_file_curr_name_str {#3} + #1 #2 {#3} + } \tl_put_right:Nn \@popfilename { + \__file_input_pop: \tl_if_empty:NTF \l__expl_status_stack_tl { \ExplSyntaxOff } { \exp_after:wN \__expl_status_pop:w \l__expl_status_stack_tl \q_stop } diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3doc.cls b/Master/texmf-dist/tex/latex/l3kernel/l3doc.cls index 557e1346c97..40e5be8e70b 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/l3doc.cls +++ b/Master/texmf-dist/tex/latex/l3kernel/l3doc.cls @@ -20,7 +20,7 @@ %% %% File: l3doc.dtx Copyright (C) 1990-2017 The LaTeX3 project \RequirePackage{expl3,xparse,calc} -\ProvidesExplClass{l3doc}{2017/05/29}{} +\ProvidesExplClass{l3doc}{2017/07/15}{} {L3 Experimental documentation class} \clist_new:N \g_docinput_clist \seq_new:N \g_doc_functions_seq @@ -1354,7 +1354,7 @@ \__codedoc_test_missing_aux:Nxn \g__codedoc_missing_tests_prop { \seq_use:Nn \l__codedoc_names_seq { , } } - { { \g_file_current_name_tl \iow_char:N \ (#1) } } + { { \g_file_curr_name_str \iow_char:N \ (#1) } } } \cs_new_protected:Npn \__codedoc_test_missing_aux:Nnn #1#2#3 { diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3dvipdfmx.def b/Master/texmf-dist/tex/latex/l3kernel/l3dvipdfmx.def index 7d8c5b96f9e..60886d1f6c7 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/l3dvipdfmx.def +++ b/Master/texmf-dist/tex/latex/l3kernel/l3dvipdfmx.def @@ -22,6 +22,22 @@ \ProvidesExplFile {l3dvidpfmx.def}{2017/03/18}{} {L3 Experimental driver: dvipdfmx} +\AtBeginDocument + { + \@ifpackageloaded { color } + { + \cs_new_protected:Npn \__driver_color_pickup: + { \tl_set_eq:NN \l__color_current_tl \current@color } + } + { \cs_new_protected:Npn \__driver_color_pickup: { } } + } +\cs_new_protected:Npn \__driver_color_ensure_current: + { + \__driver_color_pickup: + \tex_special:D { color~push~\l__color_current_tl } + } +\cs_new_protected:Npn \__driver_color_reset: + { \tex_special:D { color~pop } } \cs_new_protected:Npn \__driver_literal:n #1 { \tex_special:D { pdf:literal~ #1 } } \cs_new_protected:Npn \__driver_scope_begin: @@ -68,31 +84,18 @@ \hbox_overlap_right:n { \box_use:N #1 } \__driver_scope_end: } -\tl_new:N \l__driver_color_current_tl -\tl_set:Nn \l__driver_color_current_tl { [ 0 ] } -\AtBeginDocument - { - \@ifpackageloaded { color } - { \tl_set:Nn \l__driver_color_current_tl { \current@color } } - { } - } -\cs_new_protected:Npn \__driver_color_ensure_current: - { - \tex_special:D { pdf:bcolor~\l__driver_color_current_tl } - \group_insert_after:N \__driver_color_reset: - } -\cs_new_protected:Npn \__driver_color_reset: - { \tex_special:D { pdf:ecolor } } \cs_new_eq:NN \__driver_image_getbb_eps:n \__image_read_bb:n \cs_new_protected:Npn \__driver_image_getbb_jpg:n #1 { \int_zero:N \l__image_page_int + \tl_clear:N \l__image_pagebox_tl \__image_extract_bb:n {#1} } \cs_new_eq:NN \__driver_image_getbb_png:n \__driver_image_getbb_jpg:n \cs_new_protected:Npn \__driver_image_getbb_pdf:n #1 { - \bool_set_false:N \l__image_interpolate_tl + \tl_clear:N \l__image_decode_tl + \bool_set_false:N \l__image_interpolate_bool \__image_extract_bb:n {#1} } \int_new:N \g__driver_image_int @@ -102,15 +105,19 @@ } \cs_new_protected:Npn \__driver_image_include_jpg:n #1 { \__driver_image_include_auxi:nn {#1} { image } } -\cs_new_eq:NN \__driver_image_include_png:n \__driver_image_include_png:n +\cs_new_eq:NN \__driver_image_include_png:n \__driver_image_include_jpg:n \cs_new_protected:Npn \__driver_image_include_pdf:n #1 { \__driver_image_include_auxi:nn {#1} { epdf } } \cs_new_protected:Npn \__driver_image_include_auxi:nn #1#2 { \__driver_image_include_auxii:xnn { - \int_compare:nNnT \l__image_page_int > 0 + \tl_if_empty:NF \l__image_pagebox_tl + { : \l__image_pagebox_tl } + \int_compare:nNnT \l__image_page_int > 1 { :P \int_use:N \l__image_page_int } + \tl_if_empty:NF \l__image_decode_tl + { :D \l__image_decode_tl } \bool_if:NT \l__image_interpolate_bool { :I } } @@ -134,11 +141,29 @@ { pdf:#3~ @image \int_use:c { c__image_ #1#2 _int } - \int_compare:nNnT \l__image_page_int > 0 + \int_compare:nNnT \l__image_page_int > 1 { page ~ \int_use:N \l__image_page_int \c_space_tl } + \tl_if_empty:NF \l__image_pagebox_tl + { + pagebox ~ \l__image_pagebox_tl \c_space_tl + bbox ~ + \dim_to_decimal_in_bp:n \l__image_llx_dim \c_space_tl + \dim_to_decimal_in_bp:n \l__image_lly_dim \c_space_tl + \dim_to_decimal_in_bp:n \l__image_urx_dim \c_space_tl + \dim_to_decimal_in_bp:n \l__image_ury_dim \c_space_tl + } (#1) - \bool_if:NT \l__image_interpolate_bool - { <</Interpolate~true>> } + \bool_lazy_or:nnT + { \l__image_interpolate_bool } + { ! \tl_if_empty_p:N \l__imge_decode_tl } + { + << + \tl_if_empty:NF \l__imge_decode_tl + { /Decode~[ \l__imge_decode_tl ] } + \bool_if:NT \l__image_interpolate_bool + { /Interpolate~true> } + >> + } } } \cs_new_eq:NN \__driver_draw_literal:n \__driver_literal:n diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3dvips.def b/Master/texmf-dist/tex/latex/l3kernel/l3dvips.def index 07063fdcd2c..727fbcbd454 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/l3dvips.def +++ b/Master/texmf-dist/tex/latex/l3kernel/l3dvips.def @@ -22,6 +22,22 @@ \ProvidesExplFile {l3dvips.def}{2017/03/18}{} {L3 Experimental driver: dvips} +\AtBeginDocument + { + \@ifpackageloaded { color } + { + \cs_new_protected:Npn \__driver_color_pickup: + { \tl_set_eq:NN \l__color_current_tl \current@color } + } + { \cs_new_protected:Npn \__driver_color_pickup: { } } + } +\cs_new_protected:Npn \__driver_color_ensure_current: + { + \__driver_color_pickup: + \tex_special:D { color~push~\l__color_current_tl } + } +\cs_new_protected:Npn \__driver_color_reset: + { \tex_special:D { color~pop } } \cs_new_protected:Npn \__driver_literal:n #1 { \tex_special:D @@ -88,21 +104,6 @@ \hbox_overlap_right:n { \box_use:N #1 } \__driver_scope_end: } -\tl_new:N \l__driver_color_current_tl -\tl_set:Nn \l__driver_color_current_tl { gray~0 } -\AtBeginDocument - { - \@ifpackageloaded { color } - { \tl_set:Nn \l__driver_color_current_tl { \current@color } } - { } - } -\cs_new_protected:Npn \__driver_color_ensure_current: - { - \tex_special:D { color~push~\l__driver_color_current_tl } - \group_insert_after:N \__driver_color_reset: - } -\cs_new_protected:Npn \__driver_color_reset: - { \tex_special:D { color~pop } } \cs_new_eq:NN \__driver_image_getbb_eps:n \__image_read_bb:n \cs_new_protected:Npn \__driver_image_include_eps:n #1 { @@ -144,7 +145,7 @@ { \dim_to_decimal_in_bp:n {#4} ~ \dim_to_decimal_in_bp:n {#3} ~ \dim_to_decimal_in_bp:n {#1} ~ \dim_to_decimal_in_bp:n {#2} ~ - moveto~dup~0~rlineto~exch~0~exch~rlineto~neg~0~rlineto~clospath + moveto~dup~0~rlineto~exch~0~exch~rlineto~neg~0~rlineto~closepath } } \cs_new_protected:Npn \__driver_draw_curveto:nnnnnn #1#2#3#4#5#6 diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3dvisvgm.def b/Master/texmf-dist/tex/latex/l3kernel/l3dvisvgm.def index 4bae05e91df..f9bf990c499 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/l3dvisvgm.def +++ b/Master/texmf-dist/tex/latex/l3kernel/l3dvisvgm.def @@ -22,6 +22,22 @@ \ProvidesExplFile {l3dvisvgm.def}{2017/03/18}{} {L3 Experimental driver: dvisvgm} +\AtBeginDocument + { + \@ifpackageloaded { color } + { + \cs_new_protected:Npn \__driver_color_pickup: + { \tl_set_eq:NN \l__color_current_tl \current@color } + } + { \cs_new_protected:Npn \__driver_color_pickup: { } } + } +\cs_new_protected:Npn \__driver_color_ensure_current: + { + \__driver_color_pickup: + \tex_special:D { color~push~\l__color_current_tl } + } +\cs_new_protected:Npn \__driver_color_reset: + { \tex_special:D { color~pop } } \cs_new_protected:Npn \__driver_literal:n #1 { \tex_special:D { dvisvgm:raw~ #1 { ?nl } } } \cs_new_protected:Npn \__driver_scope_begin: @@ -113,21 +129,20 @@ \hbox_overlap_right:n { \box_use:N #1 } \__driver_scope_end: } -\tl_new:N \l__driver_color_current_tl -\tl_set:Nn \l__driver_color_current_tl { gray~0 } -\AtBeginDocument +\cs_new_eq:NN \__driver_image_getbb_png:n \__image_extract_bb:n +\cs_new_eq:NN \__driver_image_getbb_jpg:n \__image_extract_bb:n +\cs_new_protected:Npn \__driver_image_include_png:n #1 { - \@ifpackageloaded { color } - { \tl_set:Nn \l__driver_color_current_tl { \current@color } } - { } + \tex_special:D + { + dvisvgm:img~ + \dim_to_decimal:n { \l__image_ury_dim } ~ + \dim_to_decimal:n { \l__image_ury_dim } ~ + \__driver_image_include_bitmap_quote:w #1 " " \q_stop + } } -\cs_new_protected:Npn \__driver_color_ensure_current: - { - \tex_special:D { color~push~\l__driver_color_current_tl } - \group_insert_after:N \__driver_color_reset: - } -\cs_new_protected:Npn \__driver_color_reset: - { \tex_special:D { color~pop } } +\cs_new_eq:NN \__driver_image_include_jpg:n \__driver_image_include_png:n +\cs_new:Npn \__driver_image_include_bitmap_quote:w #1 " #2 " #3 \q_stop { #1#2 } \cs_new_eq:NN \__driver_draw_literal:n \__driver_literal:n \cs_generate_variant:Nn \__driver_draw_literal:n { x } \cs_new_protected:Npn \__driver_draw_begin: diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3pdfmode.def b/Master/texmf-dist/tex/latex/l3kernel/l3pdfmode.def index a8db92d73d0..5e1fe69f6fe 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/l3pdfmode.def +++ b/Master/texmf-dist/tex/latex/l3kernel/l3pdfmode.def @@ -22,6 +22,66 @@ \ProvidesExplFile {l3pdfmode.def}{2017/03/18}{} {L3 Experimental driver: PDF mode} +\AtBeginDocument + { + \@ifpackageloaded { color } + { + \cs_new_protected:Npn \__driver_color_pickup: + { + \tl_set:Nx \l__color_current_tl + { + \exp_after:wN \__driver_color_pickup_aux:w + \current@color ~ 0 ~ 0 ~ 0 \q_stop + } + } + \cs_new:Npn \__driver_color_pickup_aux:w #1 ~ #2 ~ #3 ~ #4 ~ #5 ~ #6 \q_stop + { + \str_if_eq:nnTF {#2} { g } + { gray ~ #1 } + { + \str_if_eq:nnTF {#4} { rg } + { rgb ~ #1 ~ #2 ~ #3 } + { + \str_if_eq:nnTF {#5} { k } + { cmyk ~ #1 ~ #2 ~ #3 ~ #4 } + { gray ~ #1 } + } + } + } + } + { \cs_new_protected:Npn \__driver_color_pickup: { } } + } +\int_new:N \l__driver_color_stack_int +\cs_new_protected:Npx \__driver_color_ensure_current: + { + \exp_not:N \__driver_color_pickup: + \cs_if_exist:NTF \luatex_pdfextension:D + { \luatex_pdfextension:D colorstack } + { \pdftex_pdfcolorstack:D } + \exp_not:N \l__driver_color_stack_int push + { + \exp_not:N \exp_after:wN + \exp_not:N \__driver_color_convert:w + \exp_not:N \l__color_current_tl + \c_space_tl 0 ~ 0 ~ 0 + \exp_not:N \q_stop + } + } +\cs_new:Npn \__driver_color_convert:w #1 ~ + { \use:c { __driver_color_convert_ #1 :w } } +\cs_new:Npn \__driver_color_convert_gray:w #1 ~ #2 \q_stop + { #1 ~ g ~ #1 ~ G } +\cs_new:Npn \__driver_color_convert_cmyk:w #1 ~ #2 ~ #3 ~ #4 \q_stop + { #1 ~ #2 ~ #3 ~ rg ~ #1 ~ #2 ~ #3 ~ RG } +\cs_new:Npn \__driver_color_convert_rgb:w #1 ~ #2 ~ #3 ~ #4 ~ #5 \q_stop + { #1 ~ #2 ~ #3 ~ #4 ~ k ~ #1 ~ #2 ~ #3 ~ #4 ~ K } +\cs_new_protected:Npx \__driver_color_reset: + { + \cs_if_exist:NTF \luatex_pdfextension:D + { \luatex_pdfextension:D colorstack } + { \pdftex_pdfcolorstack:D } + \exp_not:N \l__driver_color_stack_int pop \scan_stop: + } \cs_new_protected:Npx \__driver_literal:n #1 { \cs_if_exist:NTF \luatex_pdfextension:D @@ -101,82 +161,77 @@ \hbox_overlap_right:n { \box_use:N #1 } \__driver_scope_end: } -\tl_new:N \l__driver_color_current_tl -\tl_set:Nn \l__driver_color_current_tl { 0~g~0~G } -\AtBeginDocument - { - \@ifpackageloaded { color } - { \tl_set:Nn \l__driver_color_current_tl { \current@color } } - { } - } -\int_new:N \l__driver_color_stack_int -\cs_new_protected:Npx \__driver_color_ensure_current: - { - \cs_if_exist:NTF \luatex_pdfextension:D - { \luatex_pdfextension:D colorstack } - { \pdftex_pdfcolorstack:D } - \exp_not:N \l__driver_color_stack_int push - { \exp_not:N \l__driver_color_current_tl } - \group_insert_after:N \exp_not:N \__driver_color_reset: - } -\cs_new_protected:Npx \__driver_color_reset: - { - \cs_if_exist:NTF \luatex_pdfextension:D - { \luatex_pdfextension:D colorstack } - { \pdftex_pdfcolorstack:D } - \exp_not:N \l__driver_color_stack_int pop \scan_stop: - } \tl_new:N \l__driver_image_attr_tl \cs_new_protected:Npn \__driver_image_getbb_jpg:n #1 { \int_zero:N \l__image_page_int + \tl_clear:N \l__image_pagebox_tl \tl_set:Nx \l__driver_image_attr_tl { + \tl_if_empty:NF \l__image_decode_tl + { :D \l__image_decode_tl } \bool_if:NT \l__image_interpolate_bool { :I } } + \tl_clear:N \l__driver_image_attr_tl \__driver_image_getbb_auxi:n {#1} } \cs_new_eq:NN \__driver_image_getbb_png:n \__driver_image_getbb_jpg:n \cs_new_protected:Npn \__driver_image_getbb_pdf:n #1 { + \tl_clear:N \l__image_decode_tl \bool_set_false:N \l__image_interpolate_bool \tl_set:Nx \l__driver_image_attr_tl { - \int_compare:nNnT \l__image_page_int > 0 + : \l__image_pagebox_tl + \int_compare:nNnT \l__image_page_int > 1 { :P \int_use:N \l__image_page_int } } \__driver_image_getbb_auxi:n {#1} } \cs_new_protected:Npn \__driver_image_getbb_auxi:n #1 { - \dim_if_exist:cTF { c__image_ #1 \l__driver_image_attr_tl _ht_dim } + \dim_zero:N \l__image_llx_dim + \dim_zero:N \l__image_lly_dim + \dim_if_exist:cTF { c__image_ #1 \l__driver_image_attr_tl _urx_dim } { - \dim_set_eq:Nc \l__image_ht_dim - { c__image_ #1 \l__driver_image_attr_tl _ht_dim } - \dim_set_eq:Nc \l__image_wd_dim - { c__image_ #1 \l__driver_image_attr_tl _wd_dim } + \dim_set_eq:Nc \l__image_urx_dim + { c__image_ #1 \l__driver_image_attr_tl _urx_dim } + \dim_set_eq:Nc \l__image_ury_dim + { c__image_ #1 \l__driver_image_attr_tl _ury_dim } } { \__driver_image_getbb_auxii:n {#1} } } \cs_new_protected:Npn \__driver_image_getbb_auxii:n #1 { \tex_immediate:D \pdftex_pdfximage:D - \bool_if:NT \l__image_interpolate_bool - { attr ~ { /Interpolate~true } } + \bool_lazy_or:nnT + { \l__image_interpolate_bool } + { ! \tl_if_empty_p:N \l__image_decode_tl } + { + attr ~ + { + \tl_if_empty:NF \l__image_decode_tl + { /Decode~[ \l__image_decode_tl ] } + \bool_if:NT \l__image_interpolate_bool + { /Interpolate~true } + } + } \int_compare:nNnT \l__image_page_int > 0 { page ~ \int_use:N \l__image_page_int } + \tl_if_empty:NF \l__image_pagebox_tl + { \l__image_pagebox_tl } {#1} \hbox_set:Nn \l__image_tmp_box { \pdftex_pdfrefximage:D \pdftex_pdflastximage:D } - \dim_set:Nn \l__image_ht_dim { \box_ht:N \l__image_tmp_box } - \dim_set:Nn \l__image_wd_dim { \box_wd:N \l__image_tmp_box } + \dim_set:Nn \l__image_urx_dim { \box_wd:N \l__image_tmp_box } + \dim_set:Nn \l__image_ury_dim { \box_ht:N \l__image_tmp_box } \int_const:cn { c__image_ #1 \l__driver_image_attr_tl _int } { \tex_the:D \pdftex_pdflastximage:D } - \dim_const:cn { c__image_ #1 \l__driver_image_attr_tl _ht_dim } - { \l__image_ht_dim } - \dim_const:cn { c__image_ #1 \l__driver_image_attr_tl _wd_dim } - { \l__image_wd_dim } + \dim_const:cn { c__image_ #1 \l__driver_image_attr_tl _urx_dim } + { \l__image_urx_dim } + \dim_const:cn { c__image_ #1 \l__driver_image_attr_tl _ury_dim } + { \l__image_ury_dim } } \cs_new_protected:Npn \__driver_image_include_jpg:n #1 { diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3xdvipdfmx.def b/Master/texmf-dist/tex/latex/l3kernel/l3xdvipdfmx.def index 4046489e12e..f66bc633b4c 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/l3xdvipdfmx.def +++ b/Master/texmf-dist/tex/latex/l3kernel/l3xdvipdfmx.def @@ -22,6 +22,22 @@ \ProvidesExplFile {l3xdvidpfmx.def}{2017/03/18}{} {L3 Experimental driver: xdvipdfmx} +\AtBeginDocument + { + \@ifpackageloaded { color } + { + \cs_new_protected:Npn \__driver_color_pickup: + { \tl_set_eq:NN \l__color_current_tl \current@color } + } + { \cs_new_protected:Npn \__driver_color_pickup: { } } + } +\cs_new_protected:Npn \__driver_color_ensure_current: + { + \__driver_color_pickup: + \tex_special:D { color~push~\l__color_current_tl } + } +\cs_new_protected:Npn \__driver_color_reset: + { \tex_special:D { color~pop } } \cs_new_protected:Npn \__driver_literal:n #1 { \tex_special:D { pdf:literal~ #1 } } \cs_new_protected:Npn \__driver_scope_begin: @@ -68,21 +84,6 @@ \hbox_overlap_right:n { \box_use:N #1 } \__driver_scope_end: } -\tl_new:N \l__driver_color_current_tl -\tl_set:Nn \l__driver_color_current_tl { [ 0 ] } -\AtBeginDocument - { - \@ifpackageloaded { color } - { \tl_set:Nn \l__driver_color_current_tl { \current@color } } - { } - } -\cs_new_protected:Npn \__driver_color_ensure_current: - { - \tex_special:D { pdf:bcolor~\l__driver_color_current_tl } - \group_insert_after:N \__driver_color_reset: - } -\cs_new_protected:Npn \__driver_color_reset: - { \tex_special:D { pdf:ecolor } } \cs_new_eq:NN \__driver_image_getbb_eps:n \__image_read_bb:n \int_new:N \g__driver_image_int \cs_new_protected:Npn \__driver_image_include_eps:n #1 @@ -91,15 +92,17 @@ } \cs_new_protected:Npn \__driver_image_include_jpg:n #1 { \__driver_image_include_auxi:nn {#1} { image } } -\cs_new_eq:NN \__driver_image_include_png:n \__driver_image_include_png:n -\cs_new_protected:Npn \__driver_image_include_pdf:n #1 - { \__driver_image_include_auxi:nn {#1} { epdf } } +\cs_new_eq:NN \__driver_image_include_png:n \__driver_image_include_jpg:n \cs_new_protected:Npn \__driver_image_include_auxi:nn #1#2 { \__driver_image_include_auxii:xnn { - \int_compare:nNnT \l__image_page_int > 0 + \tl_if_empty:NF \l__image_pagebox_tl + { : \l__image_pagebox_tl } + \int_compare:nNnT \l__image_page_int > 1 { :P \int_use:N \l__image_page_int } + \tl_if_empty:NF \l__image_decode_tl + { :D \l__image_decode_tl } \bool_if:NT \l__image_interpolate_bool { :I } } @@ -123,69 +126,97 @@ { pdf:#3~ @image \int_use:c { c__image_ #1#2 _int } - \int_compare:nNnT \l__image_page_int > 0 + \int_compare:nNnT \l__image_page_int > 1 { page ~ \int_use:N \l__image_page_int \c_space_tl } + \tl_if_empty:NF \l__image_pagebox_tl + { + pagebox ~ \l__image_pagebox_tl \c_space_tl + bbox ~ + \dim_to_decimal_in_bp:n \l__image_llx_dim \c_space_tl + \dim_to_decimal_in_bp:n \l__image_lly_dim \c_space_tl + \dim_to_decimal_in_bp:n \l__image_urx_dim \c_space_tl + \dim_to_decimal_in_bp:n \l__image_ury_dim \c_space_tl + } (#1) - \bool_if:NT \l__image_interpolate_bool - { <</Interpolate~true>> } - } - } -\AtBeginDocument - { - \@ifpackageloaded { color } - { - \cs_set_protected:Npn \__driver_tmp:w #1 [ #2 ] #3 \q_stop + \bool_lazy_or:nnT + { \l__image_interpolate_bool } + { ! \tl_if_empty_p:N \l__imge_decode_tl } { - \tl_if_empty:nT {#2} - { - \cs_set_protected:Npn \__driver_color_ensure_current: - { - \tex_special:D { color~push~\l__driver_color_current_tl } - \group_insert_after:N \__driver_color_reset: - } - \cs_set_protected:Npn \__driver_color_reset: - { \tex_special:D { color~pop } } - } + << + \tl_if_empty:NF \l__imge_decode_tl + { /Decode~[ \l__imge_decode_tl ] } + \bool_if:NT \l__image_interpolate_bool + { /Interpolate~true> } + >> } - \exp_after:wN \__driver_tmp:w \current@color [ ] \q_stop } - { } } \cs_new_protected:Npn \__driver_image_getbb_jpg:n #1 { \int_zero:N \l__image_page_int + \tl_clear:N \l__image_pagebox_tl \__driver_image_getbb_auxi:nN {#1} \xetex_picfile:D } \cs_new_eq:NN \__driver_image_getbb_png:n \__driver_image_getbb_jpg:n \cs_new_protected:Npn \__driver_image_getbb_pdf:n #1 - { \__driver_image_getbb_auxi:nN {#1} \xetex_pdffile:D } + { + \tl_clear:N \l__image_decode_tl + \bool_set_false:N \l__image_interpolate_bool + \__driver_image_getbb_auxi:nN {#1} \xetex_pdffile:D + } \cs_new_protected:Npn \__driver_image_getbb_auxi:nN #1#2 { - \int_compare:nNnTF \l__image_page_int > 0 + \int_compare:nNnTF \l__image_page_int > 1 { \__driver_image_getbb_auxii:VnN \l__image_page_int {#1} #2 } { \__driver_image_getbb_auxiii:nNnn {#1} #2 } } \cs_new_protected:Npn \__driver_image_getbb_auxii:nnN #1#2#3 - { \__driver_image_getbb_auxiii:nNnn {#2} #3 { :P #1 } { page #1 } } + { \__driver_image_getbb_aux:nNnn {#2} #3 { :P #1 } { page #1 } } \cs_generate_variant:Nn \__driver_image_getbb_auxii:nnN { V } \cs_new_protected:Npn \__driver_image_getbb_auxiii:nNnn #1#2#3#4 { - \dim_if_exist:cTF { c__image_ #1#3 _ht_dim } + \tl_if_empty:NTF \l__image_pagebox_tl + { \__driver_image_getbb_auxiv:VnNnn \l__image_pagebox_tl } + { \__driver_image_getbb_auxv:nNnn } + {#1} #2 {#3} {#4} + } +\cs_new_protected:Npn \__driver_image_getbb_auxiv:nnNnn #1#2#3#4#5 + { + \use:x { - \dim_set_eq:Nc \l__image_ht_dim { c__image_ #1#3 _ht_dim } - \dim_set_eq:Nc \l__image_wd_dim { c__image_ #1#3 _wd_dim } + \__driver_image_getbb_auxv:nNnn {#2} #3 { : #1 #4 } + { #5 ~ \__driver_image_getbb_pagebox:w #1 } + } + } +\cs_generate_variant:Nn \__driver_image_getbb_auxiv:nnNnn { V } +\cs_new_protected:Npn \__driver_image_getbb_auxv:nNnn #1#2#3#4 + { + \dim_zero:N \l__image_llx_dim + \dim_zero:N \l__image_lly_dim + \dim_if_exist:cTF { c__image_ #1#3 _urx_dim } + { + \dim_set_eq:Nc \l__image_urx_dim { c__image_ #1#3 _urx_dim } + \dim_set_eq:Nc \l__image_ury_dim { c__image_ #1#3 _ury_dim } } { \__driver_image_getbb_auxvi:nNnn {#1} #2 {#3} {#4} } } \cs_new_protected:Npn \__driver_image_getbb_auxvi:nNnn #1#2#3#4 { \hbox_set:Nn \l__image_tmp_box { #2 #1 ~ #4 } - \dim_set:Nn \l__image_ht_dim { \box_ht:N \l__image_tmp_box } - \dim_set:Nn \l__image_wd_dim { \box_wd:N \l__image_tmp_box } - \dim_const:cn { c__image_ #1#3 _ht_dim } - { \l__image_ht_dim } - \dim_const:cn { c__image_ #1#3 _wd_dim } - { \l__image_wd_dim } + \dim_set:Nn \l__image_utx_dim { \box_wd:N \l__image_tmp_box } + \dim_set:Nn \l__image_ury_dim { \box_ht:N \l__image_tmp_box } + \dim_const:cn { c__image_ #1#3 _urx_dim } + { \l__image_urx_dim } + \dim_const:cn { c__image_ #1#3 _ury_dim } + { \l__image_ury_dim } + } +\cs_new:Npn \__driver_image_getbb_pagebox:w #1 box {#1} +\cs_new_protected:Npn \__driver_image_include_pdf:n #1 + { + \xetex_pdffile:D "#1" ~ + \int_compare:nNnT \l__image_page_int > 0 + { page~ \int_use:N \l__image_page_int } + \__driver_image_getbb_auxiv:VnNnn \l__image_pagebox_tl } \cs_new_eq:NN \__driver_draw_literal:n \__driver_literal:n \cs_generate_variant:Nn \__driver_draw_literal:n { x } diff --git a/Master/texmf-dist/tex/latex/l3packages/l3keys2e/l3keys2e.sty b/Master/texmf-dist/tex/latex/l3packages/l3keys2e/l3keys2e.sty index 29ecea0a4ec..be5cd42c8e2 100644 --- a/Master/texmf-dist/tex/latex/l3packages/l3keys2e/l3keys2e.sty +++ b/Master/texmf-dist/tex/latex/l3packages/l3keys2e/l3keys2e.sty @@ -19,8 +19,8 @@ %% and all files in that bundle must be distributed together. %% %% File: l3keys2e.dtx (C) Copyright 2009,2011-2017 The LaTeX3 Project -\RequirePackage{expl3}[2017/05/29] -\@ifpackagelater{expl3}{2017/05/29} +\RequirePackage{expl3}[2017/07/15] +\@ifpackagelater{expl3}{2017/07/15} {} {% \PackageError{l3keys2e}{Support package l3kernel too old} @@ -32,7 +32,7 @@ }% \endinput } -\ProvidesExplPackage{l3keys2e}{2017/05/29}{} +\ProvidesExplPackage{l3keys2e}{2017/07/15}{} {LaTeX2e option processing using LaTeX3 keys} \cs_generate_variant:Nn \clist_put_right:Nn { Nv } \cs_generate_variant:Nn \keys_if_exist:nnT { nx } diff --git a/Master/texmf-dist/tex/latex/l3packages/xfp/xfp.sty b/Master/texmf-dist/tex/latex/l3packages/xfp/xfp.sty index 1dcf5f17d85..99294202e51 100644 --- a/Master/texmf-dist/tex/latex/l3packages/xfp/xfp.sty +++ b/Master/texmf-dist/tex/latex/l3packages/xfp/xfp.sty @@ -19,21 +19,21 @@ %% and all files in that bundle must be distributed together. %% %% File: xfp.dtx (C) Copyright 2017 The LaTeX3 Project -\RequirePackage{expl3}[2017/05/29] -\@ifpackagelater{expl3}{2017/05/29} +\RequirePackage{expl3}[2017/07/15] +\@ifpackagelater{expl3}{2017/07/15} {} {% - \PackageError{xfpu}{Support package l3kernel too old} + \PackageError{xfp}{Support package l3kernel too old} {% Please install an up to date version of l3kernel\MessageBreak using your TeX package manager or from CTAN.\MessageBreak \MessageBreak - Loading xfpu will abort!% + Loading xfp will abort!% }% \endinput } \RequirePackage{xparse} -\ProvidesExplPackage{xfp}{2017/05/29}{} +\ProvidesExplPackage{xfp}{2017/07/15}{} {L3 Floating point unit} \NewExpandableDocumentCommand \fpeval { m } { \fp_eval:n {#1} } %% diff --git a/Master/texmf-dist/tex/latex/l3packages/xfrac/xfrac.sty b/Master/texmf-dist/tex/latex/l3packages/xfrac/xfrac.sty index 96892e13abe..4fae096efc7 100644 --- a/Master/texmf-dist/tex/latex/l3packages/xfrac/xfrac.sty +++ b/Master/texmf-dist/tex/latex/l3packages/xfrac/xfrac.sty @@ -20,8 +20,8 @@ %% %% File: xfrac.dtx Copyright (C) 2004, 2008-2010 Morten Hoegholm %% (C) 2011,2012,2014-2017 The LaTeX3 Project -\RequirePackage{expl3}[2017/05/29] -\@ifpackagelater{expl3}{2017/05/29} +\RequirePackage{expl3}[2017/07/15] +\@ifpackagelater{expl3}{2017/07/15} {} {% \PackageError{xfrac}{Support package l3kernel too old} @@ -34,7 +34,7 @@ \endinput } \RequirePackage{amstext,graphicx,l3keys2e,textcomp,xparse,xtemplate} -\ProvidesExplPackage{xfrac}{2017/05/29}{} +\ProvidesExplPackage{xfrac}{2017/07/15}{} {L3 Experimental split-level fractions} \keys_define:nn { xfrac } { diff --git a/Master/texmf-dist/tex/latex/l3packages/xparse/xparse.sty b/Master/texmf-dist/tex/latex/l3packages/xparse/xparse.sty index 0616a2d2023..b7ecc485e91 100644 --- a/Master/texmf-dist/tex/latex/l3packages/xparse/xparse.sty +++ b/Master/texmf-dist/tex/latex/l3packages/xparse/xparse.sty @@ -23,8 +23,8 @@ %% (C) Copyright 2004-2008 Frank Mittelbach, %% The LaTeX3 Project %% (C) Copyright 2009-2017 The LaTeX3 Project -\RequirePackage{expl3}[2017/05/29] -\@ifpackagelater{expl3}{2017/05/29} +\RequirePackage{expl3}[2017/07/15] +\@ifpackagelater{expl3}{2017/07/15} {} {% \PackageError{xparse}{Support package l3kernel too old} @@ -36,7 +36,7 @@ }% \endinput } -\ProvidesExplPackage{xparse}{2017/05/29}{} +\ProvidesExplPackage{xparse}{2017/07/15}{} {L3 Experimental document command parser} \tl_const:Nx \c__xparse_no_value_tl { \char_generate:nn { `\- } { 11 } NoValue- } diff --git a/Master/texmf-dist/tex/latex/l3packages/xtemplate/xtemplate.sty b/Master/texmf-dist/tex/latex/l3packages/xtemplate/xtemplate.sty index ee436a00226..f20705ea335 100644 --- a/Master/texmf-dist/tex/latex/l3packages/xtemplate/xtemplate.sty +++ b/Master/texmf-dist/tex/latex/l3packages/xtemplate/xtemplate.sty @@ -23,8 +23,8 @@ %% (C) Copyright 2004-2010 Frank Mittelbach, %% The LaTeX3 Project %% (C) Copyright 2011-2016 The LaTeX3 Project -\RequirePackage{expl3}[2017/05/29] -\@ifpackagelater{expl3}{2017/05/29} +\RequirePackage{expl3}[2017/07/15] +\@ifpackagelater{expl3}{2017/07/15} {} {% \PackageError{xtemplate}{Support package l3kernel too old} @@ -36,7 +36,7 @@ }% \endinput } -\ProvidesExplPackage{xtemplate}{2017/05/29}{} +\ProvidesExplPackage{xtemplate}{2017/07/15}{} {L3 Experimental prototype document functions} \tl_const:Nn \c__xtemplate_code_root_tl { template~code~>~ } \tl_const:Nn \c__xtemplate_defaults_root_tl { template~defaults~>~ } |