[latex3-commits] [latex3/latex3] main: Reduce variant-generation in l3doc (96a159e27)

github at latex-project.org github at latex-project.org
Mon Nov 27 23:31:44 CET 2023


Repository : https://github.com/latex3/latex3
On branch  : main
Link       : https://github.com/latex3/latex3/commit/96a159e27d20391d96a162efd5cd5fe09024bc82

>---------------------------------------------------------------

commit 96a159e27d20391d96a162efd5cd5fe09024bc82
Author: Joseph Wright <joseph.wright at morningstar2.co.uk>
Date:   Mon Nov 27 19:57:59 2023 +0000

    Reduce variant-generation in l3doc
    
    Where appropriate, we add variants to the core as a result:
    these are likely to be of general utility.
    
    There are a few internal tune-ups too:
    some help avoid variants.


>---------------------------------------------------------------

96a159e27d20391d96a162efd5cd5fe09024bc82
 l3kernel/l3doc.dtx | 118 ++++++++++++++++++++---------------------------------
 l3kernel/l3tl.dtx  |  77 ++++++++++++++++++++++++----------
 2 files changed, 100 insertions(+), 95 deletions(-)

diff --git a/l3kernel/l3doc.dtx b/l3kernel/l3doc.dtx
index f587f32f5..ca9674fb3 100644
--- a/l3kernel/l3doc.dtx
+++ b/l3kernel/l3doc.dtx
@@ -955,48 +955,19 @@ and all files in that bundle must be distributed together.
 % \begin{macro}
 %   {
 %     \seq_set_split:NoV,
-%     \str_case:fn,
-%     \tl_count:f,
-%     \tl_greplace_all:Nen,
-%     \tl_greplace_all:Nno,
-%     \tl_if_head_eq_charcode:oNTF,
-%     \tl_if_head_eq_charcode:oNT,
-%     \tl_if_head_eq_charcode:oNF,
-%     \tl_if_head_eq_meaning:VNF,
-%     \tl_if_in:noTF,
-%     \tl_if_in:ooTF,
-%     \tl_if_in:NoTF,
-%     \tl_if_in:NoT,
-%     \tl_if_in:NoF,
-%     \tl_replace_all:Non,
-%     \tl_replace_all:Nno,
-%     \tl_replace_once:Noo,
-%     \tl_to_str:f,
-%     \tl_to_str:o,
+%     \tl_to_str:f
 %   }
 %   A few missing variants.
 %    \begin{macrocode}
 \cs_generate_variant:Nn \seq_set_split:Nnn { NoV }
-\cs_generate_variant:Nn \seq_gput_right:Nn { Nf }
-\cs_generate_variant:Nn \str_case:nn { fn }
-\cs_generate_variant:Nn \tl_count:n { f }
-\cs_generate_variant:Nn \tl_greplace_all:Nnn { Nx , Nno }
-\prg_generate_conditional_variant:Nnn \tl_if_empty:n { f } { TF }
-\prg_generate_conditional_variant:Nnn \tl_if_head_eq_charcode:nN { o } { T , F , TF }
-\prg_generate_conditional_variant:Nnn \tl_if_head_eq_meaning:nN  { V } { F }
-\prg_generate_conditional_variant:Nnn \tl_if_in:nn { no , oo } { TF }
-\prg_generate_conditional_variant:Nnn \tl_if_in:Nn { No } { T , F , TF }
-\cs_generate_variant:Nn \tl_replace_all:Nnn { No , Nno }
-\cs_generate_variant:Nn \tl_replace_once:Nnn { Noo }
-\cs_generate_variant:Nn \tl_set_rescan:Nnn { NnV }
-\cs_generate_variant:Nn \tl_to_str:n { f , o }
+\cs_generate_variant:Nn \tl_to_str:n { f }
 %    \end{macrocode}
 % \end{macro}
 %
 % \begin{macro}[TF]{\@@_if_almost_str:n}
 %   Used to test if the argument of |\cmd| or other macros to be indexed
 %   is almost a string or not: for instance this is \texttt{false} if |#1|
-%   contains |\meta{...}|.  The surprising |f|-expansion are there to
+%   contains |\meta{...}|.  The surprising |f|-expansion is there to
 %   cope with the case of |#1| starting with \cs{c_backslash_str}
 %   which should be expanded and considered to be \enquote{normal}.
 %    \begin{macrocode}
