commit e6d998d33cea38fc917f7e604d8b6d6071070a34
Author: Kornel Benko <[email protected]>
Date:   Sun Mar 20 11:33:12 2022 +0100

    FindAdv: If possible use unicode instead of math command when searching
    
    Wrong behaviour before this commit:
    Open new lyx-file
    insert
        unicode-insert 0x025c 0x1d08
    Open adv-find dialog
    search for unicode 0x025c OK
    search for unicode 0x1d08 OK
    search with regex for unicode 0x025c OK
    search with regex for unicode 0x1d08 ==> NOT OK (because we are searching 
for \textrevepsilon
        and this was mapped to 0x025c
---
 src/lyxfind.cpp              |    3 ++-
 src/mathed/InsetMathHull.cpp |   11 +++++++++--
 src/mathed/InsetMathNest.cpp |   10 ++++++++--
 src/mathed/MathExtern.cpp    |    4 ++++
 src/mathed/MathStream.h      |    3 ++-
 5 files changed, 25 insertions(+), 6 deletions(-)

diff --git a/src/lyxfind.cpp b/src/lyxfind.cpp
index c187e10..98c254d 100644
--- a/src/lyxfind.cpp
+++ b/src/lyxfind.cpp
@@ -917,7 +917,7 @@ string escape_for_regex(string s, bool withformat)
                        if (lastpos == s.size())
                                break;
                }
-               size_t end_pos = s.find("\\endregexp{}}", regex_pos + 8);
+               size_t end_pos = s.find("\\endregexp{", regex_pos + 8);
                result += correctRegex(s.substr(regex_pos + 8, end_pos 
-(regex_pos + 8)), withformat);
                lastpos = end_pos + 13;
        }
@@ -3519,6 +3519,7 @@ MatchStringAdv::MatchStringAdv(lyx::Buffer & buf, 
FindAndReplaceOptions & opt)
                string lead_as_regexp;
                if (lead_size > 0) {
                        lead_as_regexp = string2regex(par_as_string.substr(0, 
lead_size));
+                       (void)regex_replace(par_as_string_nolead, 
par_as_string_nolead, "\\$$", "");
                        (void)regex_replace(par_as_string_nolead, 
par_as_string_nolead, "}$", "");
                        par_as_string = par_as_string_nolead;
                        LYXERR(Debug::FIND, "lead_as_regexp is '" << 
lead_as_regexp << "'");
diff --git a/src/mathed/InsetMathHull.cpp b/src/mathed/InsetMathHull.cpp
index 8b63c73..805f84c 100644
--- a/src/mathed/InsetMathHull.cpp
+++ b/src/mathed/InsetMathHull.cpp
@@ -2357,12 +2357,19 @@ int InsetMathHull::plaintext(odocstringstream & os,
        odocstringstream oss;
        otexrowstream ots(oss);
        Encoding const * const enc = encodings.fromLyXName("utf8");
-       TeXMathStream wi(ots, false, true, TeXMathStream::wsDefault, enc);
 
+       TeXMathStream::OutputType ot;
+       if (op.for_searchAdv == OutputParams::NoSearch)
+               ot = TeXMathStream::wsDefault;
+       else
+               ot = TeXMathStream::wsSearchAdv;
        // Fix Bug #6139
-       if (type_ == hullRegexp)
+       if (type_ == hullRegexp) {
+               TeXMathStream wi(ots, false, true, ot, enc);
                write(wi);
+       }
        else {
+               TeXMathStream wi(ots, false, true, ot, enc);
                for (row_type r = 0; r < nrows(); ++r) {
                        for (col_type c = 0; c < ncols(); ++c)
                                wi << (c == 0 ? "" : "\t") << cell(index(r, c));
diff --git a/src/mathed/InsetMathNest.cpp b/src/mathed/InsetMathNest.cpp
index 7241e0b..4f21924 100644
--- a/src/mathed/InsetMathNest.cpp
+++ b/src/mathed/InsetMathNest.cpp
@@ -358,8 +358,14 @@ void InsetMathNest::normalize(NormalStream & os) const
 
 void InsetMathNest::latex(otexstream & os, OutputParams const & runparams) 
const
 {
-       TeXMathStream wi(os, runparams.moving_arg, true,
-                        runparams.dryrun ? TeXMathStream::wsDryrun : 
TeXMathStream::wsDefault,
+       TeXMathStream::OutputType ot;
+       if (runparams.for_searchAdv != OutputParams::NoSearch)
+               ot = TeXMathStream::wsSearchAdv;
+       else if (runparams.dryrun)
+               ot = TeXMathStream::wsDryrun;
+       else
+               ot = TeXMathStream::wsDefault;
+       TeXMathStream wi(os, runparams.moving_arg, true, ot,
                         runparams.encoding);
        wi.strikeoutMath(runparams.inDeletedInset);
        if (runparams.inulemcmd) {
diff --git a/src/mathed/MathExtern.cpp b/src/mathed/MathExtern.cpp
index 5c182c7..527543a 100644
--- a/src/mathed/MathExtern.cpp
+++ b/src/mathed/MathExtern.cpp
@@ -1425,6 +1425,10 @@ void writeString(docstring const & s, TeXMathStream & os)
                os << (os.asciiOnly() ? escape(s) : s);
                return;
        }
+       else if (os.output() == TeXMathStream::wsSearchAdv) {
+               os << s;
+               return;
+       }
 
        if (os.lockedMode()) {
                bool space;
diff --git a/src/mathed/MathStream.h b/src/mathed/MathStream.h
index d6a35c5..6d0399e 100644
--- a/src/mathed/MathStream.h
+++ b/src/mathed/MathStream.h
@@ -38,7 +38,8 @@ public:
        enum OutputType {
                wsDefault,
                wsDryrun,
-               wsPreview
+               wsPreview,
+               wsSearchAdv
        };
        ///
        enum UlemCmdType {
-- 
lyx-cvs mailing list
[email protected]
http://lists.lyx.org/mailman/listinfo/lyx-cvs

Reply via email to