[latex3-commits] [git/LaTeX3-latex3-latex3] regex-callout: Detect misuses of l3regex callouts in places they don't belong (ded898038)

Bruno Le Floch blflatex at gmail.com
Sat May 15 18:37:32 CEST 2021


Repository : https://github.com/latex3/latex3
On branch  : regex-callout
Link       : https://github.com/latex3/latex3/commit/ded89803826ae1af8c1a097c3c1084df026fbe88

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

commit ded89803826ae1af8c1a097c3c1084df026fbe88
Author: Bruno Le Floch <blflatex at gmail.com>
Date:   Sun Jul 19 02:16:49 2020 +0200

    Detect misuses of l3regex callouts in places they don't belong


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

ded89803826ae1af8c1a097c3c1084df026fbe88
 l3kernel/l3regex.dtx              | 28 +++++++++++++++++++---------
 l3kernel/testfiles/m3regex011.lvt |  1 +
 l3kernel/testfiles/m3regex011.tlg | 21 +++++++++++++++++++++
 3 files changed, 41 insertions(+), 9 deletions(-)

diff --git a/l3kernel/l3regex.dtx b/l3kernel/l3regex.dtx
index 34b812899..2c9d05c53 100644
--- a/l3kernel/l3regex.dtx
+++ b/l3kernel/l3regex.dtx
@@ -2610,7 +2610,7 @@
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_compile_raw_error:N #1
   {
-    \__kernel_msg_error:nnx { regex } { bad-escape } {#1}
+    \__kernel_msg_error:nnx { regex } { bad-escape } { \iow_char:N\\ #1 }
     \@@_compile_raw:N #1
   }
 %    \end{macrocode}
@@ -3143,18 +3143,28 @@
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_compile_special_group_C:w #1#2
   {
-    \@@_two_if_eq:NNNNTF #1 #2 \@@_compile_special:N \c_left_brace_str
-      {
-        \tl_set:Nx \l_@@_internal_a_tl { \if_false: } \fi:
-        \@@_compile_C_loop:NN
-      }
+    \@@_if_in_class_or_catcode:TF
       {
-        \__kernel_msg_error:nnn { regex } { missing-lbrace } { (?C }
+        \__kernel_msg_error:nnn { regex } { bad-escape } { (?C }
         \@@_compile_raw:N (
         \@@_compile_raw:N ?
         \@@_compile_raw:N C
         #1 #2
       }
+      {
+        \@@_two_if_eq:NNNNTF #1 #2 \@@_compile_special:N \c_left_brace_str
+          {
+            \tl_set:Nx \l_@@_internal_a_tl { \if_false: } \fi:
+            \@@_compile_C_loop:NN
+          }
+          {
+            \__kernel_msg_error:nnn { kernel } { missing-lbrace } { (?C }
+            \@@_compile_raw:N (
+            \@@_compile_raw:N ?
+            \@@_compile_raw:N C
+            #1 #2
+          }
+      }
   }
 \cs_new:Npn \@@_compile_C_loop:NN #1#2
   {
@@ -7449,7 +7459,7 @@
 %    \begin{macrocode}
 \__kernel_msg_new:nnnn { regex } { bad-escape }
   {
-    Invalid~escape~'\iow_char:N\\#1'~
+    Invalid~escape~'#1'~
     \@@_if_in_cs:TF { within~a~control~sequence. }
       {
         \@@_if_in_class:TF
@@ -7458,7 +7468,7 @@
       }
   }
   {
-    The~escape~sequence~'\iow_char:N\\#1'~may~not~appear~
+    The~escape~sequence~'#1'~may~not~appear~
     \@@_if_in_cs:TF
       {
         within~a~control~sequence~test~introduced~by~
diff --git a/l3kernel/testfiles/m3regex011.lvt b/l3kernel/testfiles/m3regex011.lvt
index 53f8d874a..0afeb89c4 100644
--- a/l3kernel/testfiles/m3regex011.lvt
+++ b/l3kernel/testfiles/m3regex011.lvt
@@ -55,6 +55,7 @@
       { / }
       \l_tmpa_tl
     \tl_log:N \l_tmpa_tl
+    \regex_show:n { \cL (?C{}) Y }
   }
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/l3kernel/testfiles/m3regex011.tlg b/l3kernel/testfiles/m3regex011.tlg
index 5306c5d7d..b8ec2797f 100644
--- a/l3kernel/testfiles/m3regex011.tlg
+++ b/l3kernel/testfiles/m3regex011.tlg
@@ -34,6 +34,27 @@ TEST 3: Callouts with (?C...)
 ============================================================
 > \l_tmpa_tl=[\aa {]}\bb .
 > \l_tmpa_tl=[\aa {/]/}\bb .
+! LaTeX3 Error: Invalid escape '(?C' following a category test.
+For immediate help type H <return>.
+ ...                                              
+l. ...  }
+The escape sequence '(?C' may not appear following a category test such as
+'\cL' because it does not match exactly one character.
+LaTeX3 Warning: Braced quantifier '{' may not be followed by '}'.
+LaTeX3 Warning: Extra right parenthesis ignored in regular expression.
+> Compiled regex {\cL (?C{})Y}:
++-branch
+  Match
+    categories L, class
+      char code 40
+  char code 63
+  char code 67
+  char code 123
+  char code 125
+  char code 41
+  char code 89.
+<recently read> }
+l. ...  }
 ============================================================
 ============================================================
 TEST 3: Peek regex





More information about the latex3-commits mailing list.