[latex3-commits] [l3svn] r7360 - Catch some cases of bad escaped letters in regex replacement

noreply at latex-project.org noreply at latex-project.org
Fri Jul 14 05:09:03 CEST 2017


Author: bruno
Date: 2017-07-14 05:09:02 +0200 (Fri, 14 Jul 2017)
New Revision: 7360

Modified:
   trunk/l3kernel/l3regex.dtx
   trunk/l3kernel/testfiles/m3expl001.luatex.tlg
   trunk/l3kernel/testfiles/m3expl001.ptex.tlg
   trunk/l3kernel/testfiles/m3expl001.tlg
   trunk/l3kernel/testfiles/m3expl001.uptex.tlg
   trunk/l3kernel/testfiles/m3expl001.xetex.tlg
   trunk/l3kernel/testfiles/m3expl003.luatex.tlg
   trunk/l3kernel/testfiles/m3expl003.ptex.tlg
   trunk/l3kernel/testfiles/m3expl003.tlg
   trunk/l3kernel/testfiles/m3expl003.uptex.tlg
   trunk/l3kernel/testfiles/m3expl003.xetex.tlg
   trunk/l3kernel/testfiles/m3regex009.lvt
   trunk/l3kernel/testfiles/m3regex009.tlg
Log:
Catch some cases of bad escaped letters in regex replacement


Modified: trunk/l3kernel/l3regex.dtx
===================================================================
--- trunk/l3kernel/l3regex.dtx	2017-07-13 13:24:24 UTC (rev 7359)
+++ trunk/l3kernel/l3regex.dtx	2017-07-14 03:09:02 UTC (rev 7360)
@@ -432,8 +432,9 @@
 % \item[\\cX(\ldots{})] Produces the characters \enquote{\ldots{}} with
 %   category~|X|, which must be one of |CBEMTPUDSLOA| as in regular
 %   expressions.  Parentheses are optional for a single character (which
-%   can be an escape sequence).  This can be nested, for instance
-%   |\cL(Hello\cS\ world)!|
+%   can be an escape sequence).  When nested, the innermost category
+%   code applies, for instance |\cL(Hello\cS\ world)!| gives this text
+%   with standard category codes.
 % \item[\\c\Arg{text}] Produces the control sequence with csname
 %   \meta{text}.  The \meta{text} may contain references to the
 %   submatches |\0|, |\1|, and so on, as in the example for |\u| below.
@@ -5332,7 +5333,19 @@
                   \l_@@_replacement_category_tl
                 \tl_set:Nn \l_@@_replacement_category_tl {#1}
               }
-              { \use:c { @@_replacement_c_#1:w } #2 #3 }
+              {
+                \token_if_eq_meaning:NNT #2 \@@_replacement_escaped:N
+                  {
+                    \@@_char_if_alphanumeric:NTF #3
+                      {
+                        \__msg_kernel_error:nnnn
+                          { kernel } { replacement-catcode-escaped }
+                          {#1} {#3}
+                      }
+                      { }
+                  }
+                \use:c { @@_replacement_c_#1:w } #2 #3
+              }
           }
       }
   }
@@ -6352,6 +6365,16 @@
     the~character~category.~Then,~a~character~must~follow.~LaTeX~
     reached~the~end~of~the~replacement~when~looking~for~that.
   }
+\__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~

Modified: trunk/l3kernel/testfiles/m3expl001.luatex.tlg
===================================================================
--- trunk/l3kernel/testfiles/m3expl001.luatex.tlg	2017-07-13 13:24:24 UTC (rev 7359)
+++ trunk/l3kernel/testfiles/m3expl001.luatex.tlg	2017-07-14 03:09:02 UTC (rev 7360)
@@ -4951,6 +4951,7 @@
 Defining message LaTeX/kernel/replacement-u on line ...
 Defining message LaTeX/kernel/replacement-g on line ...
 Defining message LaTeX/kernel/replacement-catcode-end on line ...
+Defining message LaTeX/kernel/replacement-catcode-escaped on line ...
 Defining message LaTeX/kernel/replacement-catcode-in-cs on line ...
 Defining message LaTeX/kernel/replacement-null-space on line ...
 Defining message LaTeX/kernel/replacement-missing-rbrace on line ...