@@ -1004,7 +975,7 @@ and all files in that bundle must be distributed together.
   {
     \int_compare:nNnTF
       { \tl_count:n {#1} }
-      < { \tl_count:f { \tl_to_str:f {#1} } }
+      < { \tl_count:e { \tl_to_str:f {#1} } }
       { \prg_return_false: }
       { \prg_return_true: }
   }
@@ -1102,7 +1073,7 @@ and all files in that bundle must be distributed together.
   \cs_new_protected:Npn \@@_detect_internals_aux:N #1
     {
       \tl_set_eq:NN \l_@@_detect_internals_tl #1
-      \tl_replace_all:Non \l_@@_detect_internals_tl { \token_to_str:N _ } { _ }
+      \tl_replace_all:NVn \l_@@_detect_internals_tl \c_underscore_str { _ }
       \seq_set_split:NnV \l_@@_tmpa_seq { _ _ } \l_@@_detect_internals_tl
       \seq_pop_left:NN \l_@@_tmpa_seq \l_@@_detect_internals_tl
       \seq_map_variable:NNn \l_@@_tmpa_seq \l_@@_detect_internals_tl
@@ -1985,9 +1956,9 @@ and all files in that bundle must be distributed together.
     \bool_if:NT \l_@@_cmd_replace_bool
       {
         \tl_set_rescan:Nnn \l_@@_tmpb_tl { } { _ }
-        \tl_replace_all:Non \l_@@_cmd_tl \l_@@_tmpb_tl { _ }
+        \tl_replace_all:NVn \l_@@_cmd_tl \l_@@_tmpb_tl { _ }
         \@@_replace_at_at:N \l_@@_cmd_tl
-        \tl_replace_all:Nno \l_@@_cmd_tl { _ } \l_@@_tmpb_tl
+        \tl_replace_all:NnV \l_@@_cmd_tl { _ } \l_@@_tmpb_tl
       }
 %    \end{macrocode}
 % Typesetting.
@@ -2067,7 +2038,7 @@ and all files in that bundle must be distributed together.
       {
         \tl_set_rescan:Nnn \l_@@_tmpb_tl
           { \char_set_catcode:nn { `_ } {##1} } { _ }
-        \tl_replace_all:Non \l_@@_tmpa_tl \l_@@_tmpb_tl
+        \tl_replace_all:NVn \l_@@_tmpa_tl \l_@@_tmpb_tl
           { \@@_ensuremath_sb:n }
       }
     \exp_args:NV \@@_meta_original:n \l_@@_tmpa_tl
@@ -2147,8 +2118,8 @@ and all files in that bundle must be distributed together.
 \cs_new_protected:Npn \@@_get_hyper_target:nN #1#2
   {
     \__kernel_tl_set:Ne #2 { \tl_to_str:n {#1} }
-    \tl_replace_all:Nen #2 { \c_underscore_str } { / }
-    \tl_remove_all:Ne   #2 { \c_backslash_str }
+    \tl_replace_all:NVn #2 \c_underscore_str { / }
+    \tl_remove_all:NV   #2 \c_backslash_str
     \tl_put_left:Nn #2 { doc/function// }
   }
 \cs_generate_variant:Nn \@@_get_hyper_target:nN { o , e }
@@ -2274,8 +2245,8 @@ and all files in that bundle must be distributed together.
   {
     \seq_pop:NN #1 \l_@@_tmpa_tl
     \tl_gset_eq:NN \g_@@_base_name_tl \l_@@_tmpa_tl
-    \tl_greplace_all:Nno \g_@@_base_name_tl
-      { ~ } { \c_catcode_other_space_tl }
+    \tl_greplace_all:NnV \g_@@_base_name_tl
+      { ~ } \c_catcode_other_space_tl
     \seq_get:NN #1 \l_@@_tmpa_tl
     \str_if_eq:VnTF \l_@@_tmpa_tl { \scan_stop: }
       {
@@ -2345,7 +2316,7 @@ and all files in that bundle must be distributed together.
     \bool_if:NTF \l_@@_macro_internal_bool
       { \prg_return_true: }
       {
-        \tl_if_empty:fTF
+        \tl_if_empty:eTF
           {
             \exp_after:wN \@@_if_macro_internal_aux:w
             \tl_to_str:n { #1 ~ __ }
@@ -3009,8 +2980,8 @@ and all files in that bundle must be distributed together.
     \tl_if_empty:NTF \l_@@_macro_documented_tl
       { \@@_names_block_base_map:N \@@_macro_save_names_aux:n }
       {
-        \seq_gput_right:Nf \g_@@_nested_names_seq
-          { \exp_after:wN \token_to_str:N \l_@@_macro_documented_tl }
+        \seq_gput_right:Ne \g_@@_nested_names_seq
+          { \tl_to_str:N \l_@@_macro_documented_tl }
       }
   }
 \cs_new_protected:Npn \@@_macro_save_names_aux:n #1
@@ -3180,8 +3151,8 @@ and all files in that bundle must be distributed together.
         \int_compare:nTF { \str_count:n {#1} <= 28 }
           { \MacroFont } { \MacroLongFont }
         \tl_set:Nn \l_@@_tmpa_tl {#1}
-        \tl_replace_all:Nno \l_@@_tmpa_tl
-          { ~ } { \c_catcode_other_space_tl }
+        \tl_replace_all:NnV \l_@@_tmpa_tl
+          { ~ } \c_catcode_other_space_tl
         \@@_macroname_prefix:o \l_@@_tmpa_tl
         \@@_macroname_suffix:N #2
       }
@@ -3361,8 +3332,8 @@ and all files in that bundle must be distributed together.
 \cs_new_protected:Npn \@@_macro_end_wrap_item:n #1
   {
     \tl_set:Nn \l_@@_tmpa_tl {#1}
-    \tl_replace_all:Non \l_@@_tmpa_tl
-      { \token_to_str:N _ } { \_ }
+    \tl_replace_all:NVn \l_@@_tmpa_tl
+      \c_underscore_str { \_ }
     \texttt { \l_@@_tmpa_tl }
   }
 \cs_new_protected:Npn \@@_print_end_definition:
@@ -3409,7 +3380,7 @@ and all files in that bundle must be distributed together.
   }
 \prg_new_conditional:Npnn \@@_if_macro_primitive:n #1 { p }
   {
-    \tl_if_empty:fTF
+    \tl_if_empty:eTF
       {
         \exp_after:wN \@@_if_macro_primitive_aux:w
         \tl_to_str:n { #1 :D }
@@ -4371,7 +4342,7 @@ and all files in that bundle must be distributed together.
     \__kernel_tl_set:Ne #1 { \tl_to_str:n {#2} }
     \@@_if_almost_str:nTF {#2}
       {
-        \tl_replace_all:Non #1 { \tl_to_str:n { __ } }
+        \tl_replace_all:Nen #1 { \tl_to_str:n { __ } }
           {
             \verbatimchar
             \token_to_str:N \_ \token_to_str:N \_
@@ -4394,8 +4365,8 @@ and all files in that bundle must be distributed together.
       }
       {
         \tl_set:Nn #1 {#2}
-        \tl_replace_all:Non #1
-          { \c_backslash_str }
+        \tl_replace_all:NVn #1
+          \c_backslash_str
           { \token_to_str:N \bslash \c_space_tl }
       }
     \@@_quote_special_char:N #1
@@ -4434,27 +4405,26 @@ and all files in that bundle must be distributed together.
 %   module name, while for \TeX{}/\LaTeXe{} commands the module name is
 %   |TeX|, and others have an empty module name.
 %    \begin{macrocode}
-\cs_new_protected:Npn \@@_key_get:n #1
-  {
-    \@@_key_get_base:nN {#1} \l_@@_index_macro_tl
-    \__kernel_tl_set:Ne \l_@@_index_key_tl
-      { \tl_to_str:N \l_@@_index_macro_tl }
-    \tl_clear:N \l_@@_index_module_tl
-    \tl_if_in:NoTF \l_@@_index_key_tl { \tl_to_str:n { __ } }
-      { \bool_set_true:N \l_@@_index_internal_bool }
-      { \bool_set_false:N \l_@@_index_internal_bool }
-    \exp_last_unbraced:NNo
-    \tl_if_head_eq_charcode:oNT
-      { \l_@@_index_key_tl } \c_backslash_str
-      { \@@_key_pop: }
-    \tl_if_in:NoTF \l_@@_index_key_tl { \token_to_str:N : }
-      { \@@_key_func: }
+\cs_new_protected:Npe \@@_key_get:n #1
+  {
+    \exp_not:N \@@_key_get_base:nN {#1} \exp_not:N \l_@@_index_macro_tl
+    \__kernel_tl_set:Ne \exp_not:N \l_@@_index_key_tl
+      { \exp_not:N \tl_to_str:N \exp_not:N \l_@@_index_macro_tl }
+    \tl_clear:N \exp_not:N \l_@@_index_module_tl
+    \tl_if_in:NnTF \exp_not:N \l_@@_index_key_tl { \tl_to_str:n { __ } }
+      { \bool_set_true:N \exp_not:N \l_@@_index_internal_bool }
+      { \bool_set_false:N \exp_not:N \l_@@_index_internal_bool }
+    \exp_not:N \tl_if_head_eq_charcode:VNT
+      \exp_not:N \l_@@_index_key_tl \c_backslash_str
+      { \exp_not:N \@@_key_pop: }
+    \tl_if_in:NnTF \exp_not:N \l_@@_index_key_tl { \token_to_str:N : }
+      { \exp_not:N \@@_key_func: }
       {
-        \tl_if_in:NoTF \l_@@_index_key_tl { \token_to_str:N _ }
-          { \@@_key_var: }
+        \tl_if_in:NnTF \exp_not:N \l_@@_index_key_tl { \token_to_str:N _ }
+          { \exp_not:N \@@_key_var: }
           {
-            \tl_if_in:NoT \l_@@_index_key_tl { \token_to_str:N @ }
-              { \tl_set:Nn \l_@@_index_module_tl { TeX } }
+            \tl_if_in:NnT \exp_not:N \l_@@_index_key_tl { \token_to_str:N @ }
+              { \tl_set:Nn \exp_not:N \l_@@_index_module_tl { TeX } }
           }
       }
   }
@@ -4480,7 +4450,7 @@ and all files in that bundle must be distributed together.
   }
 \cs_new_protected:Npn \@@_key_drop_underscores:
   {
-    \tl_if_head_eq_charcode:oNT { \l_@@_index_key_tl } _
+    \tl_if_head_eq_charcode:VNT \l_@@_index_key_tl _
       { \@@_key_pop: \@@_key_drop_underscores: }
   }
 %    \end{macrocode}
@@ -4495,7 +4465,7 @@ and all files in that bundle must be distributed together.
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_key_func:
   {
-    \tl_if_head_eq_charcode:oNT { \l_@@_index_key_tl } .
+    \tl_if_head_eq_charcode:VNT \l_@@_index_key_tl .
       { \@@_key_pop: }
     \@@_key_drop_underscores:
     \tl_set_eq:NN \l_@@_index_module_tl \l_@@_index_key_tl
@@ -4531,7 +4501,7 @@ and all files in that bundle must be distributed together.
     \exp_args:Ne \tl_if_head_eq_charcode:nNTF
       { \exp_args:No \str_tail:n \l_@@_index_key_tl } _
       {
-        \str_case:fn { \str_head:N \l_@@_index_key_tl }
+        \str_case:en { \str_head:N \l_@@_index_key_tl }
           {
             { q } { \tl_set:Nn \l_@@_index_module_tl { quark } }
             { s } { \tl_set:Nn \l_@@_index_module_tl { scan } }
diff --git a/l3kernel/l3tl.dtx b/l3kernel/l3tl.dtx
index 1b6b9367d..f6f9a0814 100644
--- a/l3kernel/l3tl.dtx
+++ b/l3kernel/l3tl.dtx
@@ -295,7 +295,11 @@
 %   or \cs{str_if_eq:nnTF} if category codes are not important.
 % \end{function}
 %
-% \begin{function}[TF]{\tl_if_in:Nn, \tl_if_in:NV, \tl_if_in:cn, \tl_if_in:cV}
+% \begin{function}[TF]
+%   {
+%     \tl_if_in:Nn, \tl_if_in:NV, \tl_if_in:No,
+%     \tl_if_in:cn, \tl_if_in:cV, \tl_if_in:co
+%   }
 %   \begin{syntax}
 %     \cs{tl_if_in:NnTF} \meta{tl~var} \Arg{token list} \Arg{true code} \Arg{false code}
 %   \end{syntax}
@@ -307,7 +311,10 @@
 % \end{function}
 %
 % \begin{function}[TF]
-%   {\tl_if_in:nn, \tl_if_in:Vn, \tl_if_in:nV, \tl_if_in:on, \tl_if_in:no}
+%   {
+%     \tl_if_in:nn, \tl_if_in:Vn, \tl_if_in:VV, \tl_if_in:on, \tl_if_in:oo,
+%     \tl_if_in:nV, \tl_if_in:no
+%   }
 %   \begin{syntax}
 %     \cs{tl_if_in:nnTF} \Arg{token list_1} \Arg{token list_2} \Arg{true code} \Arg{false code}
 %   \end{syntax}
@@ -367,7 +374,10 @@
 % \subsection{Testing the first token}
 %
 % \begin{function}[updated = 2012-07-09, EXP, pTF]
-%   {\tl_if_head_eq_catcode:nN, \tl_if_head_eq_catcode:oN}
+%   {
+%     \tl_if_head_eq_catcode:nN, \tl_if_head_eq_catcode:VN,
+%     \tl_if_head_eq_catcode:eN, \tl_if_head_eq_catcode:oN
+%   }
 %   \begin{syntax}
 %     \cs{tl_if_head_eq_catcode_p:nN} \Arg{token list} \meta{test token}
 %     \cs{tl_if_head_eq_catcode:nNTF} \Arg{token list} \meta{test token}
@@ -379,7 +389,10 @@
 % \end{function}
 %
 % \begin{function}[updated = 2012-07-09, EXP, pTF]
-%   {\tl_if_head_eq_charcode:nN, \tl_if_head_eq_charcode:fN}
+%   {
+%     \tl_if_head_eq_charcode:nN, \tl_if_head_eq_charcode:VN,
+%     \tl_if_head_eq_charcode:eN, \tl_if_head_eq_charcode:fN
+%   }
 %   \begin{syntax}
 %     \cs{tl_if_head_eq_charcode_p:nN} \Arg{token list} \meta{test token}
 %     \cs{tl_if_head_eq_charcode:nNTF} \Arg{token list} \meta{test token}
@@ -390,7 +403,11 @@
 %   \meta{token list} is empty, the test is always \texttt{false}.
 % \end{function}
 %
-% \begin{function}[updated = 2012-07-09, EXP, pTF]{\tl_if_head_eq_meaning:nN}
+% \begin{function}[updated = 2012-07-09, EXP, pTF]
+%   {
+%     \tl_if_head_eq_meaning:nN, \tl_if_head_eq_meaning:VN,
+%     \tl_if_head_eq_meaning:eN
+%   }
 %   \begin{syntax}
 %     \cs{tl_if_head_eq_meaning_p:nN} \Arg{token list} \meta{test token}
 %     \cs{tl_if_head_eq_meaning:nNTF} \Arg{token list} \meta{test token}
@@ -516,7 +533,7 @@
 % \subsection{Counting and reversing token lists}
 %
 % \begin{function}[added = 2012-05-13, EXP]
-%   {\tl_count:n, \tl_count:V, \tl_count:o}
+%   {\tl_count:n, \tl_count:V, \tl_count:v, \tl_count:e, \tl_count:o}
 %   \begin{syntax}
 %     \cs{tl_count:n} \Arg{tokens}
 %   \end{syntax}
@@ -2437,7 +2454,11 @@
 %    \end{macrocode}
 % \end{macro}
 %
-% \begin{macro}[TF]{\tl_if_in:Nn, \tl_if_in:NV, \tl_if_in:cn, \tl_if_in:cV}
+% \begin{macro}[TF]
+%   {
+%     \tl_if_in:Nn, \tl_if_in:NV, \tl_if_in:No,
+%     \tl_if_in:cn, \tl_if_in:cV, \tl_if_in:co
+%   }
 %   See \cs{tl_if_in:nnTF} for further comments. Here we simply
 %   expand the token list variable and pass it to \cs{tl_if_in:nnTF}.
 %    \begin{macrocode}
@@ -2445,11 +2466,15 @@
 \cs_new_protected:Npn \tl_if_in:NnF  { \exp_args:No \tl_if_in:nnF  }
 \cs_new_protected:Npn \tl_if_in:NnTF { \exp_args:No \tl_if_in:nnTF }
 \prg_generate_conditional_variant:Nnn \tl_if_in:Nn
-  { NV , c , cV } { T , F , TF }
+  { NV , No , c , cV , co } { T , F , TF }
 %    \end{macrocode}
 % \end{macro}
 %
-% \begin{macro}[TF]{\tl_if_in:nn, \tl_if_in:Vn, \tl_if_in:on, \tl_if_in:nV, \tl_if_in:no}
+% \begin{macro}[TF]
+%   {
+%     \tl_if_in:nn, \tl_if_in:Vn, \tl_if_in:VV, \tl_if_in:on, \tl_if_in:oo,
+%     \tl_if_in:nV, \tl_if_in:no
+%   }
 %   Once more, the test relies on the emptiness test for robustness.
 %   The function \cs{@@_tmp:w} removes tokens until the first occurrence
 %   of |#2|. If this does not appear in |#1|, then the final |#2| is removed,
@@ -2479,7 +2504,7 @@
     \if_false: } \fi:
   }
 \prg_generate_conditional_variant:Nnn \tl_if_in:nn
-  { V , o , nV , no } { T , F , TF }
+  { V , VV , o , oo , nV , no } { T , F , TF }
 %    \end{macrocode}
 % \end{macro}
 %
@@ -2759,7 +2784,7 @@
 %
 % \subsection{Working with the contents of token lists}
 %
-% \begin{macro}{\tl_count:n, \tl_count:V, \tl_count:o}
+% \begin{macro}{\tl_count:n, \tl_count:V, \tl_count:v, \tl_count:e, \tl_count:o}
 % \begin{macro}{\tl_count:N, \tl_count:c}
 % \begin{macro}{\@@_count:n}
 %   Count number of elements within a token list or token list
@@ -2779,7 +2804,7 @@
       { 0 \tl_map_function:NN #1 \@@_count:n }
   }
 \cs_new:Npn \@@_count:n #1 { + 1 }
-\cs_generate_variant:Nn \tl_count:n { V , o }
+\cs_generate_variant:Nn \tl_count:n { V , v , e , o }
 \cs_generate_variant:Nn \tl_count:N { c }
 %    \end{macrocode}
 % \end{macro}
@@ -3017,11 +3042,21 @@
 % \end{macro}
 % \end{macro}
 %
-% \begin{macro}[pTF]{\tl_if_head_eq_meaning:nN}
-% \begin{macro}[pTF]{\tl_if_head_eq_charcode:nN}
-% \begin{macro}[pTF]{\tl_if_head_eq_charcode:fN}
-% \begin{macro}[pTF]{\tl_if_head_eq_catcode:nN}
-% \begin{macro}[pTF]{\tl_if_head_eq_catcode:oN}
+% \begin{macro}[pTF]
+%   {
+%     \tl_if_head_eq_meaning:nN, \tl_if_head_eq_meaning:VN
+%     \tl_if_head_eq_meaning:eN
+%   }
+% \begin{macro}[pTF]
+%   {
+%     \tl_if_head_eq_charcode:nN, \tl_if_head_eq_charcode:VN
+%     \tl_if_head_eq_charcode:eN, \tl_if_head_eq_charcode:fN
+%   }
+% \begin{macro}[pTF]
+%   {
+%     \tl_if_head_eq_catcode:nN, \tl_if_head_eq_catcode:VN
+%     \tl_if_head_eq_catcode:eN, \tl_if_head_eq_catcode:oN
+%   }
 % \begin{macro}[EXP]{\@@_head_exp_not:w}
 % \begin{macro}[EXP]{\@@_if_head_eq_empty_arg:w}
 %   Accessing the first token of a token list is tricky in three cases:
@@ -3060,7 +3095,7 @@
     \fi:
   }
 \prg_generate_conditional_variant:Nnn \tl_if_head_eq_charcode:nN
-  { f } { p , TF , T , F }
+  { V , e , f } { p , TF , T , F }
 %    \end{macrocode}
 %   For \cs{tl_if_head_eq_catcode:nN}, again we detect special cases
 %   with a \cs{tl_if_head_is_N_type:n}.  Then we need to test if the
@@ -3087,7 +3122,7 @@
     \fi:
   }
 \prg_generate_conditional_variant:Nnn \tl_if_head_eq_catcode:nN
-  { o } { p , TF , T , F }
+  { V , e , o } { p , TF , T , F }
 %    \end{macrocode}
 %   For \cs{tl_if_head_eq_meaning:nN}, again, detect special cases.  In
 %   the normal case, use \cs{tl_head:w}, with no \cs{exp_not:N} this
@@ -3108,6 +3143,8 @@
       \@@_if_head_eq_meaning_special:nN
     {#1} #2
   }
+\prg_generate_conditional_variant:Nnn \tl_if_head_eq_meaning:nN
+  { V , e } { p , TF , T , F }
 \cs_new:Npn \@@_if_head_eq_meaning_normal:nN #1 #2
   {
     \exp_after:wN \if_meaning:w
@@ -3161,8 +3198,6 @@
 % \end{macro}
 % \end{macro}
 % \end{macro}
-% \end{macro}
-% \end{macro}
 %
 % \begin{macro}[pTF]{\tl_if_head_is_N_type:n}
 % \begin{macro}[EXP]





More information about the latex3-commits mailing list.