This is a try to allow specific searches for some of our different spaces also 
in regular
expressions.
OTOH, as of now '\s' in regex is not yet implemented for spaces like \thinspace 
etc.
(One would need to rewrite the regex to include the utf8-codes, but that is too 
much
struggle)

        Kornel
diff --git a/src/insets/InsetSpace.cpp b/src/insets/InsetSpace.cpp
index 1b1193d63b..2deea3097e 100644
--- a/src/insets/InsetSpace.cpp
+++ b/src/insets/InsetSpace.cpp
@@ -577,82 +577,89 @@ void InsetSpace::read(Lexer & lex)
 
 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)
 			os << " ";
 		else
diff --git a/src/lyxfind.cpp b/src/lyxfind.cpp
index 1bd9497488..ed2256b6f7 100644
--- a/src/lyxfind.cpp
+++ b/src/lyxfind.cpp
@@ -1294,10 +1294,17 @@ static void buildAccentsMap()
 {
   accents["imath"] = "ı";
   accents["i"] = "ı";
   accents["jmath"] = "È·";
   accents["cdot"] = "·";
+  accents["thickspace"] = u8"\u2004";
+  accents["negthickspace"] = u8"\u2004";
+  accents["medspace"] = u8"\u2005";
+  accents["negmedspace"] = u8"\u2005";
+  accents["thinspace"] = u8"\u2009";
+  accents["negthinspace"] = u8"\u2009";
+  accents["hairspace"] = u8"\u200a";
   accents["lyxmathsym{ß}"] = "ß";
   accents["text{ß}"] = "ß";
   accents["ddot{\\imath}"] = "ï";
   buildaccent("ddot", "aAeEhHiIioOtuUwWxXyY",
                       "äÄëËḧḦïÏïöÖẗüÜẅẄẍẌÿŸ");	// umlaut
@@ -1359,11 +1366,11 @@ static void buildAccentsMap()
  */
 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;
     string key = sub.str(1);
     if (accents.find(key) != accents.end()) {
@@ -2005,10 +2012,11 @@ void LatexInfo::buildKeys(bool isPatternString)
   makeKey("dots|ldots",                     KeyInfo(KeyInfo::isChar, 0, false), isPatternString);
   // Spaces
   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)
   makeKey("vspace|vspace*|hspace|hspace*|mspace", KeyInfo(KeyInfo::noContent, 1, false), isPatternString);
   // Found in fr/UserGuide.lyx

Attachment: pgpXJaKqF5wFc.pgp
Description: Digitale Signatur von OpenPGP

-- 
lyx-devel mailing list
lyx-devel@lists.lyx.org
http://lists.lyx.org/mailman/listinfo/lyx-devel

Reply via email to