summaryrefslogtreecommitdiff
path: root/backport-Add-Perl-titlecasing-475.patch
diff options
context:
space:
mode:
Diffstat (limited to 'backport-Add-Perl-titlecasing-475.patch')
-rw-r--r--backport-Add-Perl-titlecasing-475.patch69
1 files changed, 69 insertions, 0 deletions
diff --git a/backport-Add-Perl-titlecasing-475.patch b/backport-Add-Perl-titlecasing-475.patch
new file mode 100644
index 0000000..6cf03b5
--- /dev/null
+++ b/backport-Add-Perl-titlecasing-475.patch
@@ -0,0 +1,69 @@
+From f334e76dc765f23670e957413bae18c9d20b1d82 Mon Sep 17 00:00:00 2001
+From: Nicholas Wilson <nicholas@nicholaswilson.me.uk>
+Date: Mon, 16 Sep 2024 17:38:40 +0100
+Subject: [PATCH] Add Perl titlecasing (#475)
+
+---
+ src/pcre2_substitute.c | 11 +++++++++++
+ testdata/testinput2 | 3 +++
+ testdata/testoutput2 | 4 ++++
+ 3 files changed, 18 insertions(+)
+
+diff --git a/src/pcre2_substitute.c b/src/pcre2_substitute.c
+index 1ccef0660..83ddb8364 100644
+--- a/src/pcre2_substitute.c
++++ b/src/pcre2_substitute.c
+@@ -839,6 +839,12 @@ do
+ forcecase = -1;
+ forcecasereset = 0;
+ ptr += 2;
++ if (ptr + 2 < repend && ptr[0] == CHAR_BACKSLASH && ptr[1] == CHAR_U)
++ {
++ /* Perl title-casing feature for \l\U (and \u\L) */
++ forcecasereset = 1;
++ ptr += 2;
++ }
+ continue;
+
+ case CHAR_U:
+@@ -850,6 +856,11 @@ do
+ forcecase = 1;
+ forcecasereset = 0;
+ ptr += 2;
++ if (ptr + 2 < repend && ptr[0] == CHAR_BACKSLASH && ptr[1] == CHAR_L)
++ {
++ forcecasereset = -1;
++ ptr += 2;
++ }
+ continue;
+
+ default:
+diff --git a/testdata/testinput2 b/testdata/testinput2
+index 51e2095c8..7a836c994 100644
+--- a/testdata/testinput2
++++ b/testdata/testinput2
+@@ -4612,6 +4612,9 @@ B)x/alt_verbnames,mark
+ /a(bc)(DE)/replace=a\u$1\U$1\E$1\l$2\L$2\Eab\Uab\LYZ\EDone,substitute_extended
+ abcDE
+
++/(Hello)|wORLD/g,replace=>${1:+\l\U$0:\u\L$0}<,substitute_extended
++ Hello between wORLD
++
+ /abcd/replace=xy\kz,substitute_extended
+ abcd
+
+diff --git a/testdata/testoutput2 b/testdata/testoutput2
+index eeb635d6d..7c71866b7 100644
+--- a/testdata/testoutput2
++++ b/testdata/testoutput2
+@@ -14854,6 +14854,10 @@ No match
+ abcDE
+ 1: aBcBCbcdEdeabAByzDone
+
++/(Hello)|wORLD/g,replace=>${1:+\l\U$0:\u\L$0}<,substitute_extended
++ Hello between wORLD
++ 2: >hELLO< between >World<
++
+ /abcd/replace=xy\kz,substitute_extended
+ abcd
+ Failed: error -57 at offset 4 in replacement: bad escape sequence in replacement string