Modified: trunk/l3kernel/testfiles/m3expl001.ptex.tlg
===================================================================
--- trunk/l3kernel/testfiles/m3expl001.ptex.tlg	2017-07-13 13:24:24 UTC (rev 7359)
+++ trunk/l3kernel/testfiles/m3expl001.ptex.tlg	2017-07-14 03:09:02 UTC (rev 7360)
@@ -4941,6 +4941,7 @@
 Defining message LaTeX/kernel/replacement-u on line ...
 Defining message LaTeX/kernel/replacement-g on line ...
 Defining message LaTeX/kernel/replacement-catcode-end on line ...
+Defining message LaTeX/kernel/replacement-catcode-escaped on line ...
 Defining message LaTeX/kernel/replacement-catcode-in-cs on line ...
 Defining message LaTeX/kernel/replacement-null-space on line ...
 Defining message LaTeX/kernel/replacement-missing-rbrace on line ...

Modified: trunk/l3kernel/testfiles/m3expl001.tlg
===================================================================
--- trunk/l3kernel/testfiles/m3expl001.tlg	2017-07-13 13:24:24 UTC (rev 7359)
+++ trunk/l3kernel/testfiles/m3expl001.tlg	2017-07-14 03:09:02 UTC (rev 7360)
@@ -4941,6 +4941,7 @@
 Defining message LaTeX/kernel/replacement-u on line ...
 Defining message LaTeX/kernel/replacement-g on line ...
 Defining message LaTeX/kernel/replacement-catcode-end on line ...
+Defining message LaTeX/kernel/replacement-catcode-escaped on line ...
 Defining message LaTeX/kernel/replacement-catcode-in-cs on line ...
 Defining message LaTeX/kernel/replacement-null-space on line ...
 Defining message LaTeX/kernel/replacement-missing-rbrace on line ...

Modified: trunk/l3kernel/testfiles/m3expl001.uptex.tlg
===================================================================
--- trunk/l3kernel/testfiles/m3expl001.uptex.tlg	2017-07-13 13:24:24 UTC (rev 7359)
+++ trunk/l3kernel/testfiles/m3expl001.uptex.tlg	2017-07-14 03:09:02 UTC (rev 7360)
@@ -4939,6 +4939,7 @@
 Defining message LaTeX/kernel/replacement-u on line ...
 Defining message LaTeX/kernel/replacement-g on line ...
 Defining message LaTeX/kernel/replacement-catcode-end on line ...
+Defining message LaTeX/kernel/replacement-catcode-escaped on line ...
 Defining message LaTeX/kernel/replacement-catcode-in-cs on line ...
 Defining message LaTeX/kernel/replacement-null-space on line ...
 Defining message LaTeX/kernel/replacement-missing-rbrace on line ...

Modified: trunk/l3kernel/testfiles/m3expl001.xetex.tlg
===================================================================
--- trunk/l3kernel/testfiles/m3expl001.xetex.tlg	2017-07-13 13:24:24 UTC (rev 7359)
+++ trunk/l3kernel/testfiles/m3expl001.xetex.tlg	2017-07-14 03:09:02 UTC (rev 7360)
@@ -4929,6 +4929,7 @@
 Defining message LaTeX/kernel/replacement-u on line ...
 Defining message LaTeX/kernel/replacement-g on line ...
 Defining message LaTeX/kernel/replacement-catcode-end on line ...
+Defining message LaTeX/kernel/replacement-catcode-escaped on line ...
 Defining message LaTeX/kernel/replacement-catcode-in-cs on line ...
 Defining message LaTeX/kernel/replacement-null-space on line ...
 Defining message LaTeX/kernel/replacement-missing-rbrace on line ...

Modified: trunk/l3kernel/testfiles/m3expl003.luatex.tlg
===================================================================
--- trunk/l3kernel/testfiles/m3expl003.luatex.tlg	2017-07-13 13:24:24 UTC (rev 7359)
+++ trunk/l3kernel/testfiles/m3expl003.luatex.tlg	2017-07-14 03:09:02 UTC (rev 7360)
@@ -4952,6 +4952,7 @@
 Defining message LaTeX/kernel/replacement-u on line ...
 Defining message LaTeX/kernel/replacement-g on line ...
 Defining message LaTeX/kernel/replacement-catcode-end on line ...
