commit 2d2e2f1c6dff09314b608b2b4a91ff77771e6a82
Author: Kornel Benko <kor...@lyx.org>
Date:   Thu Dec 10 11:32:59 2020 +0100

    Adv-Search: Use some free unicodes as replacement for searched spaces
    
    Without this, it is difficult to find backslashed macros if in regexp-mode.
---
 src/insets/InsetSpace.cpp |   51 +++++++++++++++++++++++++-------------------
 src/lyxfind.cpp           |   10 ++++++++-
 2 files changed, 38 insertions(+), 23 deletions(-)

diff --git a/src/insets/InsetSpace.cpp b/src/insets/InsetSpace.cpp
index 1b1193d..2deea30 100644
--- a/src/insets/InsetSpace.cpp
+++ b/src/insets/InsetSpace.cpp
@@ -579,78 +579,85 @@ void InsetSpace::latex(otexstream & os, OutputParams 
const & runparams) const
 {
        switch (params_.kind) {
        case InsetSpaceParams::NORMAL:
-               os << (runparams.free_spacing ? " " : "\\ ");
+               os << (runparams.free_spacing && !runparams.for_search ? " " : 
"\\ ");
                break;
        case InsetSpaceParams::PROTECTED:
                if (runparams.local_font &&
                    runparams.local_font->language()->lang() == 
"polutonikogreek")
                        // in babel's polutonikogreek, ~ is active
-                       os << (runparams.free_spacing ? " " : 
"\\nobreakspace{}");
+                       os << (runparams.free_spacing && !runparams.for_search 
? " " : "\\nobreakspace{}");
                else
-                       os << (runparams.free_spacing ? ' ' : '~');
+                       os << (runparams.free_spacing && !runparams.for_search 
? ' ' : '~');
                break;
        case InsetSpaceParams::VISIBLE:
-               os << (runparams.free_spacing ? " " : "\\textvisiblespace{}");
+               os << (runparams.free_spacing && !runparams.for_search ? " " : 
"\\textvisiblespace{}");
                break;
        case InsetSpaceParams::THIN:
-               os << (runparams.free_spacing ? " " : "\\,");
+               if (runparams.for_search)
+                       os << "\\thinspace{}";
+               else
+                       os << (runparams.free_spacing ? " " : "\\,");
                break;
        case InsetSpaceParams::MEDIUM:
-               if (params_.math)
+               if (runparams.for_search)
+                       os << "\\medspace{}";
+               else if (params_.math)
                        os << (runparams.free_spacing ? " " : "\\:");
                else
                        os << (runparams.free_spacing ? " " : "\\medspace{}");
                break;
        case InsetSpaceParams::THICK:
-               if (params_.math)
+               if (runparams.for_search)
+                       os << "\\thickspace{}";
+               else if (params_.math)
                        os << (runparams.free_spacing ? " " : "\\;");
                else
                        os << (runparams.free_spacing ? " " : "\\thickspace{}");
                break;
        case InsetSpaceParams::QUAD:
-               os << (runparams.free_spacing ? " " : "\\quad{}");
+               os << (runparams.free_spacing && !runparams.for_search ? " " : 
"\\quad{}");
                break;
        case InsetSpaceParams::QQUAD:
-               os << (runparams.free_spacing ? " " : "\\qquad{}");
+               os << (runparams.free_spacing && !runparams.for_search ? " " : 
"\\qquad{}");
                break;
        case InsetSpaceParams::ENSPACE:
-               os << (runparams.free_spacing ? " " : "\\enspace{}");
+               os << (runparams.free_spacing && !runparams.for_search ? " " : 
"\\enspace{}");
                break;
        case InsetSpaceParams::ENSKIP:
-               os << (runparams.free_spacing ? " " : "\\enskip{}");
+               os << (runparams.free_spacing && !runparams.for_search ? " " : 
"\\enskip{}");
                break;
        case InsetSpaceParams::NEGTHIN:
-               os << (runparams.free_spacing ? " " : "\\negthinspace{}");
+               os << (runparams.free_spacing && !runparams.for_search ? " " : 
"\\negthinspace{}");
                break;
        case InsetSpaceParams::NEGMEDIUM:
-               os << (runparams.free_spacing ? " " : "\\negmedspace{}");
+               os << (runparams.free_spacing && !runparams.for_search ? " " : 
"\\negmedspace{}");
                break;
        case InsetSpaceParams::NEGTHICK:
-               os << (runparams.free_spacing ? " " : "\\negthickspace{}");
+               os << (runparams.free_spacing && !runparams.for_search ? " " : 
"\\negthickspace{}");
                break;
        case InsetSpaceParams::HFILL:
-               os << (runparams.free_spacing ? " " : "\\hfill{}");
+               os << (runparams.free_spacing && !runparams.for_search ? " " : 
"\\hfill{}");
                break;
        case InsetSpaceParams::HFILL_PROTECTED:
-               os << (runparams.free_spacing ? " " : "\\hspace*{\\fill}");
+               os << (runparams.free_spacing && !runparams.for_search ? " " : 
"\\hspace*{\\fill}");
                break;
        case InsetSpaceParams::DOTFILL:
-               os << (runparams.free_spacing ? " " : "\\dotfill{}");
+               os << (runparams.free_spacing && !runparams.for_search ? " " : 
"\\dotfill{}");
                break;
        case InsetSpaceParams::HRULEFILL:
-               os << (runparams.free_spacing ? " " : "\\hrulefill{}");
+               os << (runparams.free_spacing && !runparams.for_search ? " " : 
"\\hrulefill{}");
                break;
        case InsetSpaceParams::LEFTARROWFILL:
-               os << (runparams.free_spacing ? " " : "\\leftarrowfill{}");
+               os << (runparams.free_spacing && !runparams.for_search ? " " : 
"\\leftarrowfill{}");
                break;
        case InsetSpaceParams::RIGHTARROWFILL:
-               os << (runparams.free_spacing ? " " : "\\rightarrowfill{}");
+               os << (runparams.free_spacing && !runparams.for_search ? " " : 
"\\rightarrowfill{}");
                break;
        case InsetSpaceParams::UPBRACEFILL:
-               os << (runparams.free_spacing ? " " : "\\upbracefill{}");
+               os << (runparams.free_spacing && !runparams.for_search ? " " : 
"\\upbracefill{}");
                break;
        case InsetSpaceParams::DOWNBRACEFILL:
-               os << (runparams.free_spacing ? " " : "\\downbracefill{}");
+               os << (runparams.free_spacing && !runparams.for_search ? " " : 
"\\downbracefill{}");
                break;
        case InsetSpaceParams::CUSTOM:
                if (runparams.free_spacing)
diff --git a/src/lyxfind.cpp b/src/lyxfind.cpp
index 1bd9497..0b811f4 100644
--- a/src/lyxfind.cpp
+++ b/src/lyxfind.cpp
@@ -1296,6 +1296,13 @@ static void buildAccentsMap()
   accents["i"] = "ı";
   accents["jmath"] = "ȷ";
   accents["cdot"] = "·";
+  accents["hairspace"]     = u8"\uf0000";      // select from free unicode 
plane 15
+  accents["thinspace"]     = u8"\uf0002";      // and used _only_ by findadv
+  accents["negthinspace"]  = u8"\uf0003";      // to omit backslashed latex 
macros
+  accents["medspace"]      = u8"\uf0004";      // See 
https://en.wikipedia.org/wiki/Private_Use_Areas
+  accents["negmedspace"]   = u8"\uf0005";
+  accents["thickspace"]    = u8"\uf0006";
+  accents["negthickspace"] = u8"\uf0007";
   accents["lyxmathsym{ß}"] = "ß";
   accents["text{ß}"] = "ß";
   accents["ddot{\\imath}"] = "ï";
@@ -1361,7 +1368,7 @@ void Intervall::removeAccents()
 {
   if (accents.empty())
     buildAccentsMap();
-  static regex const 
accre("\\\\(([\\S]|grave|breve|lyxmathsym|text|ddot|dot|acute|dacute|mathring|check|hat|bar|tilde|subdot|ogonek|cedilla|subring|textsubring|subhat|textsubcircum|subtilde|textsubtilde|dgrave|textdoublegrave|rcap|textroundcap|slashed)\\{[^\\{\\}]+\\}|(i|imath|jmath|cdot)(?![a-zA-Z]))");
+  static regex const 
accre("\\\\(([\\S]|grave|breve|lyxmathsym|text|ddot|dot|acute|dacute|mathring|check|hat|bar|tilde|subdot|ogonek|cedilla|subring|textsubring|subhat|textsubcircum|subtilde|textsubtilde|dgrave|textdoublegrave|rcap|textroundcap|slashed)\\{[^\\{\\}]+\\}|(i|imath|jmath|cdot|[a-z]+space)(?![a-zA-Z]))");
   smatch sub;
   for (sregex_iterator itacc(par.begin(), par.end(), accre), end; itacc != 
end; ++itacc) {
     sub = *itacc;
@@ -2007,6 +2014,7 @@ void LatexInfo::buildKeys(bool isPatternString)
   makeKey("quad|qquad|hfill|dotfill",               KeyInfo(KeyInfo::isChar, 
0, false), isPatternString);
   makeKey("textvisiblespace|nobreakspace",          KeyInfo(KeyInfo::isChar, 
0, false), isPatternString);
   makeKey("negthickspace|negmedspace|negthinspace", KeyInfo(KeyInfo::isChar, 
0, false), isPatternString);
+  makeKey("thickspace|medspace|thinspace",          KeyInfo(KeyInfo::isChar, 
0, false), isPatternString);
   // Skip
   // makeKey("enskip|smallskip|medskip|bigskip|vfill", 
KeyInfo(KeyInfo::isChar, 0, false), isPatternString);
   // Custom space/skip, remove the content (== length value)
-- 
lyx-cvs mailing list
lyx-cvs@lists.lyx.org
http://lists.lyx.org/mailman/listinfo/lyx-cvs

Reply via email to