commit 64af721adc1a6bc1b730214cbcb14dd7b8f3f2d9
Author: Kornel Benko <[email protected]>
Date:   Sun May 8 20:24:43 2022 +0200

    FindAdv: Handle normal and protected space also inside regular expression
---
 src/lyxfind.cpp |   17 ++++++++++++-----
 1 files changed, 12 insertions(+), 5 deletions(-)

diff --git a/src/lyxfind.cpp b/src/lyxfind.cpp
index 2208fd4..9c70938 100644
--- a/src/lyxfind.cpp
+++ b/src/lyxfind.cpp
@@ -872,7 +872,8 @@ string correctRegex(string t, bool withformat)
         * and \{, \}, \[, \] => {, }, [, ]
         */
        string s("");
-       regex wordre("(\\\\)*(\\\\(([A-Za-z]+|[\\{\\}%])( 
|\\{\\})?|[\\[\\]\\{\\}]))");
+       static std::regex wordre("(\\\\)*(\\\\(( |[A-Za-z]+|[\\{\\}%])( 
|\\{\\})?|[\\[\\]\\{\\}]))");
+       static std::regex protectedSpace { R"(~)" };
        size_t lastpos = 0;
        smatch sub;
        bool backslashed = false;
@@ -892,7 +893,7 @@ string correctRegex(string t, bool withformat)
                                {
                                        // transforms '\backslash \{' into '\{'
                                        string next = t.substr(sub.position(2) 
+ sub.str(2).length(), 2);
-                                       if ((next == "\\{") || (next == "\\}")) 
{
+                                       if ((next == "\\{") || (next == "\\}") 
|| (next == "\\ ")) {
                                                replace = "";
                                                backslashed = true;
                                        }
@@ -907,6 +908,8 @@ string correctRegex(string t, bool withformat)
                                                replace = accents["braceleft"];
                                        else if (sub.str(3) == "}")
                                                replace = accents["braceright"];
+                                       else if (sub.str(3) == " ")
+                                               replace = "\\ ";
                                        else {
                                                // else part should not exist
                                                LASSERT(0, /**/);
@@ -917,6 +920,8 @@ string correctRegex(string t, bool withformat)
                                                replace = "\\{";
                                        else if (sub.str(3) == "}")
                                                replace = "\\}";
+                                       else if (sub.str(3) == " ")
+                                               replace = "\\ ";
                                        else {
                                                // else part should not exist
                                                LASSERT(0, /**/);
@@ -929,6 +934,8 @@ string correctRegex(string t, bool withformat)
                                replace = "}";
                        else if (sub.str(4) == "%")
                                replace = "%";
+                       else if (sub.str(4) == " ")
+                               replace = " ";
                        else {
                                AccentsIterator it_ac = 
accents.find(sub.str(4));
                                if (it_ac == accents.end()) {
@@ -940,14 +947,14 @@ string correctRegex(string t, bool withformat)
                        }
                }
                if (lastpos < (size_t) sub.position(2))
-                       s += t.substr(lastpos, sub.position(2) - lastpos);
+                       s += std::regex_replace(t.substr(lastpos, 
sub.position(2) - lastpos), protectedSpace, R"( )");
                s += replace;
                lastpos = sub.position(2) + sub.length(2);
        }
        if (lastpos == 0)
-               s = t;
+               s = std::regex_replace(t, protectedSpace, R"( )");
        else if (lastpos < t.length())
-               s += t.substr(lastpos, t.length() - lastpos);
+               s += std::regex_replace(t.substr(lastpos, t.length() - 
lastpos), protectedSpace, R"( )");
        // Handle quotes in regex
        // substitute all '„', '“', '»', '«' with '"'
        // and all '‚', '‘', '›', '‹' with "\'"
-- 
lyx-cvs mailing list
[email protected]
http://lists.lyx.org/mailman/listinfo/lyx-cvs

Reply via email to