+Defining message LaTeX/kernel/replacement-catcode-escaped on line ...
 Defining message LaTeX/kernel/replacement-catcode-in-cs on line ...
 Defining message LaTeX/kernel/replacement-null-space on line ...
 Defining message LaTeX/kernel/replacement-missing-rbrace on line ...

Modified: trunk/l3kernel/testfiles/m3expl003.ptex.tlg
===================================================================
--- trunk/l3kernel/testfiles/m3expl003.ptex.tlg	2017-07-13 13:24:24 UTC (rev 7359)
+++ trunk/l3kernel/testfiles/m3expl003.ptex.tlg	2017-07-14 03:09:02 UTC (rev 7360)
@@ -4942,6 +4942,7 @@
 Defining message LaTeX/kernel/replacement-u on line ...
 Defining message LaTeX/kernel/replacement-g on line ...
 Defining message LaTeX/kernel/replacement-catcode-end on line ...
+Defining message LaTeX/kernel/replacement-catcode-escaped on line ...
 Defining message LaTeX/kernel/replacement-catcode-in-cs on line ...
 Defining message LaTeX/kernel/replacement-null-space on line ...
 Defining message LaTeX/kernel/replacement-missing-rbrace on line ...

Modified: trunk/l3kernel/testfiles/m3expl003.tlg
===================================================================
--- trunk/l3kernel/testfiles/m3expl003.tlg	2017-07-13 13:24:24 UTC (rev 7359)
+++ trunk/l3kernel/testfiles/m3expl003.tlg	2017-07-14 03:09:02 UTC (rev 7360)
@@ -4942,6 +4942,7 @@
 Defining message LaTeX/kernel/replacement-u on line ...
 Defining message LaTeX/kernel/replacement-g on line ...
 Defining message LaTeX/kernel/replacement-catcode-end on line ...
+Defining message LaTeX/kernel/replacement-catcode-escaped on line ...
 Defining message LaTeX/kernel/replacement-catcode-in-cs on line ...
 Defining message LaTeX/kernel/replacement-null-space on line ...
 Defining message LaTeX/kernel/replacement-missing-rbrace on line ...

Modified: trunk/l3kernel/testfiles/m3expl003.uptex.tlg
===================================================================
--- trunk/l3kernel/testfiles/m3expl003.uptex.tlg	2017-07-13 13:24:24 UTC (rev 7359)
+++ trunk/l3kernel/testfiles/m3expl003.uptex.tlg	2017-07-14 03:09:02 UTC (rev 7360)
@@ -4940,6 +4940,7 @@
 Defining message LaTeX/kernel/replacement-u on line ...
 Defining message LaTeX/kernel/replacement-g on line ...
 Defining message LaTeX/kernel/replacement-catcode-end on line ...
+Defining message LaTeX/kernel/replacement-catcode-escaped on line ...
 Defining message LaTeX/kernel/replacement-catcode-in-cs on line ...
 Defining message LaTeX/kernel/replacement-null-space on line ...
 Defining message LaTeX/kernel/replacement-missing-rbrace on line ...

Modified: trunk/l3kernel/testfiles/m3expl003.xetex.tlg
===================================================================
--- trunk/l3kernel/testfiles/m3expl003.xetex.tlg	2017-07-13 13:24:24 UTC (rev 7359)
+++ trunk/l3kernel/testfiles/m3expl003.xetex.tlg	2017-07-14 03:09:02 UTC (rev 7360)
@@ -4930,6 +4930,7 @@
 Defining message LaTeX/kernel/replacement-u on line ...
 Defining message LaTeX/kernel/replacement-g on line ...
 Defining message LaTeX/kernel/replacement-catcode-end on line ...
+Defining message LaTeX/kernel/replacement-catcode-escaped on line ...
 Defining message LaTeX/kernel/replacement-catcode-in-cs on line ...
 Defining message LaTeX/kernel/replacement-null-space on line ...
 Defining message LaTeX/kernel/replacement-missing-rbrace on line ...

