[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