diff options
Diffstat (limited to 'Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex')
-rw-r--r-- | Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex | 528 |
1 files changed, 497 insertions, 31 deletions
diff --git a/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex b/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex index 4f63da38cfb..a5dccfde3e7 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex +++ b/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex @@ -80,8 +80,8 @@ %% ----------------------------------------------------------------------- \def\ExplFileName{expl3} \def\ExplFileDescription{L3 programming layer} -\def\ExplFileDate{2015/01/29} -\def\ExplFileVersion{5502} +\def\ExplFileDate{2015/02/13} +\def\ExplFileVersion{5524} \begingroup \def\next{\endgroup} \expandafter\ifx\csname PackageError\endcsname\relax @@ -15974,7 +15974,7 @@ %% %% ----------------------------------------------------------------------- %% -\GetIdInfo$Id: l3candidates.dtx 5499 2015-01-27 14:33:48Z joseph $ +\GetIdInfo$Id: l3candidates.dtx 5523 2015-02-12 22:10:34Z joseph $ {L3 Experimental additions to l3kernel} \group_begin: \tex_lccode:D `? = `: \scan_stop: @@ -17018,6 +17018,10 @@ #1 #2 \l__tl_internal_a_tl } } +\cs_generate_variant:Nn \str_case:nnF { nV , nv } +\cs_generate_variant:Nn \str_case:nnTF { nv } +\cs_generate_variant:Nn \tl_if_blank:nTF { f } +\cs_generate_variant:Nn \tl_if_head_eq_catcode:nNTF { o } \cs_new_nopar:Npn \tl_lower_case:n { \__tl_change_case:nnn { lower } { } } \cs_new_nopar:Npn \tl_upper_case:n { \__tl_change_case:nnn { upper } { } } \cs_new_nopar:Npn \tl_mixed_case:n { \__tl_mixed_case:nn { } } @@ -17040,11 +17044,35 @@ } #1 \q_recursion_stop } -\cs_new:Npn \__tl_change_case_N_type:Nwnn #1#2 \q_recursion_stop #3#4 +\cs_new:Npn \__tl_change_case_N_type:Nwnn #1#2 \q_recursion_stop + { + \quark_if_recursion_tail_stop_do:Nn #1 { \use_none:nnn } + \exp_after:wN \__tl_change_case_N_type:NNN + \exp_after:wN #1 \l_tl_case_change_math_tl + \q_recursion_tail ? \q_recursion_stop {#2} + } +\cs_new:Npn \__tl_change_case_N_type:NNN #1#2#3 + { + \quark_if_recursion_tail_stop_do:Nn #2 + { \__tl_change_case_N_type:Nnnn #1 } + \token_if_eq_meaning:NNTF #1 #2 + { + \use_i_delimit_by_q_recursion_stop:nw + { + \__tl_change_case_math:NNNn #1 #3 + \__tl_change_case_loop:wnn + } + } + { \__tl_change_case_N_type:NNN #1 } + } +\cs_new:Npn \__tl_change_case_N_type:Nnnn #1#2#3#4 { - \quark_if_recursion_tail_stop_do:Nn #1 { \use_none:nn } \token_if_cs:NTF #1 - { \exp_not:N #1 } + { + \__tl_change_case_cs:Nnnn #1 {#3} + { } + { \__tl_change_case_cs:N #1 } + } { \cs_if_exist_use:cF { __tl_change_case_ #3 _ #4 :Nnn } { \use_iii:nnn } @@ -17060,10 +17088,13 @@ } \__tl_change_case_loop:wnn #2 \q_recursion_stop {#3} {#4} } -\cs_new:Npn \__tl_change_case_group:nwnn #1#2 \q_recursion_stop +\cs_new:Npn \__tl_change_case_group:nwnn #1#2 \q_recursion_stop #3#4 { - { \exp_not:n {#1} } - \__tl_change_case_loop:wnn #2 \q_recursion_stop + { + \__tl_change_case_loop:wnn #1 + \q_recursion_tail \q_recursion_stop {#3} {#4} + } + \__tl_change_case_loop:wnn #2 \q_recursion_stop {#3} {#4} } \exp_last_unbraced:NNo \cs_new:Npn \__tl_change_case_space:wnn \c_space_tl { @@ -17072,10 +17103,135 @@ } \cs_new:Npn \__tl_change_case_char:NNNNNNNNn #1#2#3#4#5#6#7#8#9 { - \exp_args:NNv \str_case:nnF #8 + \str_case:nvF #8 { c__tl_ #9 _ #6 _X_ #7 _tl } - { \exp_not:N #8 } + { \exp_not:n {#8} } + } +\cs_new:Npn \__tl_change_case_math:NNNn #1#2#3#4 + { + \exp_not:n {#1} + \__tl_change_case_math_loop:wNN #4 \q_recursion_stop #2 #3 + } +\cs_new:Npn \__tl_change_case_math_loop:wNN #1 \q_recursion_stop + { + \tl_if_head_is_N_type:nTF {#1} + { \__tl_change_case_math:NwNN } + { + \tl_if_head_is_group:nTF {#1} + { \__tl_change_case_math_group:nwNN } + { \__tl_change_case_math_space:wNN } + } + #1 \q_recursion_stop + } +\cs_new:Npn \__tl_change_case_math:NwNN #1#2 \q_recursion_stop #3#4 + { + \token_if_eq_meaning:NNTF \q_recursion_tail #1 + { #4 \q_recursion_tail \q_recursion_stop } + { + \exp_not:n {#1} + \token_if_eq_meaning:NNTF #1 #3 + { #4 #2 \q_recursion_stop } + { \__tl_change_case_math_loop:wNN #2 \q_recursion_stop #3#4 } + } } +\cs_new:Npn \__tl_change_case_math_group:nwNN #1#2 \q_recursion_stop + { + { \exp_not:n {#1} } + \__tl_change_case_math_loop:wNN #2 \q_recursion_stop + } +\exp_last_unbraced:NNo \cs_new:Npn \__tl_change_case_math_space:wNN \c_space_tl + { + \c_space_tl + \__tl_change_case_math_loop:wNN + } +\cs_new:Npn \__tl_change_case_cs:Nnnn #1#2 + { + \exp_args:Nf \__tl_change_case_cs:nNnnn + { \cs_to_str:N #1 } #1 {#2} + } +\cs_new:Npn \__tl_change_case_cs:nNnnn #1#2#3 + { + \tl_if_head_eq_catcode:oNTF { \use_none:nnn #1 a a a a } a + { \__tl_change_case_cs_type:Nnnnn #2 { latin } {#3} } + { + \str_if_eq_x:nnTF + { \__tl_change_case_cs_three:w #1 \q_nil } + { \str_if_eq:nnTF {#3} { lower } { CYR } { cyr } } + { \__tl_change_case_cs_cyr:NnNNNNw #2 {#3} #1 \q_stop } + { + \str_if_eq_x:nnTF + { \__tl_change_case_cs_three:w #1 \q_nil } + { acc } + { \__tl_change_case_cs_type:Nnnnn #2 { acc } {#3} } + { + \str_if_eq_x:nnTF + { \__tl_change_case_cs_four:w #1 \q_nil } + { text } + { \__tl_change_case_cs_type:Nnnnn #2 { greek } {#3} } + { \__tl_change_case_cs_type:Nnnnn #2 { misc } {#3} } + } + } + } + } +\cs_new:Npn \__tl_change_case_cs_three:w #1#2#3#4 \q_nil { #1#2#3 } +\cs_new:Npn \__tl_change_case_cs_four:w #1#2#3#4#5 \q_nil { #1#2#3#4 } +\cs_new:Npn \__tl_change_case_cs_type:Nnnnn #1#2#3 + { + \str_case:nvTF #1 + { c__tl_change_case_ #2 _ #3 _ tl } + } +\cs_new:Npn \__tl_change_case_cs_cyr:NnNNNNw #1#2#3#4#5#6#7 \q_stop + { + \__tl_change_case_cs_type:Nnnnn #1 + { cyrillic } + { + #2 _ + \int_to_roman:n + { + 1 + + \int_div_truncate:nn + { + `#6 - \str_if_eq:nnTF {#2} { lower } { `A } { `a } + } + { 7 } + } + } + } +\cs_new:Npn \__tl_change_case_cs:N #1 + { + \exp_after:wN \__tl_change_case_cs:NN + \exp_after:wN #1 \l_tl_case_change_exclude_tl + \q_recursion_tail \q_recursion_stop + } +\cs_new:Npn \__tl_change_case_cs:NN #1#2 + { + \quark_if_recursion_tail_stop_do:Nn #2 + { \__tl_change_case_cs_expand:N #1 } + \str_if_eq:nnTF {#1} {#2} + { + \use_i_delimit_by_q_recursion_stop:nw + { \__tl_change_case_cs:NNn #1 } + } + { \__tl_change_case_cs:NN #1 } + } +\cs_new:Npn \__tl_change_case_cs:NNn #1#2#3 + { + \exp_not:n { #1 {#3} } + #2 + } +\cs_new:Npn \__tl_change_case_cs_expand:N #1 + { + \bool_if:nTF + { + \token_if_expandable_p:N #1 + && ! \token_if_protected_macro_p:N #1 + && ! \token_if_protected_long_macro_p:N #1 + } + { \__tl_change_case_cs_expand:NN #1 } + { \exp_not:n {#1} } + } +\cs_new:Npn \__tl_change_case_cs_expand:NN #1#2 + { \exp_after:wN #2 #1 } \cs_new:Npn \__tl_change_case_lower_sigma:Nnn #1#2 { \int_compare:nNnTF { `#1 } = { "03A3 } @@ -17098,18 +17254,18 @@ { \c__tl_std_sigma_tl } } { - \exp_after:wN \__tl_change_case_lower_sigma_loop:Nw - \exp_after:wN #1 \c__tl_after_final_sigma_clist - , \q_recursion_tail , \q_recursion_stop + \exp_after:wN \__tl_change_case_lower_sigma_loop:NN + \exp_after:wN #1 \l_tl_case_change_after_final_sigma_tl + \q_recursion_tail \q_recursion_stop } } -\cs_new:Npn \__tl_change_case_lower_sigma_loop:Nw #1#2 , +\cs_new:Npn \__tl_change_case_lower_sigma_loop:NN #1#2 { \quark_if_recursion_tail_stop_do:nn {#2} { \c__tl_std_sigma_tl } - \int_compare:nNnT { `#1 } = { "#2 } + \int_compare:nNnT { `#1 } = { `#2 } { \use_i_delimit_by_q_recursion_stop:nw { \c__tl_final_sigma_tl } } - \__tl_change_case_lower_sigma_loop:Nw #1 + \__tl_change_case_lower_sigma_loop:NN #1 } \cs_new_eq:NN \__tl_change_case_upper_sigma:Nnn \use_iii:nnn \cs_new_eq:NN \__tl_change_case_mixed_sigma:Nnn \use_iii:nnn @@ -17129,11 +17285,41 @@ } #1 \q_recursion_stop } -\cs_new:Npn \__tl_mixed_case_N_type:Nwn #1#2 \q_recursion_stop #3 +\cs_new:Npn \__tl_mixed_case_N_type:Nwn #1#2 \q_recursion_stop { \quark_if_recursion_tail_stop_do:Nn #1 { \use_none:nn } + \exp_after:wN \__tl_mixed_case_N_type:NNN + \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:NNN #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:NNNn #1 #3 + \__tl_mixed_case_loop:wn + } + } + { \__tl_mixed_case_N_type:NNN #1 } + } +\cs_new:Npn \__tl_mixed_case_N_type:Nnn #1#2#3 + { \token_if_cs:NTF #1 - { \exp_not:N #1 } + { + \__tl_change_case_cs:Nnnn #1 { upper } + { + \__tl_change_case_loop:wnn + #2 \q_recursion_stop { lower } {#3} + } + { + \__tl_change_case_cs:N #1 + \__tl_mixed_case_loop:wn #2 \q_recursion_stop {#3} + } + } { \cs_if_exist_use:cF { __tl_change_case_mixed_ #3 :Nnn } { @@ -17142,11 +17328,11 @@ } #1 {#2} { - \exp_after:wN \__tl_mixed_case_skip:Nwn \exp_after:wN #1 - \c__tl_mixed_skip_clist , \q_recursion_tail , - \q_recursion_stop + \exp_after:wN \__tl_mixed_case_skip:NNn + \exp_after:wN #1 \l_tl_mixed_case_ignore_tl + \q_recursion_tail \q_recursion_stop { - \exp_args:NNV \str_case:nnF #1 \c__tl_mixed_exceptions_tl + \str_case:nVF #1 \c__tl_mixed_exceptions_tl { \exp_after:wN \__tl_change_case_char:NNNNNNNNn \int_use:N @@ -17155,13 +17341,13 @@ } } } + \__tl_change_case_loop:wnn #2 \q_recursion_stop { lower } {#3} } - \__tl_change_case_loop:wnn #2 \q_recursion_stop { lower } {#3} } -\cs_new:Npn \__tl_mixed_case_skip:Nwn #1#2 , +\cs_new:Npn \__tl_mixed_case_skip:NNn #1#2 { \quark_if_recursion_tail_stop_do:nn {#2} { \use:n } - \int_compare:nNnT { `#1 } = { "#2 } + \int_compare:nNnT { `#1 } = { `#2 } { \use_i_delimit_by_q_recursion_stop:nw { @@ -17169,16 +17355,23 @@ \__tl_mixed_case_skip_tidy:nNwn } } - \__tl_mixed_case_skip:Nwn #1 + \__tl_mixed_case_skip:NNn #1 } \cs_new:Npn \__tl_mixed_case_skip_tidy:nNwn #1#2#3 \q_recursion_stop #4 { \__tl_mixed_case_loop:wn #3 \q_recursion_stop } -\cs_new:Npn \__tl_mixed_case_group:nwn #1#2 \q_recursion_stop +\cs_new:Npn \__tl_mixed_case_group:nwn #1#2 \q_recursion_stop #3 { - { \exp_not:n {#1} } - \__tl_change_case_loop:wnn #2 \q_recursion_stop { lower } + \tl_if_blank:fTF {#1} + { { } \__tl_mixed_case_loop:wn #2 \q_recursion_stop {#3} } + { + { + \__tl_mixed_case_loop:wn #1 + \q_recursion_tail \q_recursion_stop {#3} + } + \__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 { @@ -17224,7 +17417,7 @@ { \__tl_change_case_upper_tr:Nnn } \cs_new:Npn \__tl_change_case_lower_lt:Nnn #1#2#3 { - \exp_args:NNV \str_case:nnF #1 \c__tl_accents_lt_tl + \str_case:nVF #1 \c__tl_accents_lt_tl { #3 \bool_if:nT @@ -17300,6 +17493,279 @@ \use_i:nn } } +\tl_new:N \l_tl_case_change_math_tl +\tl_set:Nn \l_tl_case_change_math_tl + { $ $ \( \) } +\tl_new:N \l_tl_case_change_exclude_tl +\tl_set:Nn \l_tl_case_change_exclude_tl + { \cite \ensuremath \label \ref } +\tl_new:N \l_tl_case_change_after_final_sigma_tl +\tl_set:Nx \l_tl_case_change_after_final_sigma_tl + { % ( + ) % [ + ] % \{ + \cs_to_str:N \} + . : ; , + ! ? ' " + } +\tl_new:N \l_tl_mixed_case_ignore_tl +\tl_set:Nx \l_tl_mixed_case_ignore_tl + { + ( % ) + [ % ] + \cs_to_str:N \{ % \} + ` + - + } +\group_begin: + \cs_set_protected:Npn \__tl_change_case_setup:nnnn #1#2#3#4 + { + \tl_const:cx { c__tl_change_case_ #1 _upper #2 _tl } + { + \__tl_change_case_map:NN + #3 \q_recursion_tail ? \q_recursion_stop + } + \tl_const:cx { c__tl_change_case_ #1 _lower #2 _tl } + { + \__tl_change_case_map:NNN #4 + #3 \q_recursion_tail ? \q_recursion_stop + } + } + \cs_set:Npn \__tl_change_case_map:NN #1#2 + { + \quark_if_recursion_tail_stop:N #1 + \exp_not:N #1 \exp_not:n { { \exp_not:n {#2} } } + \__tl_change_case_map:NN + } + \cs_set:Npn \__tl_change_case_map:NNN #1#2#3 + { + \str_if_eq:nnT {#1} {#2} + { \use_none_delimit_by_q_recursion_stop:w } + \exp_not:N #3 \exp_not:n { { \exp_not:n {#2} } } + \__tl_change_case_map:NNN #1 + } + \__tl_change_case_setup:nnnn + { latin } + { } + { + \aa \AA + \ae \AE + \dh \DH + \dj \DJ + \l \L + \ng \NG + \o \O + \oe \OE + \ss \SS + \th \TH + \i I + \j J + } + { \i } + \__tl_change_case_setup:nnnn + { cyrillic } + { _i } + { + \cyra \CYRA + \cyrabhch \CYRABHCH + \cyrabhchdsc \CYRABHCHDSC + \cyrabhdze \CYRABHDZE + \cyrabhha \CYRABHHA + \cyrae \CYRAE + \cyrb \CYRB + \cyrbyus \CYRBYUS + \cyrc \CYRC + \cyrch \CYRCH + \cyrchldsc \CYRCHLDSC + \cyrchrdsc \CYRCHRDSC + \cyrchvcrs \CYRCHVCRS + \cyrd \CYRD + \cyrdelta \CYRDELTA + \cyrdje \CYRDJE + \cyrdze \CYRDZE + \cyrdzhe \CYRDZHE + \cyre \CYRE + \cyreps \CYREPS + \cyrerev \CYREREV + \cyrery \CYRERY + \cyrf \CYRF + \cyrfita \CYRFITA + \cyrg \CYRG + \cyrgdsc \CYRGDSC + \cyrgdschcrs \CYRGDSCHCRS + \cyrghcrs \CYRGHCRS + \cyrghk \CYRGHK + \cyrgup \CYRGUP + } + { \q_recursion_tail } + \__tl_change_case_setup:nnnn + { cyrillic } + { _ii } + { + \cyrh \CYRH + \cyrhdsc \CYRHDSC + \cyrhhcrs \CYRHHCRS + \cyrhhk \CYRHHK + \cyrhrdsn \CYRHRDSN + \cyri \CYRI + \cyrie \CYRIE + \cyrii \CYRII + \cyrishrt \CYRISHRT + \cyrishrtdsc \CYRISHRTDSC + \cyrizh \CYRIZH + \cyrje \CYRJE + \cyrk \CYRK + \cyrkbeak \CYRKBEAK + \cyrkdsc \CYRKDSC + \cyrkhcrs \CYRKHCRS + \cyrkhk \CYRKHK + \cyrkvcrs \CYRKVCRS + \cyrl \CYRL + \cyrldsc \CYRLDSC + \cyrlhk \CYRLHK + \cyrlje \CYRLJE + \cyrm \CYRM + \cyrmdsc \CYRMDSC + \cyrmhk \CYRMHK + \cyrn \CYRN + \cyrndsc \CYRNDSC + \cyrng \CYRNG + \cyrnhk \CYRNHK + \cyrnje \CYRNJE + \cyrnlhk \CYRNLHK + } + { \q_recursion_tail } + \__tl_change_case_setup:nnnn + { cyrillic } + { _iii } + { + \cyro \CYRO + \cyrotld \CYROTLD + \cyrp \CYRP + \cyrphk \CYRPHK + \cyrq \CYRQ + \cyrr \CYRR + \cyrrdsc \CYRRDSC + \cyrrhk \CYRRHK + \cyrrtick \CYRRTICK + \cyrs \CYRS + \cyrsacrs \CYRSACRS + \cyrschwa \CYRSCHWA + \cyrsdsc \CYRSDSC + \cyrsemisftsn \CYRSEMISFTSN + \cyrsftsn \CYRSFTSN + \cyrsh \CYRSH + \cyrshch \CYRSHCH + \cyrshha \CYRSHHA + \cyrt \CYRT + \cyrtdsc \CYRTDSC + \cyrtetse \CYRTETSE + \cyrtshe \CYRTSHE + \cyru \CYRU + \cyrushrt \CYRUSHRT + } + { \q_recursion_tail } + \__tl_change_case_setup:nnnn + { cyrillic } + { _iv } + { + \cyrv \CYRV + \cyrw \CYRW + \cyry \CYRY + \cyrya \CYRYA + \cyryat \CYRYAT + \cyryhcrs \CYRYHCRS + \cyryi \CYRYI + \cyryo \CYRYO + \cyryu \CYRYU + \cyrz \CYRZ + \cyrzdsc \CYRZDSC + \cyrzh \CYRZH + \cyrzhdsc \CYRZHDSC + } + { \q_recursion_tail } + \__tl_change_case_setup:nnnn + { greek } + { } + { + \textalpha \textAlpha + \textbeta \textBeta + \textchi \textChi + \textdelta \textDelta + \textdigamma \textDigamma + \texteta \textEta + \textepsilon \textEpsilon + \textgamma \textGamma + \textiota \textIota + \textkappa \textKappa + \textlambda \textLambda + \textmu \textMu + \textnu \textNu + \textomega \textOmega + \textomicron \textOmicron + \textphi \textPhi + \textpi \textPi + \textpsi \textPsi + \textqoppa \textQoppa + \textrho \textRho + \textsampi \textSampi + \textautosigma \textSigma + \textstigma \textStigma + \texttheta \textTheta + \texttau \textTau + \textupsilon \textUpsilon + \textxi \textXi + \textzeta \textZeta + \textsigma \textSigma + \textvarsigma \textSigma + \textvarstigma \textStigma + } + { \textsigma } + \tl_const:Nn \c__tl_change_case_acc_upper_tl + { + \accdasia { \exp_not:n { \LGR@accdropped } } + \accdasiaoxia { \exp_not:n { \LGR@hiatus } } + \accdasiavaria { \exp_not:n { \LGR@accdropped } } + \accdasiaperispomeni { \exp_not:n { \LGR@accdropped } } + \accpsili { \exp_not:n { \LGR@hiatus } } + \accpsilioxia { \exp_not:n { \LGR@hiatus } } + \accpsilivaria { \exp_not:n { \LGR@hiatus } } + \accpsiliperispomeni { \exp_not:n { \LGR@accdropped } } + \acctonos { \exp_not:n { \LGR@hiatus } } + \accvaria { \exp_not:n { \LGR@accdropped } } + \accdialytikatonos { \exp_not:n { \LGR@accDialytika } } + \accdialytikavaria { \exp_not:n { \LGR@accDialytika } } + \accdialytikaperispomeni { \exp_not:n { \LGR@accDialytika } } + \accperispomeni { \exp_not:n { \LGR@accdropped } } + } + \tl_const:Nn \c__tl_change_case_acc_lower_tl { } + \tl_const:Nn \c__tl_change_case_misc_upper_tl + { + \ypogegrammeni { \exp_not:n { \prosgegrammeni } } + \abreve { \exp_not:n { \Abreve } } + \acircumflex { \exp_not:n { \Acircumflex } } + \ecircumflex { \exp_not:n { \Ecircumflex } } + \ocircumflex { \exp_not:n { \Ocircumflex } } + \ohorn { \exp_not:n { \Ohorn } } + \uhorn { \exp_not:n { \Uhorn } } + } + \tl_const:Nn \c__tl_change_case_misc_lower_tl + { + \prosgegrammeni { \exp_not:n { \ypogegrammeni } } + \Abreve { \exp_not:n { \abreve } } + \Acircumflex { \exp_not:n { \acircumflex } } + \Ecircumflex { \exp_not:n { \ecircumflex } } + \Ocircumflex { \exp_not:n { \ocircumflex } } + \Ohorn { \exp_not:n { \ohorn } } + \Uhorn { \exp_not:n { \uhorn } } + \ABREVE { \exp_not:n { \abreve } } + \ACIRCUMFLEX { \exp_not:n { \acircumflex } } + \ECIRCUMFLEX { \exp_not:n { \ecircumflex } } + \OCIRCUMFLEX { \exp_not:n { \ocircumflex } } + \OHORN { \exp_not:n { \ohorn } } + \UHORN { \exp_not:n { \uhorn } } + } +\group_end: \cs_new_protected:Npn \tl_log:N #1 { \tl_if_exist:NTF #1 |