Modified: trunk/l3kernel/testfiles/m3regex009.lvt
===================================================================
--- trunk/l3kernel/testfiles/m3regex009.lvt	2017-07-13 13:24:24 UTC (rev 7359)
+++ trunk/l3kernel/testfiles/m3regex009.lvt	2017-07-14 03:09:02 UTC (rev 7360)
@@ -176,4 +176,26 @@
   }
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\OMIT
+\cs_new_protected:Npn \testii:nnn #1#2#3
+  {
+    \iow_term:n { "#1",~"#2",~"#3" }
+    \tl_set:Nn \l_tmpa_tl {#1}
+    \regex_replace_all:nnN {#2} {#3} \l_tmpa_tl
+    \tl_show_analysis:N \l_tmpa_tl
+  }
+\cs_generate_variant:Nn \testii:nnn { x x x }
+\TIMO
+
+\TEST { Malformed~catcode~in~replacement }
+  {
+    \testii:xxx { a } { a } { \iow_char:N\\cC\iow_char:N\& }
+    \testii:xxx { a } { a } { \iow_char:N\\cL\iow_char:N\\. }
+    \testii:xxx { a } { a } { \iow_char:N\\cL\iow_char:N\\0 }
+    \testii:xxx { a } { a } { \iow_char:N\\cL\iow_char:N\\u }
+    \testii:xxx { a } { a } { \iow_char:N\\cL\iow_char:N\\n }
+  }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \END

Modified: trunk/l3kernel/testfiles/m3regex009.tlg
===================================================================
--- trunk/l3kernel/testfiles/m3regex009.tlg	2017-07-13 13:24:24 UTC (rev 7359)
+++ trunk/l3kernel/testfiles/m3regex009.tlg	2017-07-14 03:09:02 UTC (rev 7360)
@@ -1034,3 +1034,66 @@
 spelling (e.g., `I\hbox'). Otherwise just continue,
 and I'll forget about whatever was undefined.
 ============================================================
+============================================================
+TEST 8: Malformed catcode in replacement
+============================================================
+"a", "a", "\cC&"
+The token list \l_tmpa_tl contains the tokens:
+>  \& (control sequence=\char"26=38).
+<recently read> }
+l. ...  }
+"a", "a", "\cL\."
+The token list \l_tmpa_tl contains the tokens:
+>  . (the letter .).
+<recently read> }
+l. ...  }
+"a", "a", "\cL\0"
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+!
+! LaTeX error: "kernel/replacement-catcode-escaped"
+! 
+! Escaped letter or digit after category code in replacement text.
+! 
+! See the LaTeX3 documentation for further information.
+! 
+! For immediate help type H <return>.
+!...............................................  
+l. ...  }
+|'''''''''''''''''''''''''''''''''''''''''''''''
+| In a replacement text, the '\c' escape sequence can be followed by one of
+| the letters 'ABCDELMOPSTU' representing the character category. Then, a
+| character must follow, not '\0'.
+|...............................................
+The token list \l_tmpa_tl contains the tokens:
+>  0 (the letter 0).
+<recently read> }
+l. ...  }
+"a", "a", "\cL\u"
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+!
+! LaTeX error: "kernel/replacement-catcode-escaped"
+! 
+! Escaped letter or digit after category code in replacement text.
+! 
+! See the LaTeX3 documentation for further information.
+! 
+! For immediate help type H <return>.
+!...............................................  
+l. ...  }
+|'''''''''''''''''''''''''''''''''''''''''''''''
+| In a replacement text, the '\c' escape sequence can be followed by one of
+| the letters 'ABCDELMOPSTU' representing the character category. Then, a
+| character must follow, not '\u'.
+|...............................................
+The token list \l_tmpa_tl contains the tokens:
+>  u (the letter u).
+<recently read> }
+l. ...  }
+"a", "a", "\cL\n"
+The token list \l_tmpa_tl contains the tokens:
+>  
+ (the letter 
+).
+<recently read> }
+l. ...  }
+============================================================



More information about the latex3-commits mailing list