[prev in list] [next in list] [prev in thread] [next in thread] 

List:       lyx-cvs
Subject:    [LyX features/features/indexmacros] Merge branch 'master' into features/indexmacros
From:       Juergen Spitzmueller <spitz () lyx ! org>
Date:       2022-05-14 14:08:30
Message-ID: 20220514140832.5FA39280303 () lyx ! lyx ! org
[Download RAW message or body]

The branch, features/indexmacros, has been updated.

- Log -----------------------------------------------------------------

commit 047004cb0fca7247a6e13dde9f22c9a56ab245e6
Merge: f352a37 1464bd3
Author: Juergen Spitzmueller <spitz@lyx.org>
Date:   Sat May 14 16:29:46 2022 +0200

    Merge branch 'master' into features/indexmacros


commit 1464bd3f3fc9895affadf56d12c68e9751983ad1
Author: Kornel Benko <kornel@lyx.org>
Date:   Sat May 14 14:49:52 2022 +0200

    FindAdv: Amend(2) f845a4e9
    
    Removing '\n' like in previous version with utf8-strings
    This is needed e.g. for display math, which comes as
    	"\n\\[\n.....\n\\]\n"

diff --git a/src/lyxfind.cpp b/src/lyxfind.cpp
index 480d4d1..e7771a8 100644
--- a/src/lyxfind.cpp
+++ b/src/lyxfind.cpp
@@ -4014,16 +4014,21 @@ static string convertLF2Space(docstring const &s, bool \
ignore_format)  dospace = false;
 				}
 			}
-			else if ((pos > start) &&
-			     s[pos-1] == '%') {
-				skip = 1;
-				while ((pos > start+skip) && (s[pos-1-skip] == '%'))
-					skip++;
-				if ((pos > start+skip) &&
-				    (s[pos+1] == '~' || isSpace(s[pos+1]) ||
-				     s[pos-1-skip] == '~' || isSpace(s[pos-1-skip]))) {
-					// discard '%%%%%\n'
+			else if (pos > start) {
+				if (s[pos-1] == '%') {
+					skip = 1;
+					while ((pos > start+skip) && (s[pos-1-skip] == '%'))
+						skip++;
+					if ((pos > start+skip) &&
+					    (s[pos+1] == '~' || isSpace(s[pos+1]) ||
+					     s[pos-1-skip] == '~' || isSpace(s[pos-1-skip]))) {
+						// discard '%%%%%\n'
+						dospace = false;
+					}
+				}
+				else if (!isAlnumASCII(s[pos+1]) || !isAlnumASCII(s[pos-1])) {
 					dospace = false;
+					skip = 0;	// remove the '\n' only
 				}
 			}
 		}

commit 3576be9a3b63ccea5f94f7eda8bf56d4d3c3495a
Author: Kornel Benko <kornel@lyx.org>
Date:   Sat May 14 14:49:03 2022 +0200

    Ctests: Adapt test 06 to changed shortcut

diff --git a/development/autotests/findadv-06-in.txt \
b/development/autotests/findadv-06-in.txt index 5df35bd..a746501 100644
--- a/development/autotests/findadv-06-in.txt
+++ b/development/autotests/findadv-06-in.txt
@@ -31,8 +31,8 @@ CP: Key (queried) [action=buffer-begin][Ctrl+Home]
 KK: \[Escape]\C\[Home]
 KK: \Axdialog-show findreplaceadv\[Return]
 KK: \[Delete]
-# Uncheck ignore format
-#KK: \At\Ar\Ak\Ah
+# Check ignore format
+KK: \At\Ar\Ať\Ah
 #KK: \CF
 KK: \C\[F29]
 KK: foo\[Return]\[Return]\[Return]

commit cd6d21ebb3c66a60a38b371e66179bac6e8044ed
Author: Kornel Benko <kornel@lyx.org>
Date:   Sat May 14 09:51:23 2022 +0200

    FindAdv: Amend f845a4e9
    
    Also do not remove '\n' if in non-format-search mode. Otherwise
    '\n' cannot be found with regex '\s'

diff --git a/src/lyxfind.cpp b/src/lyxfind.cpp
index b996cd0..480d4d1 100644
--- a/src/lyxfind.cpp
+++ b/src/lyxfind.cpp
@@ -3986,12 +3986,14 @@ static string convertLF2Space(docstring const &s, bool \
ignore_format)  size_t pos;
 	size_t start = 0;
 	size_t end = s.size() - 1;
-	while (s[start] == '\n' && start <= end)
-		start++;
-	while (end >= start && s[end] == '\n')
-		end--;
-	if (start >= end + 1)
-		return "";
+	if (!ignore_format) {
+		while (s[start] == '\n' && start <= end)
+			start++;
+		while (end >= start && s[end] == '\n')
+			end--;
+		if (start >= end + 1)
+			return "";
+	}
 	do {
 		bool dospace = true;
 		int skip = -1;

commit f845a4e9a38897d86d4e713024d1f5e2b990df21
Author: Kornel Benko <kornel@lyx.org>
Date:   Sat May 14 09:25:06 2022 +0200

    FindAdv: Do not handle stale empty latex commands if not in format-search mode
    
    In non-format-search mode, we do not have any latex commands here.

diff --git a/src/lyxfind.cpp b/src/lyxfind.cpp
index 4f5d97d..b996cd0 100644
--- a/src/lyxfind.cpp
+++ b/src/lyxfind.cpp
@@ -4093,16 +4093,18 @@ string MatchStringAdv::normalize(docstring const & s, bool \
ignore_format) const  {
 	string t = convertLF2Space(s, ignore_format);
 
-	// Remove stale empty \emph{}, \textbf{} and similar blocks from latexify
-	// Kornel: Added textsl, textsf, textit, texttt and noun
-	// + allow to seach for colored text too
-	LYXERR(Debug::FINDVERBOSE, "Removing stale empty macros from: " << t);
-	while (regex_replace(t, t, \
"\\\\(emph|noun|text(bf|sl|sf|it|tt)|(u|uu)line|(s|x)out|uwave)(\\{(\\{\\})?\\})+", \
                ""))
-		LYXERR(Debug::FINDVERBOSE, "  further removing stale empty \\emph{}, \\textbf{} \
                macros from: " << t);
-	while (regex_replace(t, t, \
                "\\\\((sub)?(((sub)?section)|paragraph)|part)\\*?(\\{(\\{\\})?\\})+", \
                ""))
-		LYXERR(Debug::FINDVERBOSE, "  further removing stale empty \\section{}, \\part{}, \
                \\paragraph{} macros from: " << t);
-	while (regex_replace(t, t, \
                "\\\\(foreignlanguage|textcolor|item)\\{[a-z]+\\}(\\{(\\{\\})?\\})+", \
                ""));
-
+	// The following replaces are not appropriate in non-format-search mode
+	if (!ignore_format) {
+		// Remove stale empty \emph{}, \textbf{} and similar blocks from latexify
+		// Kornel: Added textsl, textsf, textit, texttt and noun
+		// + allow to seach for colored text too
+		LYXERR(Debug::FINDVERBOSE, "Removing stale empty macros from: " << t);
+		while (regex_replace(t, t, \
"\\\\(emph|noun|text(bf|sl|sf|it|tt)|(u|uu)line|(s|x)out|uwave)(\\{(\\{\\})?\\})+", \
"")) +			LYXERR(Debug::FINDVERBOSE, "  further removing stale empty \\emph{}, \
\\textbf{} macros from: " << t); +		while (regex_replace(t, t, \
"\\\\((sub)?(((sub)?section)|paragraph)|part)\\*?(\\{(\\{\\})?\\})+", "")) \
+			LYXERR(Debug::FINDVERBOSE, "  further removing stale empty \\section{}, \\part{}, \
\\paragraph{} macros from: " << t); +		while (regex_replace(t, t, \
"\\\\(foreignlanguage|textcolor|item)\\{[a-z]+\\}(\\{(\\{\\})?\\})+", "")); +	}
 	return t;
 }
 

commit 115d6ceeddf90a71fcb0556411b3c68aae63ddad
Author: Kornel Benko <kornel@lyx.org>
Date:   Sat May 14 08:56:00 2022 +0200

    FindAdv: Don't check on '\\\\\n' if ignoring format
    
    Since it can only happen if the lyx source contains two backslasches before
    the inserted newline. And here it is the wrong case.

diff --git a/src/lyxfind.cpp b/src/lyxfind.cpp
index 40d20c4..4f5d97d 100644
--- a/src/lyxfind.cpp
+++ b/src/lyxfind.cpp
@@ -4000,31 +4000,29 @@ static string convertLF2Space(docstring const &s, bool \
ignore_format)  t << lyx::to_utf8(s.substr(start, end + 1 - start));
 			break;
 		}
-		if ((pos > start+2) &&
-		     s[pos-1] == '\\' &&
-		     s[pos-2] == '\\') {
-			if (s[pos-1] == '\\' && s[pos-2] == '\\') {
+		if (!ignore_format) {
+			if ((pos > start + 1) &&
+			     s[pos-1] == '\\' &&
+			     s[pos-2] == '\\') {
 				skip = 2;
-				if ((pos > start+3) &&
+				if ((pos > start + 2) &&
 				    (s[pos+1] == '~' || isSpace(s[pos+1]) ||
 				     s[pos-3] == '~' || isSpace(s[pos-3]))) {
 					// discard '\n'
 					dospace = false;
 				}
 			}
-			else if (s[pos-1] == '\\' && s[pos-2] == '\\')
-				skip = 2;
-		}
-		else if (!ignore_format && (pos > start) &&
-		     s[pos-1] == '%') {
-			skip = 1;
-			while ((pos > start+skip) && (s[pos-1-skip] == '%'))
-				skip++;
-			if ((pos > start+skip) &&
-			    (s[pos+1] == '~' || isSpace(s[pos+1]) ||
-			     s[pos-1-skip] == '~' || isSpace(s[pos-1-skip]))) {
-				// discard '%%%%%\n'
-				dospace = false;
+			else if ((pos > start) &&
+			     s[pos-1] == '%') {
+				skip = 1;
+				while ((pos > start+skip) && (s[pos-1-skip] == '%'))
+					skip++;
+				if ((pos > start+skip) &&
+				    (s[pos+1] == '~' || isSpace(s[pos+1]) ||
+				     s[pos-1-skip] == '~' || isSpace(s[pos-1-skip]))) {
+					// discard '%%%%%\n'
+					dospace = false;
+				}
 			}
 		}
 		else {

commit b0323628af817a08730be464b1fbe250b96b82e1
Author: Kornel Benko <kornel@lyx.org>
Date:   Fri May 13 12:00:47 2022 +0200

    FindAdv: Amend 6c735efb: Resolve some conflicts regex vs. math meaning of '$'

diff --git a/src/lyxfind.cpp b/src/lyxfind.cpp
index fddf398..40d20c4 100644
--- a/src/lyxfind.cpp
+++ b/src/lyxfind.cpp
@@ -892,6 +892,7 @@ string correctRegex(string t, bool withformat)
 		buildAccentsMap();
 
 	//LYXERR0("correctRegex input '" << t << "'");
+	int skip = 0;
 	for (sregex_iterator it(t.begin(), t.end(), wordre), end; it != end; ++it) {
 		sub = *it;
 		string replace;
@@ -908,6 +909,10 @@ string correctRegex(string t, bool withformat)
 						replace = "";
 						backslashed = true;
 					}
+					else if (withformat && next[0] == '$') {
+						replace = accents["lyxdollar"];
+						skip = 1;	// Skip following '$'
+					}
 				}
 			}
 			else if (sub.str(4) == "mathcircumflex")
@@ -960,7 +965,8 @@ string correctRegex(string t, bool withformat)
 		if (lastpos < (size_t) sub.position(2))
 			s += std::regex_replace(t.substr(lastpos, sub.position(2) - lastpos), \
protectedSpace, R"( )");  s += replace;
-		lastpos = sub.position(2) + sub.length(2);
+		lastpos = sub.position(2) + sub.length(2) + skip;
+		skip = 0;
 	}
 	if (lastpos == 0)
 		s = std::regex_replace(t, protectedSpace, R"( )");
@@ -4069,14 +4075,14 @@ static string convertLF2Space(docstring const & s, bool \
ignore_format)  // Replace all other \n with spaces
 				t.replace(pos, 1, " ");
 			}
-		}
-		if (!ignore_format) {
-			size_t count = 0;
-			while ((pos > count + 1) && (t[pos - 1 -count] == '%')) {
-				count++;
-			}
-			if (count > 0) {
-				t.replace(pos - count, count, "");
+			if (!ignore_format) {
+				size_t count = 0;
+				while ((pos > count + 1) && (t[pos - 1 -count] == '%')) {
+					count++;
+				}
+				if (count > 0) {
+					t.replace(pos - count, count, "");
+				}
 			}
 		}
 	}

commit 6c735efb1fa34e167f0ae9f4a40f8127631200c3
Author: Kornel Benko <kornel@lyx.org>
Date:   Fri May 13 09:30:30 2022 +0200

    FindAdv: In format search could '$'-char be interpreted as math-start.
    
    To handle this case, we use '\lyxdollar' string instead.
    
    Also try to handle '\n' in the docstring directly instead in the
    string already converted to utf8.
    (The utf8-version is still there, but commented out)

diff --git a/src/Paragraph.cpp b/src/Paragraph.cpp
index 8a96e6d..73edb5d 100644
--- a/src/Paragraph.cpp
+++ b/src/Paragraph.cpp
@@ -1223,6 +1223,9 @@ void Paragraph::Private::latexSpecialChar(otexstream & os,
 			case '}':
 				os << "\\braceright ";
 				return;
+			case '$':
+				os << "\\lyxdollar ";
+				return;
 			case '~':
 				os << "\\lyxtilde ";
 				return;
diff --git a/src/lyxfind.cpp b/src/lyxfind.cpp
index 601f319..fddf398 100644
--- a/src/lyxfind.cpp
+++ b/src/lyxfind.cpp
@@ -1967,6 +1967,7 @@ static void buildAccentsMap()
 	accents["braceright"]    = getutf8(0xf0031);
 	accents["lyxtilde"]      = getutf8(0xf0032);
 	accents["sim"]           = getutf8(0xf0032);
+	accents["lyxdollar"]     = getutf8(0xf0033);
 	accents["backslash lyx"]           = getutf8(0xf0010);	// Used logos inserted with \
starting \backslash  accents["backslash LyX"]           = getutf8(0xf0010);
 	accents["backslash tex"]           = getutf8(0xf0011);
@@ -3969,8 +3970,74 @@ static bool simple_replace(string &t, string from, string to)
 }
 #endif
 
-string MatchStringAdv::normalize(docstring const & s, bool ignore_format) const
+#if 1
+static string convertLF2Space(docstring const &s, bool ignore_format)
 {
+	// Using original docstring to handle '\n'
+
+	if (s.size() == 0) return "";
+	stringstream t;
+	size_t pos;
+	size_t start = 0;
+	size_t end = s.size() - 1;
+	while (s[start] == '\n' && start <= end)
+		start++;
+	while (end >= start && s[end] == '\n')
+		end--;
+	if (start >= end + 1)
+		return "";
+	do {
+		bool dospace = true;
+		int skip = -1;
+		pos = s.find('\n', start);
+		if (pos >= end) {
+			t << lyx::to_utf8(s.substr(start, end + 1 - start));
+			break;
+		}
+		if ((pos > start+2) &&
+		     s[pos-1] == '\\' &&
+		     s[pos-2] == '\\') {
+			if (s[pos-1] == '\\' && s[pos-2] == '\\') {
+				skip = 2;
+				if ((pos > start+3) &&
+				    (s[pos+1] == '~' || isSpace(s[pos+1]) ||
+				     s[pos-3] == '~' || isSpace(s[pos-3]))) {
+					// discard '\n'
+					dospace = false;
+				}
+			}
+			else if (s[pos-1] == '\\' && s[pos-2] == '\\')
+				skip = 2;
+		}
+		else if (!ignore_format && (pos > start) &&
+		     s[pos-1] == '%') {
+			skip = 1;
+			while ((pos > start+skip) && (s[pos-1-skip] == '%'))
+				skip++;
+			if ((pos > start+skip) &&
+			    (s[pos+1] == '~' || isSpace(s[pos+1]) ||
+			     s[pos-1-skip] == '~' || isSpace(s[pos-1-skip]))) {
+				// discard '%%%%%\n'
+				dospace = false;
+			}
+		}
+		else {
+			dospace = true;
+			skip = 0;
+		}
+		t << lyx::to_utf8(s.substr(start, pos-skip-start));
+		if (dospace)
+			t << ' ';
+		start = pos+1;
+	} while (start <= end);
+	return(t.str());
+}
+
+#else
+static string convertLF2Space(docstring const & s, bool ignore_format)
+{
+	// Using utf8-converted string to handle '\n'
+
 	string t;
 	t = lyx::to_utf8(s);
 	// Remove \n at begin
@@ -4002,17 +4069,26 @@ string MatchStringAdv::normalize(docstring const & s, bool \
ignore_format) const  // Replace all other \n with spaces
 				t.replace(pos, 1, " ");
 			}
-			if (!ignore_format) {
-				size_t count = 0;
-				while ((pos > count + 1) && (t[pos - 1 -count] == '%')) {
-					count++;
-				}
-				if (count > 0) {
-					t.replace(pos - count, count, "");
-				}
+		}
+		if (!ignore_format) {
+			size_t count = 0;
+			while ((pos > count + 1) && (t[pos - 1 -count] == '%')) {
+				count++;
+			}
+			if (count > 0) {
+				t.replace(pos - count, count, "");
 			}
 		}
 	}
+	return(t);
+
+}
+#endif
+
+string MatchStringAdv::normalize(docstring const & s, bool ignore_format) const
+{
+	string t = convertLF2Space(s, ignore_format);
+
 	// Remove stale empty \emph{}, \textbf{} and similar blocks from latexify
 	// Kornel: Added textsl, textsf, textit, texttt and noun
 	// + allow to seach for colored text too
@@ -4026,7 +4102,6 @@ string MatchStringAdv::normalize(docstring const & s, bool \
ignore_format) const  return t;
 }
 
-
 docstring stringifyFromCursor(DocIterator const & cur, int len)
 {
 	LYXERR(Debug::FINDVERBOSE, "Stringifying with len=" << len << " from cursor at pos: \
" << cur);

commit a8c6ca621c5fa262bda70849b4812ebe0b6b1eec
Author: jpc <jpc@lyx.org>
Date:   Thu May 12 14:44:16 2022 +0200

                      Update fr.po

diff --git a/po/fr.gmo b/po/fr.gmo
index 8315283..3b8c00b 100644
Binary files a/po/fr.gmo and b/po/fr.gmo differ
diff --git a/po/fr.po b/po/fr.po
index a9e9403..bb215ca 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -362,8 +362,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: LyX 2.4\n"
 "Report-Msgid-Bugs-To: lyx-devel@lists.lyx.org\n"
-"POT-Creation-Date: 2022-05-10 14:08+0200\n"
-"PO-Revision-Date: 2022-05-10 14:09+0200\n"
+"POT-Creation-Date: 2022-05-12 14:41+0200\n"
+"PO-Revision-Date: 2022-05-12 14:43+0200\n"
 "Last-Translator: Jean-Pierre Chrétien <jeanpierre.chretien@free.fr>\n"
 "Language-Team: lyxfr\n"
 "Language: fr\n"
@@ -4552,59 +4552,65 @@ msgstr ""
 "Définir un patron de recherche (voir le Manuel de l'utilisateur pour la "
 "syntaxe)"
 
-#: src/frontends/qt/ui/PrefEditUi.ui:167 src/LyXRC.cpp:3175
+#: src/frontends/qt/ui/PrefEditUi.ui:167
+msgid "Cursor width (&pixels):"
+msgstr "Largeur du curseur (&pixels) :"
+
+#: src/frontends/qt/ui/PrefEditUi.ui:177
 msgid ""
-"Configure the width of the text cursor. Automatic zoom-controlled cursor "
-"width used when set to 0."
+"Configure the width of the text cursor.  \"Auto\" means that zoom-controlled "
+"width is used."
 msgstr ""
-"Configurer le largeur du curseur de texte. Si la valeur vaut 0, une largeur "
-"de curseur avec zoom automatique est utilisée."
+"Configurer le largeur du curseur de texte. Si la valeur vaut   Auto  , le "
+"zoom automatique fixe la largeur du curseur. "
 
-#: src/frontends/qt/ui/PrefEditUi.ui:170
-msgid "Cursor width (&pixels):"
-msgstr "Largeur du curseur (&pixels) :"
+#: src/frontends/qt/ui/PrefEditUi.ui:180
+#: lib/citeengines/biblatex-natbib.citeengine:148
+#: lib/citeengines/biblatex.citeengine:138
+msgid "Auto"
+msgstr "Auto"
 
-#: src/frontends/qt/ui/PrefEditUi.ui:198
+#: src/frontends/qt/ui/PrefEditUi.ui:201
 msgid "Skip trailing non-word characters"
 msgstr "Sauter les caractères finaux non alphanumériques"
 
-#: src/frontends/qt/ui/PrefEditUi.ui:201
+#: src/frontends/qt/ui/PrefEditUi.ui:204
 msgid "Use M&ac-style cursor movement"
 msgstr "Utiliser les déplacements de curseur   la M&ac"
 
-#: src/frontends/qt/ui/PrefEditUi.ui:208
+#: src/frontends/qt/ui/PrefEditUi.ui:211
 msgid "&Group environments by their category"
 msgstr "Re&grouper les environnements par catégorie"
 
-#: src/frontends/qt/ui/PrefEditUi.ui:218
+#: src/frontends/qt/ui/PrefEditUi.ui:221
 msgid "Fullscreen"
 msgstr "Plein écran"
 
-#: src/frontends/qt/ui/PrefEditUi.ui:230
+#: src/frontends/qt/ui/PrefEditUi.ui:233
 msgid "Hide &menubar"
 msgstr "Cacher la barre des &menus"
 
-#: src/frontends/qt/ui/PrefEditUi.ui:237
+#: src/frontends/qt/ui/PrefEditUi.ui:240
 msgid "Hide scr&ollbar"
 msgstr "Cacher l'&ascenseur"
 
-#: src/frontends/qt/ui/PrefEditUi.ui:260
+#: src/frontends/qt/ui/PrefEditUi.ui:263
 msgid "Hide sta&tusbar"
 msgstr "Cacher la barre d'&état"
 
-#: src/frontends/qt/ui/PrefEditUi.ui:267
+#: src/frontends/qt/ui/PrefEditUi.ui:270
 msgid "H&ide tabbar"
 msgstr "Cacher la barre des &onglets"
 
-#: src/frontends/qt/ui/PrefEditUi.ui:305
+#: src/frontends/qt/ui/PrefEditUi.ui:308
 msgid "&Limit text width"
 msgstr "&Limitation de la largeur du texte"
 
-#: src/frontends/qt/ui/PrefEditUi.ui:328
+#: src/frontends/qt/ui/PrefEditUi.ui:331
 msgid "Screen used (pi&xels):"
 msgstr "Écran &utilisé (pixels) :"
 
-#: src/frontends/qt/ui/PrefEditUi.ui:375
+#: src/frontends/qt/ui/PrefEditUi.ui:378
 msgid "&Hide toolbars"
 msgstr "Cacher les palettes d'&outils"
 
@@ -6728,11 +6734,6 @@ msgstr "Entrée bibliographique complète."
 msgid "Autocite"
 msgstr "Autocite"
 
-#: lib/citeengines/biblatex-natbib.citeengine:148
-#: lib/citeengines/biblatex.citeengine:138
-msgid "Auto"
-msgstr "Auto"
-
 #: lib/citeengines/biblatex-natbib.citeengine:150
 #: lib/citeengines/biblatex.citeengine:142
 msgid "F&orce full title[[Possible substitute to All aut&hors]]"
@@ -30296,6 +30297,14 @@ msgstr ""
 "déplacez avec la barre de défilement. Cochez si vous préférez avoir toujours "
 "le curseur   l'écran."
 
+#: src/LyXRC.cpp:3175
+msgid ""
+"Configure the width of the text cursor. Automatic zoom-controlled cursor "
+"width used when set to 0."
+msgstr ""
+"Configurer le largeur du curseur de texte. Si la valeur vaut 0, une largeur "
+"de curseur avec zoom automatique est utilisée."
+
 #: src/LyXRC.cpp:3179
 msgid ""
 "LyX normally doesn't allow the user to scroll further than the bottom of the "
@@ -37458,28 +37467,28 @@ msgstr "%1$d chaînes remplacées dans le sélection."
 msgid "%1$d strings have been replaced."
 msgstr "%1$d chaînes remplacées."
 
-#: src/lyxfind.cpp:4745
+#: src/lyxfind.cpp:4769
 msgid "One match has been replaced."
 msgstr "Une correspondance a été remplacée."
 
-#: src/lyxfind.cpp:4748
+#: src/lyxfind.cpp:4772
 msgid "Two matches have been replaced."
 msgstr "Deux correspondances ont été remplacées."
 
-#: src/lyxfind.cpp:4751
+#: src/lyxfind.cpp:4775
 #, c-format
 msgid "%1$d matches have been replaced."
 msgstr "%1$d correspondances ont été remplacées."
 
-#: src/lyxfind.cpp:4757
+#: src/lyxfind.cpp:4781
 msgid "Match not found."
 msgstr "Chaîne de caractères introuvable."
 
-#: src/lyxfind.cpp:4763
+#: src/lyxfind.cpp:4787
 msgid "Match has been replaced."
 msgstr "Chaîne de caractères remplacée."
 
-#: src/lyxfind.cpp:4765
+#: src/lyxfind.cpp:4789
 msgid "Match found."
 msgstr "Chaîne de caractères reconnue."
 

commit 895aa9cd0f98f703b0563f65fc3c8f079307536e
Author: Kornel Benko <kornel@lyx.org>
Date:   Thu May 12 13:22:21 2022 +0200

    FindAdv: Remove invalid closings
    
    If the searched area contains deleted parts, there may be more closing
    as opening parentheses in latex output. We have to remove them before
    further processing.

diff --git a/src/lyxfind.cpp b/src/lyxfind.cpp
index 8c609a7..601f319 100644
--- a/src/lyxfind.cpp
+++ b/src/lyxfind.cpp
@@ -1435,6 +1435,7 @@ public:
 	void removeAccents();
 	void setForDefaultLang(KeyInfo const & defLang) const;
 	int findclosing(int start, int end, char up, char down, int repeat);
+	void removeInvalidClosings(void);
 	void handleParentheses(int lastpos, bool closingAllowed);
 	bool hasTitle;
 	// Number of disabled language specs up
@@ -2241,6 +2242,27 @@ int Intervall::findclosing(int start, int end, char up = '{', \
char down = '}', i  return end;
 }
 
+void Intervall::removeInvalidClosings(void)
+{
+	// this can happen, if there are deleted parts
+	int skip = 0;
+	int depth = 0;
+	for (unsigned i = 0; i < par.size(); i += 1 + skip) {
+		char c = par[i];
+		skip = 0;
+		if (c == '\\') skip = 1;
+		else if (c == '{')
+			depth++;
+		else if (c == '}') {
+			if (depth == 0) {
+				addIntervall(i, i+1);
+				LYXERR(Debug::FINDVERBOSE, "removed invalid closing '}' at " << i);
+			}
+			else
+				--depth;
+		}
+	}
+}
 class MathInfo {
 	class MathEntry {
 	public:
@@ -2328,6 +2350,7 @@ void LatexInfo::buildEntries(bool isPatternString)
 	static bool removeMathHull = false;
 
 	interval_.removeAccents();
+	interval_.removeInvalidClosings();
 
 	for (sregex_iterator itmath(interval_.par.begin(), interval_.par.end(), rmath), \
end; itmath != end; ++itmath) {  submath = *itmath;

commit 4b41f54575ed5e7408e74a36f8a9f093272b9e42
Author: Kornel Benko <kornel@lyx.org>
Date:   Thu May 12 13:20:24 2022 +0200

    FindAdv: Use unicode for space where possible
    
    Search for different space-types should be done with
    regular expression '\s'

diff --git a/src/insets/InsetSpace.cpp b/src/insets/InsetSpace.cpp
index 28a5978..c8d304e 100644
--- a/src/insets/InsetSpace.cpp
+++ b/src/insets/InsetSpace.cpp
@@ -585,25 +585,30 @@ void InsetSpace::latex(otexstream & os, OutputParams const & \
runparams) const  os << (runparams.free_spacing ? " " : "\\ ");
 		break;
 	case InsetSpaceParams::PROTECTED:
-		if (runparams.local_font &&
+		if (runparams.find_effective())
+			os.put(0xa0);
+		else if (runparams.local_font &&
 		    runparams.local_font->language()->lang() == "polutonikogreek")
 			// in babel's polutonikogreek, ~ is active
-			os << (runparams.free_spacing && !runparams.find_effective() ? " " : \
"\\nobreakspace{}"); +			os << (runparams.free_spacing ? " " : "\\nobreakspace{}");
 		else
-			os << (runparams.free_spacing && !runparams.find_effective() ? ' ' : '~');
+			os << (runparams.free_spacing ? ' ' : '~');
 		break;
 	case InsetSpaceParams::VISIBLE:
-		os << (runparams.free_spacing && !runparams.find_effective() ? " " : \
"\\textvisiblespace{}"); +		if (runparams.find_effective())
+			os.put(0x2423);
+		else
+			os << (runparams.free_spacing ? " " : "\\textvisiblespace{}");
 		break;
 	case InsetSpaceParams::THIN:
 		if (runparams.find_effective())
-			os << "\\thinspace{}";
+			os.put(0x2009);
 		else
 			os << (runparams.free_spacing ? " " : "\\,");
 		break;
 	case InsetSpaceParams::MEDIUM:
 		if (runparams.find_effective())
-			os << "\\medspace{}";
+			os.put(0x2005);
 		else if (params_.math)
 			os << (runparams.free_spacing ? " " : "\\:");
 		else
@@ -611,23 +616,37 @@ void InsetSpace::latex(otexstream & os, OutputParams const & \
runparams) const  break;
 	case InsetSpaceParams::THICK:
 		if (runparams.find_effective())
-			os << "\\thickspace{}";
+			os.put(0x2004);
 		else if (params_.math)
 			os << (runparams.free_spacing ? " " : "\\;");
 		else
 			os << (runparams.free_spacing ? " " : "\\thickspace{}");
 		break;
 	case InsetSpaceParams::QUAD:
-		os << (runparams.free_spacing && runparams.find_effective() ? " " : "\\quad{}");
+		if (runparams.find_effective())
+			os.put(0x2003);
+		else
+			os << (runparams.free_spacing ? " " : "\\quad{}");
 		break;
 	case InsetSpaceParams::QQUAD:
-		os << (runparams.free_spacing && runparams.find_effective() ? " " : "\\qquad{}");
+		if (runparams.find_effective()) {
+			os.put(0x2003);
+			os.put(0x2003);
+		}
+		else
+			os << (runparams.free_spacing ? " " : "\\qquad{}");
 		break;
 	case InsetSpaceParams::ENSPACE:
-		os << (runparams.free_spacing && runparams.find_effective() ? " " : \
"\\enspace{}"); +		if (runparams.find_effective())
+			os.put(0x2002);
+		else
+			os << (runparams.free_spacing ? " " : "\\enspace{}");
 		break;
 	case InsetSpaceParams::ENSKIP:
-		os << (runparams.free_spacing && runparams.find_effective() ? " " : "\\enskip{}");
+		if (runparams.find_effective())
+			os.put(0x2002);
+		else
+			os << (runparams.free_spacing ? " " : "\\enskip{}");
 		break;
 	case InsetSpaceParams::NEGTHIN:
 		os << (runparams.free_spacing && runparams.find_effective() ? " " : \
"\\negthinspace{}"); @@ -663,13 +682,17 @@ void InsetSpace::latex(otexstream & os, \
OutputParams const & runparams) const  os << (runparams.free_spacing && \
runparams.find_effective() ? " " : "\\downbracefill{}");  break;
 	case InsetSpaceParams::CUSTOM:
-		if (runparams.free_spacing)
+		if (runparams.find_effective())
+			os.put(0x00a0);
+		else if (runparams.free_spacing)
 			os << " ";
 		else
 			os << "\\hspace{" << from_ascii(params_.length.asLatexString()) << "}";
 		break;
 	case InsetSpaceParams::CUSTOM_PROTECTED:
-		if (runparams.free_spacing)
+		if (runparams.find_effective())
+			os.put(0x00a0);
+		else if (runparams.free_spacing)
 			os << " ";
 		else
 			os << "\\hspace*{" << from_ascii(params_.length.asLatexString()) << "}";
@@ -679,7 +702,7 @@ void InsetSpace::latex(otexstream & os, OutputParams const & \
runparams) const  
 
 int InsetSpace::plaintext(odocstringstream & os,
-        OutputParams const &runparams, size_t) const
+        OutputParams const &, size_t) const
 {
 	switch (params_.kind) {
 	case InsetSpaceParams::HFILL:
@@ -737,10 +760,7 @@ int InsetSpace::plaintext(odocstringstream & os,
 		return 1;
 	case InsetSpaceParams::PROTECTED:
 	case InsetSpaceParams::CUSTOM_PROTECTED:
-		if (runparams.find_effective())
-			os.put(' ');
-		else
-			os.put(0x00a0);
+		os.put(0x00a0);
 		return 1;
 	case InsetSpaceParams::NEGTHIN:
 	case InsetSpaceParams::NEGMEDIUM:

commit 7838802fdb2acb72b9119a5bc14c52885d83fa59
Author: Kornel Benko <kornel@lyx.org>
Date:   Thu May 12 13:20:10 2022 +0200

    Update sk.po

diff --git a/po/sk.po b/po/sk.po
index f4eff67..c62def9 100644
--- a/po/sk.po
+++ b/po/sk.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: LyX-2.4\n"
 "Report-Msgid-Bugs-To: lyx-devel@lists.lyx.org\n"
-"POT-Creation-Date: 2022-05-10 13:53+0200\n"
-"PO-Revision-Date: 2022-05-10 12:30+0000\n"
+"POT-Creation-Date: 2022-05-11 18:56+0200\n"
+"PO-Revision-Date: 2022-05-11 16:59+0000\n"
 "Last-Translator: Kornel Benko <kornel@lyx.org>\n"
 "Language-Team: Slovak <kornel@lyx.org>\n"
 "Language: sk\n"
@@ -4124,6 +4124,14 @@ msgstr ""
 msgid "Cursor width (&pixels):"
 msgstr " írka kurzoru (pi&xel):"
 
+#: src/frontends/qt/ui/PrefEditUi.ui:177
+msgid ""
+"Configure the width of the text cursor.  \"Auto\" means that zoom-controlled "
+"width is used."
+msgstr ""
+"Konfigurovanie šírky textového kurzoru. \"Auto\" znamená že šírka je "
+"kontrolovaná lupou."
+
 #: src/frontends/qt/ui/PrefEditUi.ui:198
 msgid "Skip trailing non-word characters"
 msgstr "Vynechať bočné písmená nepatriace k slovu"

commit 4dd1fbbce05ac1498cc3ada712e10f0a0b69cfac
Author: Daniel Ramoeller <d.lyx@web.de>
Date:   Sun Mar 27 11:40:54 2022 +0200

    Use "Auto" value on cursor width spinbox
    
    Fix for bug #12515.

diff --git a/src/frontends/qt/ui/PrefEditUi.ui b/src/frontends/qt/ui/PrefEditUi.ui
index 4c3f784..bcedaf8 100644
--- a/src/frontends/qt/ui/PrefEditUi.ui
+++ b/src/frontends/qt/ui/PrefEditUi.ui
@@ -163,9 +163,6 @@
        <layout class="QHBoxLayout" name="horizontalLayout">
         <item>
          <widget class="QLabel" name="label_3">
-          <property name="toolTip">
-           <string>Configure the width of the text cursor. Automatic zoom-controlled \
                cursor width used when set to 0.</string>
-          </property>
           <property name="text">
            <string>Cursor width (&amp;pixels):</string>
           </property>
@@ -176,6 +173,12 @@
         </item>
         <item>
          <widget class="QSpinBox" name="cursorWidthSB">
+          <property name="toolTip">
+           <string>Configure the width of the text cursor.  &quot;Auto&quot; means \
that zoom-controlled width is used.</string> +          </property>
+          <property name="specialValueText">
+           <string>Auto</string>
+          </property>
           <property name="minimum">
            <number>0</number>
           </property>

commit 8e256fbf0fb1fdffafe5bb35e18a0746d3ce8d1f
Author: Kornel Benko <kornel@lyx.org>
Date:   Wed May 11 17:42:50 2022 +0200

    FindAdv: Do not insert space for '\n' if there already are spaces around

diff --git a/src/lyxfind.cpp b/src/lyxfind.cpp
index 7048fc2..8c609a7 100644
--- a/src/lyxfind.cpp
+++ b/src/lyxfind.cpp
@@ -3962,10 +3962,11 @@ string MatchStringAdv::normalize(docstring const & s, bool \
ignore_format) const  while ((pos = t.find("\n")) != string::npos) {
 		if (pos > 1 && t[pos-1] == '\\' && t[pos-2] == '\\' ) {
 			// Handle '\\\n'
-			if (isAlnumASCII(t[pos+1])) {
+			if (isPrintableNonspace(t[pos+1]) && ((pos < 3) || \
isPrintableNonspace(t[pos-3]))) {  t.replace(pos-2, 3, " ");
 			}
 			else {
+				// Already a space there
 				t.replace(pos-2, 3, "");
 			}
 		}

commit 10077521066919e8c7474b0f3d7bd2a2dfc4ade0
Author: Kornel Benko <kornel@lyx.org>
Date:   Tue May 10 15:03:11 2022 +0200

    FindAdv tests: update to new shortcuts

diff --git a/development/autotests/findadv-05-in.txt \
b/development/autotests/findadv-05-in.txt index c2a8f25..b8c2d47 100644
--- a/development/autotests/findadv-05-in.txt
+++ b/development/autotests/findadv-05-in.txt
@@ -9,7 +9,7 @@ KK: foo \Cefoo foo\Ce foo\C\[Home]
 KK: \Cs
 KK: \CF
 # Uncheck ignore format
-KK: \At\Ai\Ah
+KK: \At\Ar\Ak\Ah
 KK: \CF
 # Select emphasised
 KK: \Ce
diff --git a/development/autotests/findadv-06-in.txt \
b/development/autotests/findadv-06-in.txt index c75050f..5df35bd 100644
--- a/development/autotests/findadv-06-in.txt
+++ b/development/autotests/findadv-06-in.txt
@@ -20,7 +20,7 @@ KK: \C\[F29]foo\C\[Home]
 KK: \Axbuffer-write\[Return]
 KK: \Axdialog-show findreplaceadv\[Return]
 # Uncheck ignore format
-KK: \At\Ai\Ah
+KK: \At\Ar\Ak\Ah
 KK: \CF
 #KK: \Aj
 KK: \C\[F22]foo\[Return]
@@ -32,7 +32,7 @@ KK: \[Escape]\C\[Home]
 KK: \Axdialog-show findreplaceadv\[Return]
 KK: \[Delete]
 # Uncheck ignore format
-#KK: \At\Ai\Ah
+#KK: \At\Ar\Ak\Ah
 #KK: \CF
 KK: \C\[F29]
 KK: foo\[Return]\[Return]\[Return]
diff --git a/development/autotests/findadv-07-in.txt \
b/development/autotests/findadv-07-in.txt index 844145a..28f4b32 100644
--- a/development/autotests/findadv-07-in.txt
+++ b/development/autotests/findadv-07-in.txt
@@ -27,7 +27,7 @@ KK: foo bar\C\[Home]
 KK: \Axbuffer-write\[Return]
 KK: \Axdialog-show findreplaceadv\[Return]
 # Uncheck ignore format
-KK: \At\Ai\Ah
+KK: \At\Ar\Ak\Ah
 KK: \CF
 KK: \C\[F30]
 Sleep 1
@@ -40,7 +40,7 @@ KK: \[Escape]\C\[Home]
 KK: \CF
 KK: \[Delete]
 # Uncheck ignore format
-#KK: \At\Ai\Ah
+#KK: \At\Ar\Ak\Ah
 #KK: \CF
 KK: \C\[F30]
 Sleep 1
diff --git a/development/autotests/findadv-09-in.txt \
b/development/autotests/findadv-09-in.txt index b5a9b17..ce8a106 100644
--- a/development/autotests/findadv-09-in.txt
+++ b/development/autotests/findadv-09-in.txt
@@ -12,7 +12,7 @@ KK: \C\[F30]
 KK: one\[Return]two\[Return]three\C\[Home]\Cs
 KK: \CF
 # Uncheck ignore format
-KK: \At\Ai\Ah
+KK: \At\Ar\Ak\Ah
 KK: \CF
 KK: \C\[F30]
 KK: \C\[F20][a-z]* \[Return]
@@ -24,7 +24,7 @@ KK: \[Escape]\C\[Home]
 KK: \CF
 KK: \[Delete]
 # Uncheck ignore format
-#KK: \At\Ai\Ah
+#KK: \At\Ar\Ak\Ah
 #KK: \CF
 KK: \C\[F30]
 KK: \C\[F20][a-z]* \[Return]\[Return]
diff --git a/development/autotests/findadv-10-in.txt \
b/development/autotests/findadv-10-in.txt index 8ff7df9..1c5bfca 100644
--- a/development/autotests/findadv-10-in.txt
+++ b/development/autotests/findadv-10-in.txt
@@ -10,7 +10,7 @@ KK: a WYSIWYG LaTeX editor.\C\[Home]
 KK: \Cs
 KK: \CF
 # Uncheck ignore format (depends on IT language)
-KK: \At\Ai\Ah
+KK: \At\Ar\Ak\Ah
 KK: \CF
 KK: LyX\[Return]
 CP: Putting selection at .*idx: 0 par: 0 pos: 8\n with len: 3
@@ -21,7 +21,7 @@ KK: \[Escape]\C\[Home]
 KK: \CF
 KK: \[Delete]
 # Uncheck ignore format
-#KK: \At\Ai\Ah
+#KK: \At\Ar\Ak\Ah
 #KK: \CF
 KK: LaTeX\[Return]
 CP: Putting selection at .*idx: 0 par: 1 pos: 10\n with len: 5
diff --git a/development/autotests/findadv-14-in.txt \
b/development/autotests/findadv-14-in.txt index c35371d..641fe5c 100644
--- a/development/autotests/findadv-14-in.txt
+++ b/development/autotests/findadv-14-in.txt
@@ -11,7 +11,7 @@ KK: x^2 +x^2\C\[Home]
 KK: \Cs
 KK: \CF
 # Uncheck ignore format
-KK: \At\Ai\Ah
+KK: \At\Ar\Ak\Ah
 KK: \CF
 KK: \Amd
 KK: x^2\[Return]
@@ -33,7 +33,7 @@ KK: \[Escape]\C\[Home]
 CP: Key (queried) [action=buffer-begin][Ctrl+Home]
 KK: \CF
 KK: \[Delete]
-KK: \At\Ai\Ah
+KK: \At\Ar\Ak\Ah
 KK: \CF
 KK: \Amd
 KK: x^2\[Return]
diff --git a/development/autotests/findadv-15-in.txt \
b/development/autotests/findadv-15-in.txt index 7a4899d..9009489 100644
--- a/development/autotests/findadv-15-in.txt
+++ b/development/autotests/findadv-15-in.txt
@@ -12,7 +12,7 @@ KK: x^2 +x^2\C\[Home]
 KK: \Cs
 KK: \CF
 # Uncheck ignore format
-KK: \At\Ai\Ah
+KK: \At\Ar\Ak\Ah
 KK: \CF
 KK: \C\[F22]
 KK: x^2\[Return]
@@ -35,7 +35,7 @@ CP: Key (queried) [action=buffer-begin][Ctrl+Home]
 KK: \CF
 KK: \[Delete]
 # Check ignore format (was unchecked)
-KK: \At\Ai\Ah
+KK: \At\Ar\Ak\Ah
 KK: \CF
 KK: \C\[F22]
 KK: x^2\[Return]
diff --git a/development/autotests/findadv-16-in.txt \
b/development/autotests/findadv-16-in.txt index 00b7f6e..60f3ad1 100644
--- a/development/autotests/findadv-16-in.txt
+++ b/development/autotests/findadv-16-in.txt
@@ -13,7 +13,7 @@ KK: x^2 +x^2\C\[Home]
 KK: \Cs
 KK: \CF
 # Uncheck ignore format
-KK: \At\Ai\Ah
+KK: \At\Ar\Ak\Ah
 KK: \CF
 KK: \CM\C\[F24]
 KK: x^2\[Return]
diff --git a/development/autotests/findadv-17-in.txt \
b/development/autotests/findadv-17-in.txt index 57c222d..4918c90 100644
--- a/development/autotests/findadv-17-in.txt
+++ b/development/autotests/findadv-17-in.txt
@@ -17,7 +17,7 @@ CP: Key (queried) [action=buffer-begin][Ctrl+Home]
 KK: \CF
 KK: \[Delete]
 # Uncheck ignore format
-KK: \At\Ai\Ah
+KK: \At\Ar\Ak\Ah
 KK: \CF
 KK: \Cm\\beta\\alpha \[Return]
 CP: Putting selection at .*idx: 0 par: 0 pos: 0\n.*idx: 0 par: 0 pos: 1\n with len: \
                2
diff --git a/development/autotests/findadv-21-in.txt \
b/development/autotests/findadv-21-in.txt index 1c851e8..6309245 100644
--- a/development/autotests/findadv-21-in.txt
+++ b/development/autotests/findadv-21-in.txt
@@ -23,7 +23,7 @@ KK: op2 nine\C\[Home]
 KK: \Cs
 KK: \CF
 # Uncheck ignore format
-KK: \At\Ai\Ah
+KK: \At\Ar\Ak\Ah
 KK: \CF
 KK: \Aoe
 KK: \C\[F20][a-z]* \[Return]\[Return]
@@ -38,7 +38,7 @@ Cr: ^.*Putting
 
 KK: \CF\[Delete]
 # Uncheck ignore format
-#KK: \At\Ai\Ah
+#KK: \At\Ar\Ak\Ah
 #KK: \CF
 KK: \Aol
 KK: \C\[F20][a-z]2  \C\[F20][a-z]+
diff --git a/development/autotests/findadv-22-in.txt \
b/development/autotests/findadv-22-in.txt index bc2de11..ba6a4ad 100644
--- a/development/autotests/findadv-22-in.txt
+++ b/development/autotests/findadv-22-in.txt
@@ -5,7 +5,7 @@ PrepareShortcuts
 #
 Lang sk_SK.utf8
 CO: findadv-22.ctrl
-TestBegin test.lyx -dbg key,find >findadv-22.loga.txt 2>&1
+TestBegin test.lyx -dbg key,findverbose >findadv-22.loga.txt 2>&1
 CN: Part 1
 KK: \Cm
 KK: I_t\\wedge s
@@ -19,7 +19,7 @@ CP: Putting selection at .*idx: 0 par: 0 pos: 0\n.*idx: 0 par: 0 \
pos: 0\n.*idx:  CN: Part 2
 KK: \[Escape]\C\[Home]
 KK: \CF
-KK: \At\Ai\Ah
+KK: \At\Ar\Ak\Ah
 KK: \CF
 KK: \[Return]
 CP: Identified Features
diff --git a/development/autotests/findadv-combined-in.txt \
b/development/autotests/findadv-combined-in.txt index bbcb14d..6bbd853 100644
--- a/development/autotests/findadv-combined-in.txt
+++ b/development/autotests/findadv-combined-in.txt
@@ -93,7 +93,7 @@ CN: ..
 #
 KK: \CF
 # Uncheck ignore format
-KK: \At\Ai\Ah
+KK: \At\Ar\Ak\Ah
 Sleep 1
 KK: \[Escape]\C\[Home]
 Sleep 1
diff --git a/development/autotests/findadv-logo-in.txt \
b/development/autotests/findadv-logo-in.txt index b3a4a6c..d5f5021 100644
--- a/development/autotests/findadv-logo-in.txt
+++ b/development/autotests/findadv-logo-in.txt
@@ -9,7 +9,7 @@ KK: for a WYSIWYG LaTeX editor.\C\[Home]
 KK: \Cs
 KK: \CF
 # Uncheck ignore format (depends on IT language)
-KK: \At\Ai\Ah
+KK: \At\Ar\Ak\Ah
 KK: \CF
 KK: \Axspecialchar-insert lyx\[Return]\[Tab]
 KK: \Axspecialchar-insert latex\[Return]\Al\Ar\An
diff --git a/development/autotests/findadv-re-01-in.txt \
b/development/autotests/findadv-re-01-in.txt index 034e1a0..cb62b92 100644
--- a/development/autotests/findadv-re-01-in.txt
+++ b/development/autotests/findadv-re-01-in.txt
@@ -21,7 +21,7 @@ TestBegin test.lyx -dbg key,find >> findadv-re-01.loga.txt 2>&1
 CN: Part 2
 KK: \CF
 # Uncheck ignore format
-KK: \At\Ai\Ah
+KK: \At\Ar\Ak\Ah
 KK: \CF
 KK: \C\[F20]\\(\[Return]
 CP: Putting selection at .*idx: 0 par: 0 pos: 1\n with len: 1
@@ -44,7 +44,7 @@ TestBegin test.lyx -dbg key,find >> findadv-re-01.loga.txt 2>&1
 CN: Part 4
 KK: \CF
 # Uncheck ignore format
-KK: \At\Ai\Ah
+KK: \At\Ar\Ak\Ah
 KK: \CF
 KK: \C\[F20]\\[\[Return]
 CP: Putting selection at .*idx: 0 par: 0 pos: 3\n with len: 1
diff --git a/development/autotests/findadv-re-02-in.txt \
b/development/autotests/findadv-re-02-in.txt index 66ade28..2221a57 100644
--- a/development/autotests/findadv-re-02-in.txt
+++ b/development/autotests/findadv-re-02-in.txt
@@ -20,7 +20,7 @@ TestBegin test.lyx -dbg key,find >> findadv-re-02.loga.txt 2>&1
 CN: Part 2
 KK: \CF
 # Uncheck ignore format
-KK: \At\Ai\Ah
+KK: \At\Ar\Ak\Ah
 KK: \CF
 KK: \C\[F20]\\\\\[Return]
 CP: Putting selection at .*idx: 0 par: 0 pos: 0\n with len: 1
@@ -43,7 +43,7 @@ TestBegin test.lyx -dbg key,find >> findadv-re-02.loga.txt 2>&1
 CN: Part 4
 KK: \CF
 # Uncheck ignore format
-KK: \At\Ai\Ah
+KK: \At\Ar\Ak\Ah
 KK: \CF
 KK: \C\[F20]%\[Return]
 CP: Putting selection at .*idx: 0 par: 0 pos: 7\n with len: 1
@@ -66,7 +66,7 @@ TestBegin test.lyx -dbg key,find >> findadv-re-02.loga.txt 2>&1
 CN: Part 6
 KK: \CF
 # Uncheck ignore format
-KK: \At\Ai\Ah
+KK: \At\Ar\Ak\Ah
 KK: \CF
 KK: \C\[F20]\\^\[Return]
 CP: Putting selection at .*idx: 0 par: 0 pos: 8\n with len: 1
diff --git a/development/autotests/findadv-re-03-in.txt \
b/development/autotests/findadv-re-03-in.txt index 020f50a..dd99a5d 100644
--- a/development/autotests/findadv-re-03-in.txt
+++ b/development/autotests/findadv-re-03-in.txt
@@ -20,7 +20,7 @@ TestBegin test.lyx -dbg key,find >> findadv-re-03.loga.txt 2>&1
 CN: Part 2
 KK: \CF
 # Uncheck ignore format
-KK: \At\Ai\Ah
+KK: \At\Ar\Ak\Ah
 KK: \CF
 KK: \C\[F20]\\{\[Return]
 CP: Putting selection at .*idx: 0 par: 0 pos: 5\n with len: 1
@@ -43,7 +43,7 @@ TestBegin test.lyx -dbg key,find >> findadv-re-03.loga.txt 2>&1
 CN: Part 4
 KK: \CF
 # Uncheck ignore format
-KK: \At\Ai\Ah
+KK: \At\Ar\Ak\Ah
 KK: \CF
 KK: \C\[F20]\\}\[Return]
 CP: Putting selection at .*idx: 0 par: 0 pos: 6\n with len: 1
diff --git a/development/autotests/findadv-re-04-in.txt \
b/development/autotests/findadv-re-04-in.txt index ef7c08f..7868ebd 100644
--- a/development/autotests/findadv-re-04-in.txt
+++ b/development/autotests/findadv-re-04-in.txt
@@ -14,7 +14,7 @@ KK: \C\[Home]
 KK: \Cs
 KK: \CF
 # Uncheck ignore format (depends on IT language)
-KK: \At\Ai\Ah
+KK: \At\Ar\Ak\Ah
 KK: \CF
 KK: \Ce
 CN: Case insensitive, format not ignored .*
@@ -31,7 +31,7 @@ TestBegin test.lyx -dbg key,find >> findadv-re-04.loga.txt 2>&1
 CN: Case insensitive, format not ignored [a-z]+
 KK: \CF
 # Uncheck ignore format (depends on IT language)
-KK: \At\Ai\Ah
+KK: \At\Ar\Ak\Ah
 KK: \CF
 KK: \Ce
 KK: \C\[F20]\\b[a-z]+\\b\[Return]\[Return]\[Return]
@@ -49,7 +49,7 @@ TestBegin test.lyx -dbg key,find >> findadv-re-04.loga.txt 2>&1
 
 CN: Case sensitive, format not ignored [a-z]+
 KK: \CF
-KK: \At\Ai\Ah
+KK: \At\Ar\Ak\Ah
 KK: \CF
 KK: \Ce
 KK: \Az\[Tab]\[Tab]\C\[F20][a-z]+\[Return]\[Return]\[Return]\[Return]
@@ -71,7 +71,7 @@ TestBegin test.lyx -dbg key,find >> findadv-re-04.loga.txt 2>&1
 
 CN: Case sensitive, format not ignored [A-Z]+
 KK: \CF
-KK: \At\Ai\Ah
+KK: \At\Ar\Ak\Ah
 KK: \CF
 KK: \Ce
 KK: \Az\[Tab]\[Tab]\C\[F20][A-Z]+\[Return]\[Return]\[Return]
diff --git a/development/autotests/findadv-re-06-in.txt \
b/development/autotests/findadv-re-06-in.txt index 1050ef9..0b0084c 100644
--- a/development/autotests/findadv-re-06-in.txt
+++ b/development/autotests/findadv-re-06-in.txt
@@ -9,7 +9,7 @@ KD: 50
 KK: \Cm\\frac 1-x\[Down]1+x^2 \C\[Home]
 KK: \CF
 # Uncheck ignore format (depends on IT language)
-KK: \At\Ai\Ah
+KK: \At\Ar\Ak\Ah
 KK: \CF
 KK: \Cm\\frac \C\[F20].* \[Down]1+x^2 \[Return]
 CP: Putting selection at .*idx: 0 par: 0 pos: 0\n .*idx: 0 par: 0 pos: 0\n with len: \
1

commit 4345c6a96e7e65c231ce8248f0c454665cbf2069
Author: Kornel Benko <kornel@lyx.org>
Date:   Tue May 10 15:02:16 2022 +0200

    Update sk.po

diff --git a/po/sk.po b/po/sk.po
index a5c177d..f4eff67 100644
--- a/po/sk.po
+++ b/po/sk.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: LyX-2.4\n"
 "Report-Msgid-Bugs-To: lyx-devel@lists.lyx.org\n"
-"POT-Creation-Date: 2022-04-30 19:26+0200\n"
-"PO-Revision-Date: 2022-04-30 17:57+0000\n"
+"POT-Creation-Date: 2022-05-10 13:53+0200\n"
+"PO-Revision-Date: 2022-05-10 12:30+0000\n"
 "Last-Translator: Kornel Benko <kornel@lyx.org>\n"
 "Language-Team: Slovak <kornel@lyx.org>\n"
 "Language: sk\n"
@@ -1675,13 +1675,13 @@ msgstr "Vš&etky príručky"
 msgid "Restrict search to math environments only"
 msgstr "Obmedziť hľadanie na mat. prostredia"
 
-#: src/frontends/qt/ui/FindAndReplaceUi.ui:373
-msgid "Search on&ly in maths"
+#: src/frontends/qt/ui/FindAndReplaceUi.ui:383
+msgid "Search onl&y in maths"
 msgstr "Prehľadať len mat. vzork&y"
 
-#: src/frontends/qt/ui/FindAndReplaceUi.ui:399
+#: src/frontends/qt/ui/FindAndReplaceUi.ui:373
 msgid "E&xpand macros"
-msgstr "&Rozvinúť makrá"
+msgstr "Rozvinúť &makrá"
 
 #: src/frontends/qt/ui/FindAndReplaceUi.ui:406
 msgid ""
@@ -1710,8 +1710,8 @@ msgstr ""
 "zaškrtnutými vlastnosťami"
 
 #: src/frontends/qt/ui/FindAndReplaceUi.ui:428
-msgid "Ad&here to search string formatting of"
-msgstr "Dr&žať hľadaný reťazec s vlastnosťou pre"
+msgid "Adhe&re to search string formatting of"
+msgstr "D&ržať hľadaný reťazec s vlastnosťou pre"
 
 #: src/frontends/qt/ui/FindAndReplaceUi.ui:440
 msgid "Strike-through"
@@ -1722,8 +1722,8 @@ msgid "Emph/noun"
 msgstr "dôraz/meno"
 
 #: src/frontends/qt/ui/FindAndReplaceUi.ui:468
-msgid "Deselect all"
-msgstr "Vypnúť všetko"
+msgid "Dese&lect all"
+msgstr "Vypnú&ť všetko"
 
 #: src/frontends/qt/ui/FindAndReplaceUi.ui:489
 msgid "Sectioning markup"
@@ -1738,8 +1738,8 @@ msgid "Underlining"
 msgstr "podčiarknutie"
 
 #: src/frontends/qt/ui/FindAndReplaceUi.ui:517
-msgid "Select all"
-msgstr "Vybrať všetko"
+msgid "&Select all"
+msgstr "Vybrať všet&ko"
 
 #: src/frontends/qt/ui/FloatPlacementUi.ui:14
 #: src/frontends/qt/ui/OutputUi.ui:14 src/frontends/qt/ui/PDFSupportUi.ui:14

commit 37408895feaa930ae0f0bc2afd4b65bdcfbdfa4a
Author: jpc <jpc@lyx.org>
Date:   Tue May 10 14:38:56 2022 +0200

     Update fr.po

diff --git a/po/fr.gmo b/po/fr.gmo
index 41b0231..8315283 100644
Binary files a/po/fr.gmo and b/po/fr.gmo differ
diff --git a/po/fr.po b/po/fr.po
index 23464b5..a9e9403 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -362,8 +362,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: LyX 2.4\n"
 "Report-Msgid-Bugs-To: lyx-devel@lists.lyx.org\n"
-"POT-Creation-Date: 2022-05-01 18:14+0200\n"
-"PO-Revision-Date: 2022-05-02 11:14+0200\n"
+"POT-Creation-Date: 2022-05-10 14:08+0200\n"
+"PO-Revision-Date: 2022-05-10 14:09+0200\n"
 "Last-Translator: Jean-Pierre Chrétien <jeanpierre.chretien@free.fr>\n"
 "Language-Team: lyxfr\n"
 "Language: fr\n"
@@ -2066,7 +2066,7 @@ msgid "Restrict search to math environments only"
 msgstr "Restreindre la recherche aux seuls environnements mathématiques"
 
 #: src/frontends/qt/ui/FindAndReplaceUi.ui:383
-msgid "Search on&ly in maths"
+msgid "Search onl&y in maths"
 msgstr "Rechercher uniquement dans les formules mat&hématiques"
 
 #: src/frontends/qt/ui/FindAndReplaceUi.ui:390
@@ -2099,7 +2099,7 @@ msgstr ""
 "pour le rubriques cochées"
 
 #: src/frontends/qt/ui/FindAndReplaceUi.ui:428
-msgid "Ad&here to search string formatting of"
+msgid "Adhe&re to search string formatting of"
 msgstr "&Appliquer la mise en forme de la chaîne recherchée pour"
 
 #: src/frontends/qt/ui/FindAndReplaceUi.ui:440
@@ -2113,8 +2113,8 @@ msgid "Emph/noun"
 msgstr "En évidence/nom propre"
 
 #: src/frontends/qt/ui/FindAndReplaceUi.ui:468
-msgid "Deselect all"
-msgstr "Tout désélectionner"
+msgid "Dese&lect all"
+msgstr "Tout désé&lectionner"
 
 #: src/frontends/qt/ui/FindAndReplaceUi.ui:489
 msgid "Sectioning markup"
@@ -2129,8 +2129,8 @@ msgid "Underlining"
 msgstr "Souligné"
 
 #: src/frontends/qt/ui/FindAndReplaceUi.ui:517
-msgid "Select all"
-msgstr "Tout sélectionner"
+msgid "&Select all"
+msgstr "Tout &sélectionner"
 
 #: src/frontends/qt/ui/FloatPlacementUi.ui:14
 #: src/frontends/qt/ui/OutputUi.ui:14 src/frontends/qt/ui/PDFSupportUi.ui:14
@@ -28376,7 +28376,7 @@ msgid "greyedout inset text"
 msgstr "texte d'insert grisé"
 
 #: src/BufferParams.cpp:1718 src/BufferParams.cpp:1872
-#: src/BufferParams.cpp:2315 src/Encoding.cpp:264 src/Paragraph.cpp:3014
+#: src/BufferParams.cpp:2315 src/Encoding.cpp:264 src/Paragraph.cpp:3026
 #: src/frontends/qt/LaTeXHighlighter.cpp:143
 #: src/frontends/qt/LaTeXHighlighter.cpp:257
 #: src/insets/InsetCommandParams.cpp:508 src/insets/InsetCommandParams.cpp:516
@@ -28388,7 +28388,7 @@ msgid "LyX Warning: "
 msgstr "Avertissement LyX : "
 
 #: src/BufferParams.cpp:1719 src/BufferParams.cpp:1873
-#: src/BufferParams.cpp:2316 src/Encoding.cpp:265 src/Paragraph.cpp:3015
+#: src/BufferParams.cpp:2316 src/Encoding.cpp:265 src/Paragraph.cpp:3027
 #: src/insets/InsetCommandParams.cpp:509 src/insets/InsetCommandParams.cpp:517
 #: src/insets/InsetGraphics.cpp:901 src/insets/InsetGraphics.cpp:909
 #: src/insets/InsetListings.cpp:300 src/insets/InsetListings.cpp:308
@@ -30786,15 +30786,15 @@ msgstr "Revenir   la version enregistrée du document ?"
 msgid "&Revert"
 msgstr "&Revenir   la Sauvegarde"
 
-#: src/Paragraph.cpp:2152
+#: src/Paragraph.cpp:2164
 msgid "Senseless with this layout!"
 msgstr "Inapproprié avec ce style !"
 
-#: src/Paragraph.cpp:2206
+#: src/Paragraph.cpp:2218
 msgid "Alignment not permitted"
 msgstr "Alignement non autorisé"
 
-#: src/Paragraph.cpp:2207
+#: src/Paragraph.cpp:2219
 msgid ""
 "The new layout does not permit the alignment previously used.\n"
 "Setting to default."
@@ -30899,7 +30899,7 @@ msgstr ", Char: 0x"
 msgid ", Boundary: "
 msgstr ", Frontière : "
 
-#: src/Text2.cpp:406
+#: src/Text2.cpp:407
 msgid "No font change defined."
 msgstr "Aucune modification de police définie."
 
@@ -30923,36 +30923,36 @@ msgstr "Mode   expression régulière  "
 msgid "Layout "
 msgstr "Environnement "
 
-#: src/Text3.cpp:1619 src/Text3.cpp:2193
+#: src/Text3.cpp:1619 src/Text3.cpp:2203
 msgid " not known"
 msgstr " inconnu"
 
-#: src/Text3.cpp:2192
+#: src/Text3.cpp:2202
 msgid "Table Style "
 msgstr "Style de tableau "
 
-#: src/Text3.cpp:2385 src/frontends/qt/GuiApplication.cpp:1887
+#: src/Text3.cpp:2395 src/frontends/qt/GuiApplication.cpp:1887
 msgid "Missing argument"
 msgstr "Paramètre manquant"
 
-#: src/Text3.cpp:2550
+#: src/Text3.cpp:2560
 msgid "Invalid argument (number exceeds stack size)!"
 msgstr "Argument invalide (le nombre est supérieur   la taille de la pile) !"
 
-#: src/Text3.cpp:2554
+#: src/Text3.cpp:2564
 msgid "Invalid argument (must be a non-negative number)!"
 msgstr "Argument invalide (nombre non négatif obligatoire)"
 
-#: src/Text3.cpp:2559 src/Text3.cpp:2573
+#: src/Text3.cpp:2569 src/Text3.cpp:2583
 #, c-format
 msgid "Text properties applied: %1$s"
 msgstr "Propriétés du texte appliquées : %1$s"
 
-#: src/Text3.cpp:2732
+#: src/Text3.cpp:2742
 msgid "Path to thesaurus directory not set!"
 msgstr "Chemin d'accès au répertoire du thésaurus non précisé !"
 
-#: src/Text3.cpp:2733
+#: src/Text3.cpp:2743
 msgid ""
 "The path to the thesaurus directory has not been specified.\n"
 "The thesaurus is not functional.\n"
@@ -30964,7 +30964,7 @@ msgstr ""
 "Se référer au Guide de l'utilisateur, section 6.15.1, pour\n"
 "les instructions de réglage."
 
-#: src/Text3.cpp:2859 src/Text3.cpp:2870
+#: src/Text3.cpp:2869 src/Text3.cpp:2880
 msgid "Paragraph layout set"
 msgstr "Style du paragraphe redéfini"
 
@@ -37458,28 +37458,28 @@ msgstr "%1$d chaînes remplacées dans le sélection."
 msgid "%1$d strings have been replaced."
 msgstr "%1$d chaînes remplacées."
 
-#: src/lyxfind.cpp:4683
+#: src/lyxfind.cpp:4745
 msgid "One match has been replaced."
 msgstr "Une correspondance a été remplacée."
 
-#: src/lyxfind.cpp:4686
+#: src/lyxfind.cpp:4748
 msgid "Two matches have been replaced."
 msgstr "Deux correspondances ont été remplacées."
 
-#: src/lyxfind.cpp:4689
+#: src/lyxfind.cpp:4751
 #, c-format
 msgid "%1$d matches have been replaced."
 msgstr "%1$d correspondances ont été remplacées."
 
-#: src/lyxfind.cpp:4695
+#: src/lyxfind.cpp:4757
 msgid "Match not found."
 msgstr "Chaîne de caractères introuvable."
 
-#: src/lyxfind.cpp:4701
+#: src/lyxfind.cpp:4763
 msgid "Match has been replaced."
 msgstr "Chaîne de caractères remplacée."
 
-#: src/lyxfind.cpp:4703
+#: src/lyxfind.cpp:4765
 msgid "Match found."
 msgstr "Chaîne de caractères reconnue."
 

commit faedcd5cfeaac855c302b5f0ebc480ff62904820
Author: Juergen Spitzmueller <spitz@lyx.org>
Date:   Tue May 10 13:48:59 2022 +0200

    de.po

diff --git a/po/de.gmo b/po/de.gmo
index 61a1b81..e9e4c2b 100644
Binary files a/po/de.gmo and b/po/de.gmo differ
diff --git a/po/de.po b/po/de.po
index e13633c..9e367ca 100644
--- a/po/de.po
+++ b/po/de.po
@@ -94,8 +94,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: LyX 2.4git\n"
 "Report-Msgid-Bugs-To: lyx-devel@lists.lyx.org\n"
-"POT-Creation-Date: 2022-04-30 17:39+0200\n"
-"PO-Revision-Date: 2022-04-30 17:50+0200\n"
+"POT-Creation-Date: 2022-05-10 13:31+0200\n"
+"PO-Revision-Date: 2022-05-10 13:47+0200\n"
 "Last-Translator: Jürgen Spitzmüller <spitz@lyx.org>\n"
 "Language-Team: Deutsch <lyx-docs@lists.lyx.org>\n"
 "Language: de\n"
@@ -1798,8 +1798,8 @@ msgid "Restrict search to math environments only"
 msgstr "Suche auf die Mathe-Umgebung beschränken"
 
 #: src/frontends/qt/ui/FindAndReplaceUi.ui:383
-msgid "Search on&ly in maths"
-msgstr "Nur im Ma&the-Umfeld"
+msgid "Search onl&y in maths"
+msgstr "Nu&r im Mathe-Umfeld"
 
 #: src/frontends/qt/ui/FindAndReplaceUi.ui:390
 msgid ""
@@ -1832,7 +1832,7 @@ msgstr ""
 "Aspekten, die hier ausgewählt sind, wie der Sucheintrag formatiert sind."
 
 #: src/frontends/qt/ui/FindAndReplaceUi.ui:428
-msgid "Ad&here to search string formatting of"
+msgid "Adhe&re to search string formatting of"
 msgstr "Sucheintrags&formatierung beachten bzgl."
 
 #: src/frontends/qt/ui/FindAndReplaceUi.ui:440
@@ -1844,8 +1844,8 @@ msgid "Emph/noun"
 msgstr "Hervorh./Eigenname"
 
 #: src/frontends/qt/ui/FindAndReplaceUi.ui:468
-msgid "Deselect all"
-msgstr "Alles auswählen"
+msgid "Dese&lect all"
+msgstr "Alles deakti&vieren"
 
 #: src/frontends/qt/ui/FindAndReplaceUi.ui:489
 msgid "Sectioning markup"
@@ -1860,8 +1860,8 @@ msgid "Underlining"
 msgstr "Unterstreichung"
 
 #: src/frontends/qt/ui/FindAndReplaceUi.ui:517
-msgid "Select all"
-msgstr "Alles auswählen"
+msgid "&Select all"
+msgstr "Alles ausw&ählen"
 
 #: src/frontends/qt/ui/FloatPlacementUi.ui:14
 #: src/frontends/qt/ui/OutputUi.ui:14 src/frontends/qt/ui/PDFSupportUi.ui:14
@@ -28068,7 +28068,7 @@ msgid "greyedout inset text"
 msgstr "Grauschrift-Einfügungstext"
 
 #: src/BufferParams.cpp:1718 src/BufferParams.cpp:1872
-#: src/BufferParams.cpp:2315 src/Encoding.cpp:264 src/Paragraph.cpp:3014
+#: src/BufferParams.cpp:2315 src/Encoding.cpp:264 src/Paragraph.cpp:3026
 #: src/frontends/qt/LaTeXHighlighter.cpp:143
 #: src/frontends/qt/LaTeXHighlighter.cpp:257
 #: src/insets/InsetCommandParams.cpp:508 src/insets/InsetCommandParams.cpp:516
@@ -28080,7 +28080,7 @@ msgid "LyX Warning: "
 msgstr "LyX-Warnung: "
 
 #: src/BufferParams.cpp:1719 src/BufferParams.cpp:1873
-#: src/BufferParams.cpp:2316 src/Encoding.cpp:265 src/Paragraph.cpp:3015
+#: src/BufferParams.cpp:2316 src/Encoding.cpp:265 src/Paragraph.cpp:3027
 #: src/insets/InsetCommandParams.cpp:509 src/insets/InsetCommandParams.cpp:517
 #: src/insets/InsetGraphics.cpp:901 src/insets/InsetGraphics.cpp:909
 #: src/insets/InsetListings.cpp:300 src/insets/InsetListings.cpp:308
@@ -30500,15 +30500,15 @@ msgstr "Zur gespeicherten Version des Dokuments \
zurückkehren?"  msgid "&Revert"
 msgstr "&Wiederherstellen"
 
-#: src/Paragraph.cpp:2152
+#: src/Paragraph.cpp:2164
 msgid "Senseless with this layout!"
 msgstr "Für dieses Format nicht relevant!"
 
-#: src/Paragraph.cpp:2206
+#: src/Paragraph.cpp:2218
 msgid "Alignment not permitted"
 msgstr "Ausrichtung nicht erlaubt"
 
-#: src/Paragraph.cpp:2207
+#: src/Paragraph.cpp:2219
 msgid ""
 "The new layout does not permit the alignment previously used.\n"
 "Setting to default."
@@ -30613,7 +30613,7 @@ msgstr ", Zeichen: 0x"
 msgid ", Boundary: "
 msgstr ", Grenze: "
 
-#: src/Text2.cpp:406
+#: src/Text2.cpp:407
 msgid "No font change defined."
 msgstr "Keine Schriftänderung definiert."
 
@@ -30637,36 +30637,36 @@ msgstr "Regexp-Editor-Modus"
 msgid "Layout "
 msgstr "Format "
 
-#: src/Text3.cpp:1619 src/Text3.cpp:2193
+#: src/Text3.cpp:1619 src/Text3.cpp:2203
 msgid " not known"
 msgstr " unbekannt"
 
-#: src/Text3.cpp:2192
+#: src/Text3.cpp:2202
 msgid "Table Style "
 msgstr "Tabellenstil"
 
-#: src/Text3.cpp:2385 src/frontends/qt/GuiApplication.cpp:1887
+#: src/Text3.cpp:2395 src/frontends/qt/GuiApplication.cpp:1887
 msgid "Missing argument"
 msgstr "Fehlendes Argument"
 
-#: src/Text3.cpp:2550
+#: src/Text3.cpp:2560
 msgid "Invalid argument (number exceeds stack size)!"
 msgstr "Ungültiges Argument (Zahl größer als Zwischenspeicher)!"
 
-#: src/Text3.cpp:2554
+#: src/Text3.cpp:2564
 msgid "Invalid argument (must be a non-negative number)!"
 msgstr "Ungültiges Argument (muss eine nicht-negative Zahl sein)!"
 
-#: src/Text3.cpp:2559 src/Text3.cpp:2573
+#: src/Text3.cpp:2569 src/Text3.cpp:2583
 #, c-format
 msgid "Text properties applied: %1$s"
 msgstr "Angewendete Texteigenschaften: %1$s"
 
-#: src/Text3.cpp:2732
+#: src/Text3.cpp:2742
 msgid "Path to thesaurus directory not set!"
 msgstr "Pfad zum Thesaurus-Wörterbuch nicht festlegt!"
 
-#: src/Text3.cpp:2733
+#: src/Text3.cpp:2743
 msgid ""
 "The path to the thesaurus directory has not been specified.\n"
 "The thesaurus is not functional.\n"
@@ -30678,7 +30678,7 @@ msgstr ""
 "Im Benutzerhandbuch, Abschnitt 6.15.11, finden Sie Hinweise,\n"
 "um den Thesaurus einzurichten."
 
-#: src/Text3.cpp:2859 src/Text3.cpp:2870
+#: src/Text3.cpp:2869 src/Text3.cpp:2880
 msgid "Paragraph layout set"
 msgstr "Absatzformat festgelegt"
 
@@ -37215,28 +37215,28 @@ msgstr "%1$d Zeichenketten wurden in der Auswahl ersetzt."
 msgid "%1$d strings have been replaced."
 msgstr "%1$d Zeichenketten wurden ersetzt."
 
-#: src/lyxfind.cpp:4683
+#: src/lyxfind.cpp:4745
 msgid "One match has been replaced."
 msgstr "Ein Treffer wurde ersetzt."
 
-#: src/lyxfind.cpp:4686
+#: src/lyxfind.cpp:4748
 msgid "Two matches have been replaced."
 msgstr "Zwei Treffer wurden ersetzt."
 
-#: src/lyxfind.cpp:4689
+#: src/lyxfind.cpp:4751
 #, c-format
 msgid "%1$d matches have been replaced."
 msgstr "%1$d Treffer wurden ersetzt."
 
-#: src/lyxfind.cpp:4695
+#: src/lyxfind.cpp:4757
 msgid "Match not found."
 msgstr "Die Zeichenkette wurde nicht gefunden!"
 
-#: src/lyxfind.cpp:4701
+#: src/lyxfind.cpp:4763
 msgid "Match has been replaced."
 msgstr "Die Zeichenkette wurde ersetzt."
 
-#: src/lyxfind.cpp:4703
+#: src/lyxfind.cpp:4765
 msgid "Match found."
 msgstr "Die Zeichenkette wurde gefunden!"
 

commit 8bf45dd3eae73e0477b6b4457e97f070d9501b78
Author: Juergen Spitzmueller <spitz@lyx.org>
Date:   Tue May 10 13:29:51 2022 +0200

    Shuffle and add some shortcuts

diff --git a/src/frontends/qt/ui/FindAndReplaceUi.ui \
b/src/frontends/qt/ui/FindAndReplaceUi.ui index 6713723..45c7919 100644
--- a/src/frontends/qt/ui/FindAndReplaceUi.ui
+++ b/src/frontends/qt/ui/FindAndReplaceUi.ui
@@ -380,7 +380,7 @@
          <string>Restrict search to math environments only</string>
         </property>
         <property name="text">
-         <string>Search on&amp;ly in maths</string>
+         <string>Search onl&amp;y in maths</string>
         </property>
        </widget>
       </item>
@@ -425,7 +425,7 @@
        <string>If the search string is formatted in a non-default way, only find \
strings formatted like the search string in the checked respects</string>  \
</property>  <property name="title">
-       <string>Ad&amp;here to search string formatting of</string>
+       <string>Adhe&amp;re to search string formatting of</string>
       </property>
       <property name="checkable">
        <bool>true</bool>
@@ -465,7 +465,7 @@
        <item row="6" column="1">
         <widget class="QPushButton" name="deselectAllPB">
          <property name="text">
-          <string>Deselect all</string>
+          <string>Dese&amp;lect all</string>
          </property>
         </widget>
        </item>
@@ -514,7 +514,7 @@
        <item row="6" column="0">
         <widget class="QPushButton" name="selectAllPB">
          <property name="text">
-          <string>Select all</string>
+          <string>&amp;Select all</string>
          </property>
         </widget>
        </item>

commit 055e097a2561f69cedefc898e2eb7b2fc30e5ba1
Author: Kornel Benko <kornel@lyx.org>
Date:   Tue May 10 11:37:39 2022 +0200

    Amend a7c58e2f: Do not output hyperref option unicode with recent hyperref \
versions

diff --git a/development/batchtests/beamer_test.tex.orig \
b/development/batchtests/beamer_test.tex.orig index c68031d..ee846cc 100644
--- a/development/batchtests/beamer_test.tex.orig
+++ b/development/batchtests/beamer_test.tex.orig
@@ -12,10 +12,10 @@
 \usepackage{url}
 \ifx\hypersetup\undefined
   \AtBeginDocument{%
-    \hypersetup{unicode=true}
+    \hypersetup{}
   }
 \else
-  \hypersetup{unicode=true}
+  \hypersetup{}
 \fi
 
 \makeatletter

commit 62ab563c257d64df879ac27c1d77a1f45aea68a9
Author: Kornel Benko <kornel@lyx.org>
Date:   Mon May 9 22:06:02 2022 +0200

    FindAdv: Use private variable for_search
    
    Using the new inline statements
    	find_effective(), find_with_non_output(), find_with_deleted(),
    	find_set_feature(), find_add_feature() and find_clean_features()
    makes the code a slightly better readable.

diff --git a/src/Font.cpp b/src/Font.cpp
index 7b7585d..cd741d1 100644
--- a/src/Font.cpp
+++ b/src/Font.cpp
@@ -336,7 +336,7 @@ int Font::latexWriteStartChanges(otexstream & os, BufferParams \
const & bparams,  p.reduce(prev.bits_);
 
 	if (f.size() != INHERIT_SIZE) {
-		if (runparams.for_search == OutputParams::NoSearch) {
+		if (!runparams.find_effective()) {
 			os << '{';
 			++count;
 			os << '\\'
diff --git a/src/OutputParams.h b/src/OutputParams.h
index 64ab2f3..65b4fc2 100644
--- a/src/OutputParams.h
+++ b/src/OutputParams.h
@@ -433,7 +433,12 @@ public:
 		SearchNonOutput = 8
 	};
 		
-	int for_search = NoSearch;
+	inline bool find_effective(void) const { return (for_search != \
OutputParams::NoSearch); } +	inline bool find_with_non_output() const { return \
((for_search & OutputParams::SearchNonOutput) != 0); } +	inline bool \
find_with_deleted() const { return ((for_search & OutputParams::SearchWithDeleted) != \
0); } +	inline void find_set_feature(enum Search set_) { for_search = set_; }
+	inline void find_add_feature(enum Search add_) { for_search |= add_; }
+	inline void find_clean_features(void) { for_search = OutputParams::NoSearch; }
 
 	/// Are we generating this material for instant preview?
 	bool for_preview = false;
@@ -446,6 +451,8 @@ public:
 
 	/// A postponed \\noindent (after VSpace)
 	mutable bool need_noindent = false;
+private:
+	int for_search = NoSearch;
 };
 
 
diff --git a/src/Paragraph.cpp b/src/Paragraph.cpp
index 7357337..8a96e6d 100644
--- a/src/Paragraph.cpp
+++ b/src/Paragraph.cpp
@@ -1209,10 +1209,10 @@ void Paragraph::Private::latexSpecialChar(otexstream & os,
 {
 	char_type const c = owner_->getUChar(bparams, runparams, i);
 
-	if (style.pass_thru || runparams.pass_thru || (runparams.for_search != \
OutputParams::NoSearch) +	if (style.pass_thru || runparams.pass_thru || \
runparams.find_effective()  || contains(style.pass_thru_chars, c)
 	    || contains(runparams.pass_thru_chars, c)) {
-		if (runparams.for_search != OutputParams::NoSearch) {
+		if (runparams.find_effective()) {
 			switch (c) {
 			case '\\':
 				os << "\\\\";
@@ -2622,7 +2622,7 @@ void Paragraph::latex(BufferParams const & bparams,
 						runparams);
 				runningChange = Change(Change::UNCHANGED);
 
-				os << ((isEnvSeparator(i) && (runparams.for_search == OutputParams::NoSearch)) ? \
"}]~" : "}] "); +				os << ((isEnvSeparator(i) && !runparams.find_effective()) ? \
"}]~" : "}] ");  column +=3;
 			}
 			// For InTitle commands, we have already opened a group
@@ -2652,10 +2652,10 @@ void Paragraph::latex(BufferParams const & bparams,
 
 		// Check whether a display math inset follows
 		bool output_changes;
-		if (runparams.for_search == OutputParams::NoSearch)
+		if (!runparams.find_effective())
 			output_changes = bparams.output_changes;
 		else
-			output_changes = ((runparams.for_search & OutputParams::SearchWithDeleted) != 0);
+			output_changes = runparams.find_with_deleted();
 		if (c == META_INSET
 		    && i >= start_pos && (end_pos == -1 || i < end_pos)) {
 			if (isDeleted(i))
@@ -4598,7 +4598,7 @@ int Paragraph::find(docstring const & str, bool cs, bool mw,
 			odocstringstream os;
 			if (inset->lyxCode() == lyx::QUOTE_CODE) {
 				OutputParams op(0);
-				op.for_search = OutputParams::SearchQuick;
+				op.find_set_feature(OutputParams::SearchQuick);
 				inset->plaintext(os, op);
 			}
 			else {
diff --git a/src/insets/InsetBibtex.cpp b/src/insets/InsetBibtex.cpp
index 4e02b62..a9c0ff9 100644
--- a/src/insets/InsetBibtex.cpp
+++ b/src/insets/InsetBibtex.cpp
@@ -983,7 +983,7 @@ int InsetBibtex::plaintext(odocstringstream & os,
 	// We could output more information here, e.g., what databases are included
 	// and information about options. But I don't necessarily see any reason to
 	// do this right now.
-	if (op.for_tooltip || op.for_toc || op.for_search != OutputParams::NoSearch) {
+	if (op.for_tooltip || op.for_toc || op.find_effective()) {
 		os << '[' << reflabel << ']' << '\n';
 		return PLAINTEXT_NEWLINE;
 	}
diff --git a/src/insets/InsetBranch.cpp b/src/insets/InsetBranch.cpp
index a30930a..9d7cae0 100644
--- a/src/insets/InsetBranch.cpp
+++ b/src/insets/InsetBranch.cpp
@@ -321,7 +321,7 @@ bool InsetBranch::producesOutput() const
 
 void InsetBranch::latex(otexstream & os, OutputParams const & runparams) const
 {
-	if (producesOutput() || ((runparams.for_search & OutputParams::SearchNonOutput) != \
0)) { +	if (producesOutput() || runparams.find_with_non_output()) {
 		OutputParams rp = runparams;
 		rp.inbranch = true;
 		InsetText::latex(os, rp);
@@ -335,7 +335,7 @@ void InsetBranch::latex(otexstream & os, OutputParams const & \
runparams) const  int InsetBranch::plaintext(odocstringstream & os,
 			   OutputParams const & runparams, size_t max_length) const
 {
-	if (!producesOutput() && ((runparams.for_search & OutputParams::SearchNonOutput) == \
0)) +	if (!producesOutput() && !runparams.find_with_non_output())
 		return 0;
 
 	int len = InsetText::plaintext(os, runparams, max_length);
diff --git a/src/insets/InsetInclude.cpp b/src/insets/InsetInclude.cpp
index 9ee08a3..870310e 100644
--- a/src/insets/InsetInclude.cpp
+++ b/src/insets/InsetInclude.cpp
@@ -1006,14 +1006,14 @@ int InsetInclude::plaintext(odocstringstream & os,
 {
 	// just write the filename if we're making a tooltip or toc entry,
 	// or are generating this for advanced search
-	if (op.for_tooltip || op.for_toc || op.for_search != OutputParams::NoSearch) {
+	if (op.for_tooltip || op.for_toc || op.find_effective()) {
 		os << '[' << screenLabel() << '\n'
 		   << ltrim(getParam("filename")) << "\n]";
 		return PLAINTEXT_NEWLINE + 1; // one char on a separate line
 	}
 
 	if (isVerbatim(params()) || isListings(params())) {
-		if (op.for_search != OutputParams::NoSearch) {
+		if (op.find_effective()) {
 			os << '[' << screenLabel() << ']';
 		}
 		else {
diff --git a/src/insets/InsetIndex.cpp b/src/insets/InsetIndex.cpp
index 8622263..7ffff60 100644
--- a/src/insets/InsetIndex.cpp
+++ b/src/insets/InsetIndex.cpp
@@ -85,7 +85,7 @@ void InsetIndex::latex(otexstream & ios, OutputParams const & \
runparams_in) cons  odocstringstream ourlatex;
 	otexstream ots(ourlatex);
 	InsetText::latex(ots, runparams);
-	if (runparams.for_search != OutputParams::NoSearch) {
+	if (runparams.find_effective()) {
 		// No need for special handling, if we are only searching for some patterns
 		os << ourlatex.str() << "}";
 		return;
diff --git a/src/insets/InsetNote.cpp b/src/insets/InsetNote.cpp
index 45d89d0..998c8cc 100644
--- a/src/insets/InsetNote.cpp
+++ b/src/insets/InsetNote.cpp
@@ -207,12 +207,12 @@ bool InsetNote::isMacroScope() const
 void InsetNote::latex(otexstream & os, OutputParams const & runparams_in) const
 {
 	if (params_.type != InsetNoteParams::Greyedout
-	    && runparams_in.for_search != OutputParams::NoSearch
-	    && (runparams_in.for_search & OutputParams::SearchNonOutput) == 0)
+	    && runparams_in.find_effective()
+	    && !runparams_in.find_with_non_output())
 		return;
 
 	if (params_.type == InsetNoteParams::Note) {
-		if ((runparams_in.for_search & OutputParams::SearchNonOutput) != 0) {
+		if (runparams_in.find_with_non_output()) {
 			OutputParams runparams(runparams_in);
 			InsetCollapsible::latex(os, runparams);
 			runparams_in.encoding = runparams.encoding;
@@ -251,11 +251,11 @@ void InsetNote::latex(otexstream & os, OutputParams const & \
runparams_in) const  int InsetNote::plaintext(odocstringstream & os,
 			 OutputParams const & runparams_in, size_t max_length) const
 {
-	if ((runparams_in.for_search & OutputParams::SearchNonOutput) == 0) {
+	if (!runparams_in.find_with_non_output()) {
 		if (params_.type == InsetNoteParams::Note)
 			return 0;
 		else if (params_.type == InsetNoteParams::Comment
-		    && (runparams_in.for_search != OutputParams::NoSearch))
+		    && runparams_in.find_effective())
 			return 0;
 	}
 
@@ -265,10 +265,10 @@ int InsetNote::plaintext(odocstringstream & os,
 		// Ignore files that are exported inside a comment
 		runparams.exportdata.reset(new ExportData);
 	}
-	if ((runparams_in.for_search & OutputParams::SearchNonOutput) == 0)
+	if (!runparams_in.find_with_non_output())
 		os << '[' << buffer().B_("note") << ":\n";
 	InsetText::plaintext(os, runparams, max_length);
-	if ((runparams_in.for_search & OutputParams::SearchNonOutput) == 0)
+	if (!runparams_in.find_with_non_output())
 		os << "\n]";
 
 	return PLAINTEXT_NEWLINE + 1; // one char on a separate line
diff --git a/src/insets/InsetQuotes.cpp b/src/insets/InsetQuotes.cpp
index 1882769..19eb846 100644
--- a/src/insets/InsetQuotes.cpp
+++ b/src/insets/InsetQuotes.cpp
@@ -851,7 +851,7 @@ void InsetQuotes::latex(otexstream & os, OutputParams const & \
runparams) const  docstring qstr;
 
 	// In pass-thru context, we output plain quotes
-	if (runparams.pass_thru || runparams.for_search != OutputParams::NoSearch)
+	if (runparams.pass_thru || runparams.find_effective())
 		qstr = (level_ == QuoteLevel::Primary) ? from_ascii("\"") : from_ascii("'");
 	else if (style == QuoteStyle::Plain && fontspec_) {
 		// For XeTeX and LuaTeX,we need to disable mapping to get straight
@@ -944,7 +944,7 @@ void InsetQuotes::latex(otexstream & os, OutputParams const & \
runparams) const  int InsetQuotes::plaintext(odocstringstream & os,
         OutputParams const & op, size_t) const
 {
-	if (op.for_search == OutputParams::NoSearch) {
+	if (!op.find_effective()) {
 		docstring const str = displayString();
 		os << str;
 		return str.size();
diff --git a/src/insets/InsetSpace.cpp b/src/insets/InsetSpace.cpp
index ffcc8b5..28a5978 100644
--- a/src/insets/InsetSpace.cpp
+++ b/src/insets/InsetSpace.cpp
@@ -579,7 +579,7 @@ void InsetSpace::latex(otexstream & os, OutputParams const & \
runparams) const  {
 	switch (params_.kind) {
 	case InsetSpaceParams::NORMAL:
-		if (runparams.for_search != OutputParams::NoSearch)
+		if (runparams.find_effective())
 			os << "~";
 		else
 			os << (runparams.free_spacing ? " " : "\\ ");
@@ -588,21 +588,21 @@ void InsetSpace::latex(otexstream & os, OutputParams const & \
runparams) const  if (runparams.local_font &&
 		    runparams.local_font->language()->lang() == "polutonikogreek")
 			// in babel's polutonikogreek, ~ is active
-			os << (runparams.free_spacing && (runparams.for_search == OutputParams::NoSearch) \
? " " : "\\nobreakspace{}"); +			os << (runparams.free_spacing && \
!runparams.find_effective() ? " " : "\\nobreakspace{}");  else
-			os << (runparams.free_spacing && (runparams.for_search == OutputParams::NoSearch) \
? ' ' : '~'); +			os << (runparams.free_spacing && !runparams.find_effective() ? ' ' \
: '~');  break;
 	case InsetSpaceParams::VISIBLE:
-		os << (runparams.free_spacing && (runparams.for_search == OutputParams::NoSearch) \
? " " : "\\textvisiblespace{}"); +		os << (runparams.free_spacing && \
!runparams.find_effective() ? " " : "\\textvisiblespace{}");  break;
 	case InsetSpaceParams::THIN:
-		if (runparams.for_search != OutputParams::NoSearch)
+		if (runparams.find_effective())
 			os << "\\thinspace{}";
 		else
 			os << (runparams.free_spacing ? " " : "\\,");
 		break;
 	case InsetSpaceParams::MEDIUM:
-		if (runparams.for_search != OutputParams::NoSearch)
+		if (runparams.find_effective())
 			os << "\\medspace{}";
 		else if (params_.math)
 			os << (runparams.free_spacing ? " " : "\\:");
@@ -610,7 +610,7 @@ void InsetSpace::latex(otexstream & os, OutputParams const & \
runparams) const  os << (runparams.free_spacing ? " " : "\\medspace{}");
 		break;
 	case InsetSpaceParams::THICK:
-		if (runparams.for_search != OutputParams::NoSearch)
+		if (runparams.find_effective())
 			os << "\\thickspace{}";
 		else if (params_.math)
 			os << (runparams.free_spacing ? " " : "\\;");
@@ -618,49 +618,49 @@ void InsetSpace::latex(otexstream & os, OutputParams const & \
runparams) const  os << (runparams.free_spacing ? " " : "\\thickspace{}");
 		break;
 	case InsetSpaceParams::QUAD:
-		os << (runparams.free_spacing && (runparams.for_search != OutputParams::NoSearch) \
? " " : "\\quad{}"); +		os << (runparams.free_spacing && runparams.find_effective() ? \
" " : "\\quad{}");  break;
 	case InsetSpaceParams::QQUAD:
-		os << (runparams.free_spacing && (runparams.for_search != OutputParams::NoSearch) \
? " " : "\\qquad{}"); +		os << (runparams.free_spacing && runparams.find_effective() \
? " " : "\\qquad{}");  break;
 	case InsetSpaceParams::ENSPACE:
-		os << (runparams.free_spacing && (runparams.for_search != OutputParams::NoSearch) \
? " " : "\\enspace{}"); +		os << (runparams.free_spacing && \
runparams.find_effective() ? " " : "\\enspace{}");  break;
 	case InsetSpaceParams::ENSKIP:
-		os << (runparams.free_spacing && (runparams.for_search != OutputParams::NoSearch) \
? " " : "\\enskip{}"); +		os << (runparams.free_spacing && runparams.find_effective() \
? " " : "\\enskip{}");  break;
 	case InsetSpaceParams::NEGTHIN:
-		os << (runparams.free_spacing && (runparams.for_search != OutputParams::NoSearch) \
? " " : "\\negthinspace{}"); +		os << (runparams.free_spacing && \
runparams.find_effective() ? " " : "\\negthinspace{}");  break;
 	case InsetSpaceParams::NEGMEDIUM:
-		os << (runparams.free_spacing && (runparams.for_search != OutputParams::NoSearch) \
? " " : "\\negmedspace{}"); +		os << (runparams.free_spacing && \
runparams.find_effective() ? " " : "\\negmedspace{}");  break;
 	case InsetSpaceParams::NEGTHICK:
-		os << (runparams.free_spacing && (runparams.for_search != OutputParams::NoSearch) \
? " " : "\\negthickspace{}"); +		os << (runparams.free_spacing && \
runparams.find_effective() ? " " : "\\negthickspace{}");  break;
 	case InsetSpaceParams::HFILL:
-		os << (runparams.free_spacing && (runparams.for_search != OutputParams::NoSearch) \
? " " : "\\hfill{}"); +		os << (runparams.free_spacing && runparams.find_effective() \
? " " : "\\hfill{}");  break;
 	case InsetSpaceParams::HFILL_PROTECTED:
-		os << (runparams.free_spacing && (runparams.for_search != OutputParams::NoSearch) \
? " " : "\\hspace*{\\fill}"); +		os << (runparams.free_spacing && \
runparams.find_effective() ? " " : "\\hspace*{\\fill}");  break;
 	case InsetSpaceParams::DOTFILL:
-		os << (runparams.free_spacing && (runparams.for_search != OutputParams::NoSearch) \
? " " : "\\dotfill{}"); +		os << (runparams.free_spacing && \
runparams.find_effective() ? " " : "\\dotfill{}");  break;
 	case InsetSpaceParams::HRULEFILL:
-		os << (runparams.free_spacing && (runparams.for_search != OutputParams::NoSearch) \
? " " : "\\hrulefill{}"); +		os << (runparams.free_spacing && \
runparams.find_effective() ? " " : "\\hrulefill{}");  break;
 	case InsetSpaceParams::LEFTARROWFILL:
-		os << (runparams.free_spacing && (runparams.for_search != OutputParams::NoSearch) \
? " " : "\\leftarrowfill{}"); +		os << (runparams.free_spacing && \
runparams.find_effective() ? " " : "\\leftarrowfill{}");  break;
 	case InsetSpaceParams::RIGHTARROWFILL:
-		os << (runparams.free_spacing && (runparams.for_search != OutputParams::NoSearch) \
? " " : "\\rightarrowfill{}"); +		os << (runparams.free_spacing && \
runparams.find_effective() ? " " : "\\rightarrowfill{}");  break;
 	case InsetSpaceParams::UPBRACEFILL:
-		os << (runparams.free_spacing && (runparams.for_search != OutputParams::NoSearch) \
? " " : "\\upbracefill{}"); +		os << (runparams.free_spacing && \
runparams.find_effective() ? " " : "\\upbracefill{}");  break;
 	case InsetSpaceParams::DOWNBRACEFILL:
-		os << (runparams.free_spacing && (runparams.for_search != OutputParams::NoSearch) \
? " " : "\\downbracefill{}"); +		os << (runparams.free_spacing && \
runparams.find_effective() ? " " : "\\downbracefill{}");  break;
 	case InsetSpaceParams::CUSTOM:
 		if (runparams.free_spacing)
@@ -737,11 +737,10 @@ int InsetSpace::plaintext(odocstringstream & os,
 		return 1;
 	case InsetSpaceParams::PROTECTED:
 	case InsetSpaceParams::CUSTOM_PROTECTED:
-		if (runparams.for_search == OutputParams::NoSearch)
-			os.put(0x00a0);
-		else {
+		if (runparams.find_effective())
 			os.put(' ');
-		}
+		else
+			os.put(0x00a0);
 		return 1;
 	case InsetSpaceParams::NEGTHIN:
 	case InsetSpaceParams::NEGMEDIUM:
diff --git a/src/lyxfind.cpp b/src/lyxfind.cpp
index 4df0f1e..7048fc2 100644
--- a/src/lyxfind.cpp
+++ b/src/lyxfind.cpp
@@ -812,6 +812,17 @@ namespace {
 
 typedef vector<pair<string, string> > Escapes;
 
+static string getRegexSpaceCount(int count)
+{
+	if (count > 0) {
+		if (count > 1)
+			return "\\s{" + std::to_string(count) + "}";
+		else
+			return "\\s";
+	}
+	return "";
+}
+
 string string2regex(string in)
 {
 	static std::regex specialChars { R"([-[\]{}()*+?.,\^$|#\$\\])" };
@@ -833,20 +844,14 @@ string string2regex(string in)
 		}
 		else {
 			if (blanks > 0) {
-				if (blanks > 1)
-					temp += "\\s+";
-				else
-					temp += "\\s";
+				temp += getRegexSpaceCount(blanks);
 			}
 			temp += tempx[i];
 			blanks = 0;
 		}
 	}
 	if (blanks > 0) {
-		if (blanks > 1)
-			temp += "\\s+";
-		else
-			temp += "\\s";
+		temp += getRegexSpaceCount(blanks);
 	}
 
 	string temp2("");
@@ -1153,11 +1158,11 @@ static docstring buffer_to_latex(Buffer & buffer)
 	runparams.nice = true;
 	setFindParams(runparams);
 	if (ignoreFormats.getDeleted())
-		runparams.for_search = OutputParams::SearchWithoutDeleted;
+		runparams.find_set_feature(OutputParams::SearchWithoutDeleted);
 	else
-		runparams.for_search = OutputParams::SearchWithDeleted;
+		runparams.find_set_feature(OutputParams::SearchWithDeleted);
 	if (ignoreFormats.getNonContent()) {
-		runparams.for_search |= OutputParams::SearchNonOutput;
+		runparams.find_add_feature(OutputParams::SearchNonOutput);
 	}
 	pit_type const endpit = buffer.paragraphs().size();
 	for (pit_type pit = 0; pit != endpit; ++pit) {
@@ -1231,13 +1236,13 @@ static docstring stringifySearchBuffer(Buffer & buffer, \
FindAndReplaceOptions co  int option = AS_STR_INSETS |AS_STR_PLAINTEXT;
 		if (ignoreFormats.getDeleted()) {
 			option |= AS_STR_SKIPDELETE;
-			runparams.for_search = OutputParams::SearchWithoutDeleted;
+			runparams.find_set_feature(OutputParams::SearchWithoutDeleted);
 		}
 		else {
-			runparams.for_search = OutputParams::SearchWithDeleted;
+			runparams.find_set_feature(OutputParams::SearchWithDeleted);
 		}
 		if (ignoreFormats.getNonContent()) {
-			runparams.for_search |= OutputParams::SearchNonOutput;
+			runparams.find_add_feature(OutputParams::SearchNonOutput);
 		}
 		string t("");
 		for (pos_type pit = pos_type(0); pit < (pos_type)buffer.paragraphs().size(); \
++pit) { @@ -4014,13 +4019,13 @@ docstring stringifyFromCursor(DocIterator const & \
cur, int len)  int option = AS_STR_INSETS | AS_STR_PLAINTEXT;
 		if (ignoreFormats.getDeleted()) {
 			option |= AS_STR_SKIPDELETE;
-			runparams.for_search = OutputParams::SearchWithoutDeleted;
+			runparams.find_set_feature(OutputParams::SearchWithoutDeleted);
 		}
 		else {
-			runparams.for_search = OutputParams::SearchWithDeleted;
+			runparams.find_set_feature(OutputParams::SearchWithDeleted);
 		}
 		if (ignoreFormats.getNonContent()) {
-			runparams.for_search |= OutputParams::SearchNonOutput;
+			runparams.find_add_feature(OutputParams::SearchNonOutput);
 		}
 		LYXERR(Debug::FINDVERBOSE, "Stringifying with cur: "
 		       << cur << ", from pos: " << cur.pos() << ", end: " << end);
@@ -4067,13 +4072,13 @@ docstring latexifyFromCursor(DocIterator const & cur, int \
len)  runparams.nice = false;
 	setFindParams(runparams);
 	if (ignoreFormats.getDeleted()) {
-		runparams.for_search = OutputParams::SearchWithoutDeleted;
+		runparams.find_set_feature(OutputParams::SearchWithoutDeleted);
 	}
 	else {
-		runparams.for_search = OutputParams::SearchWithDeleted;
+		runparams.find_set_feature(OutputParams::SearchWithDeleted);
 	}
 	if (ignoreFormats.getNonContent()) {
-		runparams.for_search |= OutputParams::SearchNonOutput;
+		runparams.find_add_feature(OutputParams::SearchNonOutput);
 	}
 
 	if (cur.inTexted()) {
diff --git a/src/mathed/InsetMathHull.cpp b/src/mathed/InsetMathHull.cpp
index e266ec8..de01bad 100644
--- a/src/mathed/InsetMathHull.cpp
+++ b/src/mathed/InsetMathHull.cpp
@@ -2359,10 +2359,10 @@ int InsetMathHull::plaintext(odocstringstream & os,
 	Encoding const * const enc = encodings.fromLyXName("utf8");
 
 	TeXMathStream::OutputType ot;
-	if (op.for_search == OutputParams::NoSearch)
-		ot = TeXMathStream::wsDefault;
-	else
+	if (op.find_effective())
 		ot = TeXMathStream::wsSearchAdv;
+	else
+		ot = TeXMathStream::wsDefault;
 	// Fix Bug #6139
 	if (type_ == hullRegexp) {
 		TeXMathStream wi(ots, false, true, ot, enc);
diff --git a/src/mathed/InsetMathNest.cpp b/src/mathed/InsetMathNest.cpp
index d4759a0..cfa5aaf 100644
--- a/src/mathed/InsetMathNest.cpp
+++ b/src/mathed/InsetMathNest.cpp
@@ -359,7 +359,7 @@ void InsetMathNest::normalize(NormalStream & os) const
 void InsetMathNest::latex(otexstream & os, OutputParams const & runparams) const
 {
 	TeXMathStream::OutputType ot;
-	if (runparams.for_search != OutputParams::NoSearch)
+	if (runparams.find_effective())
 		ot = TeXMathStream::wsSearchAdv;
 	else if (runparams.dryrun)
 		ot = TeXMathStream::wsDryrun;
diff --git a/src/output_latex.cpp b/src/output_latex.cpp
index 358aae5..1061f3d 100644
--- a/src/output_latex.cpp
+++ b/src/output_latex.cpp
@@ -462,10 +462,10 @@ void TeXEnvironment(Buffer const & buf, Text const & text,
 		// Do not output empty environments if the whole paragraph has
 		// been deleted with ct and changes are not output.
 		bool output_changes;
-		if (runparams.for_search == OutputParams::NoSearch)
+		if (!runparams.find_effective())
 			output_changes = buf.params().output_changes;
 		else
-			output_changes = ((runparams.for_search & OutputParams::SearchWithDeleted) != 0);
+			output_changes = runparams.find_with_deleted();
 		if (size_t(pit + 1) < paragraphs.size()) {
 			ParagraphList::const_iterator nextpar = paragraphs.iterator_at(pit + 1);
 			Paragraph const & cpar = paragraphs.at(pit);
@@ -578,7 +578,7 @@ void getArgInsets(otexstream & os, OutputParams const & \
runparams, Layout::LaTeX  }
 		}
 	}
-	if ((runparams.for_search != OutputParams::NoSearch) && argnr > 1) {
+	if (runparams.find_effective() && argnr > 1) {
 		// Mark end of arguments for findadv() only
 		os << "\\endarguments{}";
 	}
@@ -746,7 +746,7 @@ void parStartCommand(Paragraph const & par, otexstream & os,
 		break;
 	case LATEX_ITEM_ENVIRONMENT:
 	case LATEX_LIST_ENVIRONMENT:
-		if (runparams.for_search != OutputParams::NoSearch) {
+		if (runparams.find_effective()) {
 			os << "\\" + style.itemcommand() << "{" << style.latexname() << "}";
 		}
 		else {
@@ -758,7 +758,7 @@ void parStartCommand(Paragraph const & par, otexstream & os,
 		}
 		break;
 	case LATEX_ENVIRONMENT:
-		if (runparams.for_search != OutputParams::NoSearch) {
+		if (runparams.find_effective()) {
 			os << "\\latexenvironment{" << style.latexname() << "}{";
 		}
 		break;
@@ -796,7 +796,7 @@ void TeXOnePar(Buffer const & buf,
 
 	// Do not output empty commands if the whole paragraph has
 	// been deleted with ct and changes are not output.
-	if (((runparams_in.for_search & OutputParams::SearchWithDeleted) == 0) && \
style.latextype != LATEX_ENVIRONMENT +	if (!runparams_in.find_with_deleted() && \
                style.latextype != LATEX_ENVIRONMENT
 	    && !par.empty() && par.isDeleted(0, par.size()) && !bparams.output_changes)
 		return;
 
@@ -936,7 +936,7 @@ void TeXOnePar(Buffer const & buf,
 	bool const have_prior_nptpar =
 			prior_nontitle_par && !prior_nontitle_par->isPassThru();
 	Language const * const prev_language =
-		runparams_in.for_search != OutputParams::NoSearch
+		runparams_in.find_effective()
 			? languages.getLanguage("ignore")
 			: (have_prior_nptpar)
 				? (use_prev_env_language 
@@ -988,7 +988,7 @@ void TeXOnePar(Buffer const & buf,
 		&& !(have_prior_nptpar
 		     && (prev_language->rightToLeft() != par_language->rightToLeft()));
 	bool const localswitch =
-			(runparams_in.for_search != OutputParams::NoSearch
+			(runparams_in.find_effective()
 			|| text.inset().forceLocalFontSwitch()
 			|| (using_begin_end && text.inset().forcePlainLayout())
 			|| in_polyglossia_rtl_env)
@@ -1003,7 +1003,7 @@ void TeXOnePar(Buffer const & buf,
 	bool const localswitch_needed = localswitch && par_lang != outer_lang;
 
 	// localswitches need to be closed and reopened at each par
-	if ((runparams_in.for_search != OutputParams::NoSearch) || ((par_lang != prev_lang \
|| localswitch_needed) +	if (runparams_in.find_effective() || ((par_lang != prev_lang \
|| localswitch_needed)  // check if we already put language command in \
TeXEnvironment()  && !(style.isEnvironment()
 		  && (pit == 0 || (priorpar->layout() != par.layout()
@@ -1071,7 +1071,7 @@ void TeXOnePar(Buffer const & buf,
 			// With CJK, the CJK tag has to be closed first (see below)
 			if ((runparams.encoding->package() != Encoding::CJK
 				 || bparams.useNonTeXFonts
-				 || (runparams.for_search != OutputParams::NoSearch))
+				 || runparams.find_effective())
 			    && (par_lang != openLanguageName(state) || localswitch || intitle_command)
 			    && !par_lang.empty()) {
 				string bc = use_polyglossia ?
@@ -1312,7 +1312,7 @@ void TeXOnePar(Buffer const & buf,
 		// when the paragraph uses CJK, the language has to be closed earlier
 		if ((font.language()->encoding()->package() != Encoding::CJK)
 			|| bparams.useNonTeXFonts
-			|| (runparams_in.for_search != OutputParams::NoSearch)) {
+			|| runparams_in.find_effective()) {
 			if (lang_end_command.empty()) {
 				// If this is a child, we should restore the
 				// master language after the last paragraph.
@@ -1708,10 +1708,10 @@ void latexParagraphs(Buffer const & buf,
 		// Do not output empty environments if the whole paragraph has
 		// been deleted with ct and changes are not output.
 		bool output_changes;
-		if (runparams.for_search == OutputParams::NoSearch)
+		if (!runparams.find_effective())
 			output_changes = bparams.output_changes;
 		else
-			output_changes = ((runparams.for_search & OutputParams::SearchWithDeleted) != 0);
+			output_changes = runparams.find_with_deleted();
 		bool const lastpar = size_t(pit + 1) >= paragraphs.size();
 		if (!lastpar) {
 			ParagraphList::const_iterator nextpar = paragraphs.iterator_at(pit + 1);
@@ -1854,7 +1854,7 @@ pair<bool, int> switchEncoding(odocstream & os, BufferParams \
const & bparams,  || oldEnc.package() == Encoding::japanese
 		|| oldEnc.package() == Encoding::none
 		|| newEnc.package() == Encoding::none
-		|| (runparams.for_search != OutputParams::NoSearch))
+		|| runparams.find_effective())
 		return make_pair(false, 0);
 	// FIXME We ignore encoding switches from/to encodings that do
 	// neither support the inputenc package nor the CJK package here.

commit e6f5f428d7fbb10dde24aca79fca7623af5f7749
Author: Jean-Marc Lasgouttes <lasgouttes@lyx.org>
Date:   Mon May 9 10:23:54 2022 +0200

    Fix crash with LFUN_LAYOUT with multicell selection
    
    This lfun (like several others) does not work with multicell
    selection. Disable the lfun in this this case for now, until a nice
    solution is found.
    
    Fixes bug #12530.

diff --git a/src/Text2.cpp b/src/Text2.cpp
index 9026740..82cc994 100644
--- a/src/Text2.cpp
+++ b/src/Text2.cpp
@@ -162,6 +162,7 @@ void Text::setInsetFont(BufferView const & bv, pit_type pit,
 void Text::setLayout(pit_type start, pit_type end,
 		     docstring const & layout)
 {
+	// FIXME: make this work in multicell selection case
 	LASSERT(start != end, return);
 
 	Buffer const & buffer = owner_->buffer();
diff --git a/src/Text3.cpp b/src/Text3.cpp
index f871bb3..8143f39 100644
--- a/src/Text3.cpp
+++ b/src/Text3.cpp
@@ -3575,8 +3575,10 @@ bool Text::getStatus(Cursor & cur, FuncRequest const & cmd,
 		docstring const req_layout = ignoreautonests ? from_utf8(cmd.getArg(0)) : \
cmd.argument();  docstring const layout = resolveLayout(req_layout, cur);
 
-		enable = !owner_->forcePlainLayout() && !layout.empty();
-		status.setOnOff(!owner_->forcePlainLayout() && isAlreadyLayout(layout, cur));
+		// FIXME: make this work in multicell selection case
+		enable = !owner_->forcePlainLayout() && !layout.empty() && !cur.selIsMultiCell();
+		status.setOnOff(!owner_->forcePlainLayout() && !cur.selIsMultiCell()
+		                && isAlreadyLayout(layout, cur));
 		break;
 	}
 

commit 441b0eab2370b8b6cbe0c0a75a1718405a4b6329
Author: Kornel Benko <kornel@lyx.org>
Date:   Sun May 8 22:43:56 2022 +0200

    FindAdv: Amend 64af721a
    
    The space handling is a nightmare.

diff --git a/src/Paragraph.cpp b/src/Paragraph.cpp
index e1ece12..7357337 100644
--- a/src/Paragraph.cpp
+++ b/src/Paragraph.cpp
@@ -1223,6 +1223,9 @@ void Paragraph::Private::latexSpecialChar(otexstream & os,
 			case '}':
 				os << "\\braceright ";
 				return;
+			case '~':
+				os << "\\lyxtilde ";
+				return;
 			case ' ':
 			case '\0':
 				break;
diff --git a/src/insets/InsetSpace.cpp b/src/insets/InsetSpace.cpp
index 669239b..ffcc8b5 100644
--- a/src/insets/InsetSpace.cpp
+++ b/src/insets/InsetSpace.cpp
@@ -679,7 +679,7 @@ void InsetSpace::latex(otexstream & os, OutputParams const & \
runparams) const  
 
 int InsetSpace::plaintext(odocstringstream & os,
-        OutputParams const &, size_t) const
+        OutputParams const &runparams, size_t) const
 {
 	switch (params_.kind) {
 	case InsetSpaceParams::HFILL:
@@ -737,7 +737,11 @@ int InsetSpace::plaintext(odocstringstream & os,
 		return 1;
 	case InsetSpaceParams::PROTECTED:
 	case InsetSpaceParams::CUSTOM_PROTECTED:
-		os.put(0x00a0);
+		if (runparams.for_search == OutputParams::NoSearch)
+			os.put(0x00a0);
+		else {
+			os.put(' ');
+		}
 		return 1;
 	case InsetSpaceParams::NEGTHIN:
 	case InsetSpaceParams::NEGMEDIUM:
diff --git a/src/lyxfind.cpp b/src/lyxfind.cpp
index 9c70938..4df0f1e 100644
--- a/src/lyxfind.cpp
+++ b/src/lyxfind.cpp
@@ -833,14 +833,20 @@ string string2regex(string in)
 		}
 		else {
 			if (blanks > 0) {
-				temp += "\\s+";
+				if (blanks > 1)
+					temp += "\\s+";
+				else
+					temp += "\\s";
 			}
 			temp += tempx[i];
 			blanks = 0;
 		}
 	}
 	if (blanks > 0) {
-		temp += "\\s+";
+		if (blanks > 1)
+			temp += "\\s+";
+		else
+			temp += "\\s";
 	}
 
 	string temp2("");
@@ -1161,7 +1167,7 @@ static docstring buffer_to_latex(Buffer & buffer)
 	return ods.str();
 }
 
-static string latexNamesToUtf8(docstring strIn)
+static string latexNamesToUtf8(docstring strIn, bool withformat)
 {
 	string addtmp = to_utf8(strIn);
 	static regex const rmAcc("(\\\\)*("
@@ -1203,6 +1209,10 @@ static string latexNamesToUtf8(docstring strIn)
 		add = addtmp;
 	else if (addtmp.length() > lastpos)
 		add += addtmp.substr(lastpos, addtmp.length() - lastpos);
+	if (!withformat) {
+		static std::regex repltilde { R"(~)" };
+		add = std::regex_replace(add, repltilde, accents["lyxtilde"]);
+	}
 	LYXERR(Debug::FINDVERBOSE, "Adding to search string: '"
 			<< add << "'");
 	return add;
@@ -1234,7 +1244,7 @@ static docstring stringifySearchBuffer(Buffer & buffer, \
FindAndReplaceOptions co  Paragraph const & par = buffer.paragraphs().at(pit);
 			string add = latexNamesToUtf8(par.asString(pos_type(0), par.size(),
 								option,
-								&runparams));
+								&runparams), !opt.ignoreformat);
 			LYXERR(Debug::FINDVERBOSE, "Adding to search string: '"
 				<< add << "'");
 			t += add;
@@ -1929,7 +1939,6 @@ static void buildAccentsMap()
 	accents["cdot"] = " ";
 	accents["textasciicircum"] = "^";
 	accents["mathcircumflex"] = "^";
-	accents["sim"] = "~";
 	accents["guillemotright"] = " ";
 	accents["guillemotleft"] = " ";
 	accents["hairspace"]     = getutf8(0xf0000);	// select from free unicode plane 15
@@ -1950,6 +1959,8 @@ static void buildAccentsMap()
 	accents["lyxarrow"]      = getutf8(0xf0020);
 	accents["braceleft"]     = getutf8(0xf0030);
 	accents["braceright"]    = getutf8(0xf0031);
+	accents["lyxtilde"]      = getutf8(0xf0032);
+	accents["sim"]           = getutf8(0xf0032);
 	accents["backslash lyx"]           = getutf8(0xf0010);	// Used logos inserted with \
starting \backslash  accents["backslash LyX"]           = getutf8(0xf0010);
 	accents["backslash tex"]           = getutf8(0xf0011);
@@ -4015,7 +4026,7 @@ docstring stringifyFromCursor(DocIterator const & cur, int len)
 		       << cur << ", from pos: " << cur.pos() << ", end: " << end);
 		docstring res = from_utf8(latexNamesToUtf8(par.asString(cur.pos(), end,
 								        option,
-								        &runparams)));
+								        &runparams), false));
 		LYXERR(Debug::FINDVERBOSE|Debug::FIND, "Stringified text from pos(" << cur.pos() \
<< ") len(" << len << "): " << res);  return res;
 	} else if (cur.inMathed()) {
@@ -4028,7 +4039,7 @@ docstring stringifyFromCursor(DocIterator const & cur, int len)
 		MathData md2;
 		for (MathData::const_iterator it = md.begin() + cs.pos(); it != it_end; ++it)
 			md2.push_back(*it);
-		docstring res = from_utf8(latexNamesToUtf8(asString(md2)));
+		docstring res = from_utf8(latexNamesToUtf8(asString(md2), false));
 		LYXERR(Debug::FINDVERBOSE|Debug::FIND, "Stringified math from pos(" << cur.pos() \
<< ") len(" << len << "): " << res);  return res;
 	}

commit 64af721adc1a6bc1b730214cbcb14dd7b8f3f2d9
Author: Kornel Benko <kornel@lyx.org>
Date:   Sun May 8 20:24:43 2022 +0200

    FindAdv: Handle normal and protected space also inside regular expression

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 "\'"

commit 286dcfc9c767f1e791e219d9b282c62a40145f1b
Author: Kornel Benko <kornel@lyx.org>
Date:   Sun May 8 15:32:13 2022 +0200

    FindAdv: Correct the 'fix' in 4bb427a2
    
    :(

diff --git a/src/lyxfind.cpp b/src/lyxfind.cpp
index 669742e..2208fd4 100644
--- a/src/lyxfind.cpp
+++ b/src/lyxfind.cpp
@@ -3804,10 +3804,10 @@ MatchResult MatchStringAdv::findAux(DocIterator const & cur, \
int len, bool at_be  int matchend = match.capturedEnd(0);
 		size_t strsize = qstr.size();
 		if (!opt.ignoreformat) {
-			while (mres.match_len > 0) {
+			while (mres.match_len > 1) {
 				QChar c = qstr.at(matchend - 1);
 				if ((c == '\n') || (c == '}') || (c == '{')) {
-					// mres.match_len--;
+					mres.match_len--;
 					matchend--;
 				}
 				else
@@ -3833,10 +3833,10 @@ MatchResult MatchStringAdv::findAux(DocIterator const & cur, \
int len, bool at_be  int matchend = strend;
 		size_t strsize = str.size();
 		if (!opt.ignoreformat) {
-			while (mres.match_len > 0) {
+			while (mres.match_len > 1) {
 				char c = str.at(matchend - 1);
 				if ((c == '\n') || (c == '}') || (c == '{')) {
-					// mres.match_len--;
+					mres.match_len--;
 					matchend--;
 				}
 				else

commit 4bb427a2443d64bd01aad66ebdc0b3f802546bae
Author: Kornel Benko <kornel@lyx.org>
Date:   Sun May 8 14:30:45 2022 +0200

    FindAdv: Amend 627cd6de: Use '~' instead of "\\ " for search if possible
    
    Also fix a thinko in interpreting the found values.
    The match_len describes the length of the second regex field,
    while matchend is the length of the search field 0.

diff --git a/src/insets/InsetSpace.cpp b/src/insets/InsetSpace.cpp
index 92d4c43..669239b 100644
--- a/src/insets/InsetSpace.cpp
+++ b/src/insets/InsetSpace.cpp
@@ -579,7 +579,10 @@ void InsetSpace::latex(otexstream & os, OutputParams const & \
runparams) const  {
 	switch (params_.kind) {
 	case InsetSpaceParams::NORMAL:
-		os << (runparams.free_spacing && (runparams.for_search == OutputParams::NoSearch) \
? " " : "\\ "); +		if (runparams.for_search != OutputParams::NoSearch)
+			os << "~";
+		else
+			os << (runparams.free_spacing ? " " : "\\ ");
 		break;
 	case InsetSpaceParams::PROTECTED:
 		if (runparams.local_font &&
diff --git a/src/lyxfind.cpp b/src/lyxfind.cpp
index 83ccb23..669742e 100644
--- a/src/lyxfind.cpp
+++ b/src/lyxfind.cpp
@@ -831,10 +831,6 @@ string string2regex(string in)
 			blanks++;
 			i++;
 		}
-		else if (tempx[i] == '\\' && tempx[i+1] == '\\' && tempx[i+2] == ' ') {
-			blanks++;
-			i += 2;
-		}
 		else {
 			if (blanks > 0) {
 				temp += "\\s+";
@@ -3740,6 +3736,9 @@ MatchResult MatchStringAdv::findAux(DocIterator const & cur, \
int len, bool at_be  if (lng != str.size()) {
 			str = str.substr(0, lng);
 		}
+		// Replace occurences of '~' to ' '
+		static std::regex specialChars { R"(~)" };
+		str = std::regex_replace(str, specialChars,  R"( )" );
 	}
 	if (str.empty()) {
 		mres.match_len = -1;
@@ -3808,7 +3807,7 @@ MatchResult MatchStringAdv::findAux(DocIterator const & cur, \
int len, bool at_be  while (mres.match_len > 0) {
 				QChar c = qstr.at(matchend - 1);
 				if ((c == '\n') || (c == '}') || (c == '{')) {
-					mres.match_len--;
+					// mres.match_len--;
 					matchend--;
 				}
 				else
@@ -3837,7 +3836,7 @@ MatchResult MatchStringAdv::findAux(DocIterator const & cur, \
int len, bool at_be  while (mres.match_len > 0) {
 				char c = str.at(matchend - 1);
 				if ((c == '\n') || (c == '}') || (c == '{')) {
-					mres.match_len--;
+					// mres.match_len--;
 					matchend--;
 				}
 				else

commit 627cd6dec2279f2adf473f789078861493a62a7f
Author: Kornel Benko <kornel@lyx.org>
Date:   Fri May 6 17:16:49 2022 +0200

    FindAdv: Simplify search for space also if not using regex
    
    In the pattern-string convert occurences of
    ' ', '~'
    and the values we get with
    	space-insert normal
    	space-insert protected
    to "\s+".

diff --git a/src/lyxfind.cpp b/src/lyxfind.cpp
index c101e71..83ccb23 100644
--- a/src/lyxfind.cpp
+++ b/src/lyxfind.cpp
@@ -814,8 +814,39 @@ typedef vector<pair<string, string> > Escapes;
 
 string string2regex(string in)
 {
-	static std::regex specialChars { R"([-[\]{}()*+?.,\^$|#\s\$\\])" };
-	string temp = std::regex_replace(in, specialChars,  R"(\$&)" );
+	static std::regex specialChars { R"([-[\]{}()*+?.,\^$|#\$\\])" };
+	string tempx = std::regex_replace(in, specialChars,  R"(\$&)" );
+	// Special handling for ' '
+	string temp("");
+	int blanks = 0;
+	for (unsigned i = 0; i < tempx.size(); i++) {
+		if (tempx[i] == ' ' || tempx[i] == '~' ) {
+			// normal blanks
+			blanks++;
+		}
+		else if ((tempx[i] == '\302' && tempx[i+1] == '\240')
+			|| (tempx[i] == '\342' && tempx[i+1] == '\200')) {
+			// protected space
+			// thin space
+			blanks++;
+			i++;
+		}
+		else if (tempx[i] == '\\' && tempx[i+1] == '\\' && tempx[i+2] == ' ') {
+			blanks++;
+			i += 2;
+		}
+		else {
+			if (blanks > 0) {
+				temp += "\\s+";
+			}
+			temp += tempx[i];
+			blanks = 0;
+		}
+	}
+	if (blanks > 0) {
+		temp += "\\s+";
+	}
+
 	string temp2("");
 	size_t lastpos = 0;
 	size_t fl_pos = 0;
@@ -3374,10 +3405,12 @@ static string correctlanguagesetting(string par, bool \
isPatternString, bool with  while ((parlen > 0) && (par[parlen-1] == '\n')) {
 		parlen--;
 	}
+#if 0
 	if (isPatternString && (parlen > 0) && (par[parlen-1] == '~')) {
 		// Happens to be there in case of description or labeling environment
 		parlen--;
 	}
+#endif
 	string result;
 	if (withformat) {
 		// Split the latex input into pieces which

commit 70a762f91c6d43234a0290fd8d869937597feb9d
Author: Kornel Benko <kornel@lyx.org>
Date:   Thu May 5 15:56:15 2022 +0200

    FindAdv: Small improvements

diff --git a/src/Paragraph.cpp b/src/Paragraph.cpp
index df1d905..e1ece12 100644
--- a/src/Paragraph.cpp
+++ b/src/Paragraph.cpp
@@ -2619,7 +2619,7 @@ void Paragraph::latex(BufferParams const & bparams,
 						runparams);
 				runningChange = Change(Change::UNCHANGED);
 
-				os << (isEnvSeparator(i) ? "}]~" : "}] ");
+				os << ((isEnvSeparator(i) && (runparams.for_search == OutputParams::NoSearch)) ? \
"}]~" : "}] ");  column +=3;
 			}
 			// For InTitle commands, we have already opened a group
diff --git a/src/lyxfind.cpp b/src/lyxfind.cpp
index 1334805..c101e71 100644
--- a/src/lyxfind.cpp
+++ b/src/lyxfind.cpp
@@ -2826,6 +2826,8 @@ string Intervall::show(int lastpos)
 	int idx = 0;                          /* int intervalls */
 	string s;
 	int i = 0;
+	if ((unsigned) lastpos > par.size())
+		lastpos = par.size();
 	for (idx = 0; idx <= ignoreidx; idx++) {
 		while (i < lastpos) {
 			int printsize;
@@ -3710,7 +3712,7 @@ MatchResult MatchStringAdv::findAux(DocIterator const & cur, \
int len, bool at_be  mres.match_len = -1;
 		return mres;
 	}
-	LYXERR(Debug::FINDVERBOSE, "After normalization: Matching against:\n'" << str << \
"'"); +	LYXERR(Debug::FINDVERBOSE|Debug::FIND, "After normalization: Matching \
against:\n'" << str << "'");  
 	LASSERT(use_regexp, /**/);
 	{

commit 809a063358ba6ee5ca2be27be111b0d605e0d723
Author: Jean-Marc Lasgouttes <lasgouttes@lyx.org>
Date:   Thu May 5 10:44:45 2022 +0200

    Avoid crash when extending word selection
    
    This happens when the cursor goes into a deeper inset, since
    selectWord() was called on the wrong Text object.
    
    Additionally, fix the new word selection when cursor goes before
    existing selection.
    
    Fixes bug #12529.

diff --git a/src/Text3.cpp b/src/Text3.cpp
index 185008b..f871bb3 100644
--- a/src/Text3.cpp
+++ b/src/Text3.cpp
@@ -1874,8 +1874,18 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
 				bvcur.resetAnchor();
 			if (!bv->mouseSetCursor(cur, cmd.modifier() == ShiftModifier))
 				cur.screenUpdateFlags(Update::SinglePar | Update::FitCursor);
-			if (bvcur.wordSelection())
-				selectWord(bvcur, WHOLE_WORD);
+			// FIXME: move this to mouseSetCursor?
+			if (bvcur.wordSelection() && bvcur.inTexted()) {
+				// select word around new position
+				Cursor c = bvcur;
+				c.selection(false);
+				c.text()->selectWord(c, WHOLE_WORD);
+				// use the correct word boundary, depending on selection direction
+				if (bvcur.top() > bvcur.normalAnchor())
+					bvcur.pos() = c.selEnd().pos();
+				else
+					bvcur.pos() = c.selBegin().pos();
+			}
 			break;
 
 		case mouse_button::button2:

commit 9f30de3c5dfc036d2b0b8e51dd935c6300fc7286
Author: Kornel Benko <kornel@lyx.org>
Date:   Wed May 4 15:59:57 2022 +0200

    FindAdv: Partly revert 02c7dbb8. Handle the space in Paragraph.cpp instead.

diff --git a/src/Paragraph.cpp b/src/Paragraph.cpp
index 434e515..df1d905 100644
--- a/src/Paragraph.cpp
+++ b/src/Paragraph.cpp
@@ -1213,22 +1213,31 @@ void Paragraph::Private::latexSpecialChar(otexstream & os,
 	    || contains(style.pass_thru_chars, c)
 	    || contains(runparams.pass_thru_chars, c)) {
 		if (runparams.for_search != OutputParams::NoSearch) {
-			if (c == '\\')
+			switch (c) {
+			case '\\':
 				os << "\\\\";
-			else if (c == '{')
+				return;
+			case '{':
 				os << "\\braceleft ";
-			else if (c == '}')
+				return;
+			case '}':
 				os << "\\braceright ";
-			else if (c != '\0')
+				return;
+			case ' ':
+			case '\0':
+				break;
+			default:
 				os.put(c);
+				return;
+			}
 		}
 		else if (c != '\0') {
 			Encoding const * const enc = runparams.encoding;
 			if (enc && !enc->encodable(c))
 				throw EncodingException(c);
 			os.put(c);
+			return;
 		}
-		return;
 	}
 
 	// TIPA uses its own T3 encoding
diff --git a/src/lyxfind.cpp b/src/lyxfind.cpp
index 2c14cbd..1334805 100644
--- a/src/lyxfind.cpp
+++ b/src/lyxfind.cpp
@@ -3138,28 +3138,6 @@ int LatexInfo::dispatch(ostringstream &os, int previousStart, \
KeyInfo &actual)  if (count > 0)
 					interval_.addIntervall(blk, blk+count);
 			}
-			bool blank_found = false;
-			// Removing invalid space between
-			// "item{description}[{...}]"
-			// and
-			// "\foreignlanguage{..}"
-			if (interval_.par[posdown+1] == ' ') {
-				if (posdown == interval_.par.size() -2)
-					blank_found = true;
-				else if (nextKeyIdx > 0) {
-					for (int i = nextKeyIdx; i < int(entries_.size()); i++) {
-						if (entries_[i]._tokenstart <= posdown)
-							continue;
-						if ((entries_[i].keytype == KeyInfo::isMain)
-							&& (entries_[i]._tokenstart == posdown +2)) {
-							blank_found = true;
-						}
-						break;
-					}
-				}
-			}
-			if (blank_found)
-				interval_.addIntervall(posdown+1, posdown+2);
 		}
 		break;
 	}

commit 02c7dbb824b8b1b61e0472336cb94c9be4aa674d
Author: Kornel Benko <kornel@lyx.org>
Date:   Tue May 3 16:31:52 2022 +0200

    FindAdv: Better handling of lists
    
    Still not optimal if searching different languages inside a list.

diff --git a/src/lyxfind.cpp b/src/lyxfind.cpp
index de512b8..2c14cbd 100644
--- a/src/lyxfind.cpp
+++ b/src/lyxfind.cpp
@@ -2736,9 +2736,14 @@ void LatexInfo::buildKeys(bool isPatternString)
 	// handle like standard keys with 1 parameter.
 	makeKey("url|href|vref|thanks", KeyInfo(KeyInfo::isStandard, 1, false), \
isPatternString);  
-	// Ignore deleted text
-	makeKey("lyxdeleted", KeyInfo(KeyInfo::doRemove, 3, false), isPatternString);
-	// but preserve added text
+	if (ignoreFormats.getDeleted()) {
+		// Ignore deleted text
+		makeKey("lyxdeleted", KeyInfo(KeyInfo::doRemove, 3, false), isPatternString);
+	}
+	else {
+		// but preserve added text
+		makeKey("lyxdeleted", KeyInfo(KeyInfo::doRemove, 2, false), isPatternString);
+	}
 	makeKey("lyxadded", KeyInfo(KeyInfo::doRemove, 2, false), isPatternString);
 
 	// Macros to remove, but let the parameter survive
@@ -3133,6 +3138,28 @@ int LatexInfo::dispatch(ostringstream &os, int previousStart, \
KeyInfo &actual)  if (count > 0)
 					interval_.addIntervall(blk, blk+count);
 			}
+			bool blank_found = false;
+			// Removing invalid space between
+			// "item{description}[{...}]"
+			// and
+			// "\foreignlanguage{..}"
+			if (interval_.par[posdown+1] == ' ') {
+				if (posdown == interval_.par.size() -2)
+					blank_found = true;
+				else if (nextKeyIdx > 0) {
+					for (int i = nextKeyIdx; i < int(entries_.size()); i++) {
+						if (entries_[i]._tokenstart <= posdown)
+							continue;
+						if ((entries_[i].keytype == KeyInfo::isMain)
+							&& (entries_[i]._tokenstart == posdown +2)) {
+							blank_found = true;
+						}
+						break;
+					}
+				}
+			}
+			if (blank_found)
+				interval_.addIntervall(posdown+1, posdown+2);
 		}
 		break;
 	}

commit f80ee027b3cceeaf780027ec317100717ffa5ab3
Author: jpc <jpc@lyx.org>
Date:   Mon May 2 18:43:16 2022 +0200

            Update fr.po

diff --git a/po/fr.gmo b/po/fr.gmo
index 453e4bd..41b0231 100644
Binary files a/po/fr.gmo and b/po/fr.gmo differ
diff --git a/po/fr.po b/po/fr.po
index 7e45a8f..23464b5 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -362,8 +362,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: LyX 2.4\n"
 "Report-Msgid-Bugs-To: lyx-devel@lists.lyx.org\n"
-"POT-Creation-Date: 2022-04-24 17:20+0200\n"
-"PO-Revision-Date: 2022-04-24 17:23+0200\n"
+"POT-Creation-Date: 2022-05-01 18:14+0200\n"
+"PO-Revision-Date: 2022-05-02 11:14+0200\n"
 "Last-Translator: Jean-Pierre Chrétien <jeanpierre.chretien@free.fr>\n"
 "Language-Team: lyxfr\n"
 "Language: fr\n"
@@ -1306,6 +1306,7 @@ msgid "Font Properties"
 msgstr "Propriétés des polices"
 
 #: src/frontends/qt/ui/CharacterUi.ui:36 src/frontends/qt/ui/CharacterUi.ui:55
+#: src/frontends/qt/ui/FindAndReplaceUi.ui:475
 msgid "Font family"
 msgstr "Famille de police"
 
@@ -1314,6 +1315,7 @@ msgid "Fa&mily:"
 msgstr "&Famille :"
 
 #: src/frontends/qt/ui/CharacterUi.ui:62 src/frontends/qt/ui/CharacterUi.ui:81
+#: src/frontends/qt/ui/FindAndReplaceUi.ui:447
 msgid "Font series"
 msgstr "Série de police"
 
@@ -1322,6 +1324,7 @@ msgid "&Series:"
 msgstr "&Série :"
 
 #: src/frontends/qt/ui/CharacterUi.ui:88 src/frontends/qt/ui/CharacterUi.ui:107
+#: src/frontends/qt/ui/FindAndReplaceUi.ui:510
 msgid "Font shape"
 msgstr "Forme de police"
 
@@ -1331,11 +1334,13 @@ msgstr "F&orme :"
 
 #: src/frontends/qt/ui/CharacterUi.ui:114
 #: src/frontends/qt/ui/CharacterUi.ui:133
+#: src/frontends/qt/ui/FindAndReplaceUi.ui:524
 msgid "Font size"
 msgstr "Taille de police"
 
 #: src/frontends/qt/ui/CharacterUi.ui:159
 #: src/frontends/qt/ui/CharacterUi.ui:178
+#: src/frontends/qt/ui/FindAndReplaceUi.ui:454
 msgid "Font color"
 msgstr "Couleur de police"
 
@@ -1369,12 +1374,14 @@ msgstr "Paramètres de langue"
 msgid "&Language:"
 msgstr "Lan&gue :"
 
-#: src/frontends/qt/ui/CharacterUi.ui:281 src/frontends/qt/ui/ListingsUi.ui:334
-#: lib/layouts/bicaption.module:16 lib/layouts/europasscv.layout:440
-#: lib/layouts/europasscv.layout:475 lib/layouts/europasscv.layout:482
-#: lib/layouts/europecv.layout:321 lib/layouts/europecv.layout:327
-#: lib/layouts/moderncv.layout:580 src/frontends/qt/GuiDocument.cpp:1781
-#: src/frontends/qt/GuiPrefs.cpp:2430 src/frontends/qt/Menus.cpp:938
+#: src/frontends/qt/ui/CharacterUi.ui:281
+#: src/frontends/qt/ui/FindAndReplaceUi.ui:482
+#: src/frontends/qt/ui/ListingsUi.ui:334 lib/layouts/bicaption.module:16
+#: lib/layouts/europasscv.layout:440 lib/layouts/europasscv.layout:475
+#: lib/layouts/europasscv.layout:482 lib/layouts/europecv.layout:321
+#: lib/layouts/europecv.layout:327 lib/layouts/moderncv.layout:580
+#: src/frontends/qt/GuiDocument.cpp:1781 src/frontends/qt/GuiPrefs.cpp:2430
+#: src/frontends/qt/Menus.cpp:938
 msgid "Language"
 msgstr "Langue"
 
@@ -1980,24 +1987,24 @@ msgid "Case &sensitive"
 msgstr "Selon la &casse"
 
 #: src/frontends/qt/ui/FindAndReplaceUi.ui:205
-#: src/frontends/qt/FindAndReplace.cpp:648
+#: src/frontends/qt/FindAndReplace.cpp:717
 msgid "Find next occurrence (Enter, backwards: Shift+Enter)"
 msgstr "Rechercher l'occurrence suivante (Entrée, vers l'arrière : Maj+Entrée)"
 
 #: src/frontends/qt/ui/FindAndReplaceUi.ui:208
-#: src/frontends/qt/ui/SearchUi.ui:190 src/frontends/qt/FindAndReplace.cpp:647
+#: src/frontends/qt/ui/SearchUi.ui:190 src/frontends/qt/FindAndReplace.cpp:716
 msgid "Find &>"
 msgstr "Rechercher &>"
 
 #: src/frontends/qt/ui/FindAndReplaceUi.ui:221
-#: src/frontends/qt/FindAndReplace.cpp:650
+#: src/frontends/qt/FindAndReplace.cpp:719
 msgid "Replace and find next occurrence (Enter, backwards: Shift+Enter)"
 msgstr ""
 "Remplacer et rechercher l'occurrence suivante (Entrée, vers l'arrière : Maj"
 "+Entrée)"
 
 #: src/frontends/qt/ui/FindAndReplaceUi.ui:224
-#: src/frontends/qt/FindAndReplace.cpp:649
+#: src/frontends/qt/FindAndReplace.cpp:718
 msgid "Rep&lace >"
 msgstr "&Remplacer >"
 
@@ -2050,31 +2057,19 @@ msgstr "Document &ouverts"
 msgid "&All manuals"
 msgstr "Tous les man&uels"
 
-#: src/frontends/qt/ui/FindAndReplaceUi.ui:370
+#: src/frontends/qt/ui/FindAndReplaceUi.ui:373
+msgid "E&xpand macros"
+msgstr "&Déployer les macros"
+
+#: src/frontends/qt/ui/FindAndReplaceUi.ui:380
 msgid "Restrict search to math environments only"
 msgstr "Restreindre la recherche aux seuls environnements mathématiques"
 
-#: src/frontends/qt/ui/FindAndReplaceUi.ui:373
+#: src/frontends/qt/ui/FindAndReplaceUi.ui:383
 msgid "Search on&ly in maths"
 msgstr "Rechercher uniquement dans les formules mat&hématiques"
 
-#: src/frontends/qt/ui/FindAndReplaceUi.ui:383
-msgid ""
-"If unchecked, the search will be limited to occurrences of the selected text "
-"and paragraph style"
-msgstr ""
-"Case non cochée, la recherche sera limitée aux occurrences du texte "
-"sélectionné et du style de paragraphe"
-
-#: src/frontends/qt/ui/FindAndReplaceUi.ui:386
-msgid "I&gnore format"
-msgstr "Ignorer le &format"
-
-#: src/frontends/qt/ui/FindAndReplaceUi.ui:399
-msgid "E&xpand macros"
-msgstr "&Déployer les macros"
-
-#: src/frontends/qt/ui/FindAndReplaceUi.ui:406
+#: src/frontends/qt/ui/FindAndReplaceUi.ui:390
 msgid ""
 "Keep the case of the replacement's first letter as in each matching text "
 "first letter"
@@ -2082,10 +2077,61 @@ msgstr ""
 "Conserver la casse de la première lettre du remplacement telle quelle dans "
 "chaque chaîne correspondante"
 
-#: src/frontends/qt/ui/FindAndReplaceUi.ui:409
+#: src/frontends/qt/ui/FindAndReplaceUi.ui:393
 msgid "&Preserve first case on replace"
 msgstr "&Préserver la casse du premier caractère lors du remplacement"
 
+#: src/frontends/qt/ui/FindAndReplaceUi.ui:413
+msgid "Do not search in content that is not output (e.g., notes)"
+msgstr "Ne pas rechercher dans les contenus non exportables (e.g., les notes)"
+
+#: src/frontends/qt/ui/FindAndReplaceUi.ui:416
+msgid "Ignore &non-output content"
+msgstr "Ignorer les &éléments non exportables"
+
+#: src/frontends/qt/ui/FindAndReplaceUi.ui:425
+msgid ""
+"If the search string is formatted in a non-default way, only find strings "
+"formatted like the search string in the checked respects"
+msgstr ""
+"Si la chaîne   rechercher est mise ne forme d'une manière non implicite, "
+"trouver seulement les chaînes mises en forme comme la chaîne   rechercher "
+"pour le rubriques cochées"
+
+#: src/frontends/qt/ui/FindAndReplaceUi.ui:428
+msgid "Ad&here to search string formatting of"
+msgstr "&Appliquer la mise en forme de la chaîne recherchée pour"
+
+#: src/frontends/qt/ui/FindAndReplaceUi.ui:440
+msgid "Strike-through"
+msgstr "Rayé"
+
+#   revoir, accord avec les autres mots incertain
+# Pas nécessaire (JPC)
+#: src/frontends/qt/ui/FindAndReplaceUi.ui:461
+msgid "Emph/noun"
+msgstr "En évidence/nom propre"
+
+#: src/frontends/qt/ui/FindAndReplaceUi.ui:468
+msgid "Deselect all"
+msgstr "Tout désélectionner"
+
+#: src/frontends/qt/ui/FindAndReplaceUi.ui:489
+msgid "Sectioning markup"
+msgstr "Balisage de sectionnement"
+
+#: src/frontends/qt/ui/FindAndReplaceUi.ui:496
+msgid "Deletion (change)"
+msgstr "Suppression (modifié)"
+
+#: src/frontends/qt/ui/FindAndReplaceUi.ui:503
+msgid "Underlining"
+msgstr "Souligné"
+
+#: src/frontends/qt/ui/FindAndReplaceUi.ui:517
+msgid "Select all"
+msgstr "Tout sélectionner"
+
 #: src/frontends/qt/ui/FloatPlacementUi.ui:14
 #: src/frontends/qt/ui/OutputUi.ui:14 src/frontends/qt/ui/PDFSupportUi.ui:14
 msgid "Form"
@@ -5618,7 +5664,7 @@ msgstr "Sans préfixe"
 msgid "Find previous occurrence (Shift+Enter)"
 msgstr "Rechercher l'occurrence précédente (Maj+Entrée)"
 
-#: src/frontends/qt/ui/SearchUi.ui:55 src/frontends/qt/FindAndReplace.cpp:642
+#: src/frontends/qt/ui/SearchUi.ui:55 src/frontends/qt/FindAndReplace.cpp:711
 msgid "&< Find"
 msgstr "&< Rechercher"
 
@@ -31294,15 +31340,15 @@ msgstr ""
 
 #: src/VCBackend.cpp:1522 src/VCBackend.cpp:1526
 #: src/frontends/qt/FindAndReplace.cpp:381 src/frontends/qt/GuiPrefs.cpp:1895
-#: src/lyxfind.cpp:310 src/lyxfind.cpp:337 src/lyxfind.cpp:358
-#: src/lyxfind.cpp:701 src/lyxfind.cpp:729
+#: src/lyxfind.cpp:317 src/lyxfind.cpp:344 src/lyxfind.cpp:365
+#: src/lyxfind.cpp:708 src/lyxfind.cpp:736
 msgid "&Yes"
 msgstr "&Oui"
 
 #: src/VCBackend.cpp:1522 src/VCBackend.cpp:1526
 #: src/frontends/qt/FindAndReplace.cpp:381 src/frontends/qt/GuiPrefs.cpp:1895
-#: src/lyxfind.cpp:310 src/lyxfind.cpp:337 src/lyxfind.cpp:358
-#: src/lyxfind.cpp:701 src/lyxfind.cpp:729
+#: src/lyxfind.cpp:317 src/lyxfind.cpp:344 src/lyxfind.cpp:365
+#: src/lyxfind.cpp:708 src/lyxfind.cpp:736
 msgid "&No"
 msgstr "&Non"
 
@@ -31507,8 +31553,8 @@ msgstr "Recherche avancée en cours (appuyer sur ESC pour \
annuler) . . ."  msgid "Advanced search cancelled by user"
 msgstr "Recherche avancée annulée par l'utilisateur"
 
-#: src/frontends/qt/FindAndReplace.cpp:380 src/lyxfind.cpp:357
-#: src/lyxfind.cpp:700 src/lyxfind.cpp:728
+#: src/frontends/qt/FindAndReplace.cpp:380 src/lyxfind.cpp:364
+#: src/lyxfind.cpp:707 src/lyxfind.cpp:735
 msgid "Wrap search?"
 msgstr "Recherche récursive ?"
 
@@ -31516,23 +31562,23 @@ msgstr "Recherche récursive ?"
 msgid "Nothing to search"
 msgstr "Rien   rechercher"
 
-#: src/frontends/qt/FindAndReplace.cpp:479
+#: src/frontends/qt/FindAndReplace.cpp:519
 msgid "No open document(s) in which to search"
 msgstr "Aucun document ouvert dans lequel rechercher"
 
-#: src/frontends/qt/FindAndReplace.cpp:588
+#: src/frontends/qt/FindAndReplace.cpp:657
 msgid "Advanced Find and Replace"
 msgstr "Rechercher et remplacer (élaboré)"
 
-#: src/frontends/qt/FindAndReplace.cpp:643
+#: src/frontends/qt/FindAndReplace.cpp:712
 msgid "Find previous occurrence (Shift+Enter, forwards: Enter)"
 msgstr "Trouver l'occurrence précédente (Maj+Entrée, vers l'avant : Entrée)"
 
-#: src/frontends/qt/FindAndReplace.cpp:644
+#: src/frontends/qt/FindAndReplace.cpp:713
 msgid "< Rep&lace"
 msgstr "< &Remplacer"
 
-#: src/frontends/qt/FindAndReplace.cpp:645
+#: src/frontends/qt/FindAndReplace.cpp:714
 msgid "Replace and find previous occurrence (Shift+Enter, forwards: Enter)"
 msgstr ""
 "Remplacer et rechercher l'occurrence précédente (Maj+Entrée, vers l'avant : "
@@ -37331,15 +37377,15 @@ msgstr "Aperçu prêt"
 msgid "Preview failed"
 msgstr "Échec de l'aperçu"
 
-#: src/lyxfind.cpp:275
+#: src/lyxfind.cpp:282
 msgid "Search error"
 msgstr "Erreur de recherche"
 
-#: src/lyxfind.cpp:275
+#: src/lyxfind.cpp:282
 msgid "Search string is empty"
 msgstr "La chaîne de caractères   chercher est vide"
 
-#: src/lyxfind.cpp:307
+#: src/lyxfind.cpp:314
 msgid ""
 "The search string matches the selection, and search is limited to "
 "selection.\n"
@@ -37349,11 +37395,11 @@ msgstr ""
 "  la sélection.\n"
 "Continuer   chercher en dehors?"
 
-#: src/lyxfind.cpp:309 src/lyxfind.cpp:336
+#: src/lyxfind.cpp:316 src/lyxfind.cpp:343
 msgid "Search outside selection?"
 msgstr "Rechercher en-dehors de la sélection ?"
 
-#: src/lyxfind.cpp:334
+#: src/lyxfind.cpp:341
 msgid ""
 "The search string was not found within the selection.\n"
 "Continue search outside?"
@@ -37361,7 +37407,7 @@ msgstr ""
 "La chaîne recherchée n'a pas été trouvée dans la sélection.\n"
 "Continuer   chercher en-dehors ?"
 
-#: src/lyxfind.cpp:352 src/lyxfind.cpp:698
+#: src/lyxfind.cpp:359 src/lyxfind.cpp:705
 msgid ""
 "End of file reached while searching forward.\n"
 "Continue searching from the beginning?"
@@ -37369,7 +37415,7 @@ msgstr ""
 "Fin du fichier atteinte lors de la recherche en avant.\n"
 "Continuer la recherche depuis le début ?"
 
-#: src/lyxfind.cpp:355 src/lyxfind.cpp:726
+#: src/lyxfind.cpp:362 src/lyxfind.cpp:733
 msgid ""
 "Beginning of file reached while searching backward.\n"
 "Continue searching from the end?"
@@ -37377,63 +37423,63 @@ msgstr ""
 "Début du fichier atteint lors de la recherche en arrière.\n"
 "Continuer la recherche depuis la fin ?"
 
-#: src/lyxfind.cpp:371
+#: src/lyxfind.cpp:378
 msgid "Search reached end of document, continuing from beginning."
 msgstr "Fin du document atteinte, la recherche continue   partir du début."
 
-#: src/lyxfind.cpp:372
+#: src/lyxfind.cpp:379
 msgid "Search reached beginning of document, continuing from end."
 msgstr ""
 "La recherche a atteint le début du document, elle continue depuis la fin."
 
-#: src/lyxfind.cpp:671
+#: src/lyxfind.cpp:678
 msgid "String not found in selection."
 msgstr "Chaîne de caractères introuvable dans le sélection."
 
-#: src/lyxfind.cpp:673
+#: src/lyxfind.cpp:680
 msgid "String not found."
 msgstr "Chaîne de caractères introuvable."
 
-#: src/lyxfind.cpp:676
+#: src/lyxfind.cpp:683
 msgid "String found."
 msgstr "Chaîne de caractères trouvée."
 
-#: src/lyxfind.cpp:678
+#: src/lyxfind.cpp:685
 msgid "String has been replaced."
 msgstr "Chaîne remplacée."
 
-#: src/lyxfind.cpp:681
+#: src/lyxfind.cpp:688
 #, c-format
 msgid "%1$d strings have been replaced in the selection."
 msgstr "%1$d chaînes remplacées dans le sélection."
 
-#: src/lyxfind.cpp:682
+#: src/lyxfind.cpp:689
 #, c-format
 msgid "%1$d strings have been replaced."
 msgstr "%1$d chaînes remplacées."
 
-#: src/lyxfind.cpp:4679
+#: src/lyxfind.cpp:4683
 msgid "One match has been replaced."
 msgstr "Une correspondance a été remplacée."
 
-#: src/lyxfind.cpp:4682
+#: src/lyxfind.cpp:4686
 msgid "Two matches have been replaced."
 msgstr "Deux correspondances ont été remplacées."
 
-#: src/lyxfind.cpp:4685
+#: src/lyxfind.cpp:4689
 #, c-format
 msgid "%1$d matches have been replaced."
 msgstr "%1$d correspondances ont été remplacées."
 
-#: src/lyxfind.cpp:4691
+#: src/lyxfind.cpp:4695
 msgid "Match not found."
 msgstr "Chaîne de caractères introuvable."
 
-#: src/lyxfind.cpp:4697
+#: src/lyxfind.cpp:4701
 msgid "Match has been replaced."
 msgstr "Chaîne de caractères remplacée."
 
-#: src/lyxfind.cpp:4699
+#: src/lyxfind.cpp:4703
 msgid "Match found."
 msgstr "Chaîne de caractères reconnue."
 
@@ -38037,6 +38083,16 @@ msgstr ""
 msgid "Unknown user"
 msgstr "Utilisateur inconnu"
 
+#~ msgid ""
+#~ "If unchecked, the search will be limited to occurrences of the selected "
+#~ "text and paragraph style"
+#~ msgstr ""
+#~ "Case non cochée, la recherche sera limitée aux occurrences du texte "
+#~ "sélectionné et du style de paragraphe"
+
+#~ msgid "I&gnore format"
+#~ msgstr "Ignorer le &format"
+
 #~ msgid "foot"
 #~ msgstr "bas"
 
@@ -39277,9 +39333,6 @@ msgstr "Utilisateur inconnu"
 #~ msgid " (version control)"
 #~ msgstr " (contrôle de version)"
 
-#~ msgid " (changed)"
-#~ msgstr " (modifié)"
-
 #~ msgid " (read only)"
 #~ msgstr " (en lecture seule)"
 

commit 6a70a26a4aa2846bbe04048fed4121e817fc4fd9
Author: Kornel Benko <kornel@lyx.org>
Date:   Sun May 1 16:03:45 2022 +0200

    FindAdv: Debug messages

diff --git a/src/lyxfind.cpp b/src/lyxfind.cpp
index ee92523..de512b8 100644
--- a/src/lyxfind.cpp
+++ b/src/lyxfind.cpp
@@ -3934,7 +3934,7 @@ string MatchStringAdv::normalize(docstring const & s, bool \
ignore_format) const  while (regex_replace(t, t, \
"\\\\(emph|noun|text(bf|sl|sf|it|tt)|(u|uu)line|(s|x)out|uwave)(\\{(\\{\\})?\\})+", \
""))  LYXERR(Debug::FINDVERBOSE, "  further removing stale empty \\emph{}, \\textbf{} \
macros from: " << t);  while (regex_replace(t, t, \
                "\\\\((sub)?(((sub)?section)|paragraph)|part)\\*?(\\{(\\{\\})?\\})+", \
                ""))
-		LYXERR(Debug::FINDVERBOSE, "  further removing stale empty \\emph{}, \\textbf{} \
macros from: " << t); +		LYXERR(Debug::FINDVERBOSE, "  further removing stale empty \
\\section{}, \\part{}, \\paragraph{} macros from: " << t);  while (regex_replace(t, \
t, "\\\\(foreignlanguage|textcolor|item)\\{[a-z]+\\}(\\{(\\{\\})?\\})+", ""));  
 	return t;
@@ -3970,7 +3970,7 @@ docstring stringifyFromCursor(DocIterator const & cur, int len)
 		docstring res = from_utf8(latexNamesToUtf8(par.asString(cur.pos(), end,
 								        option,
 								        &runparams)));
-		LYXERR(Debug::FIND, "Stringified text from pos(" << cur.pos() << ") len(" << len \
<< "): " << res); +		LYXERR(Debug::FINDVERBOSE|Debug::FIND, "Stringified text from \
pos(" << cur.pos() << ") len(" << len << "): " << res);  return res;
 	} else if (cur.inMathed()) {
 		CursorSlice cs = cur.top();
@@ -4026,7 +4026,7 @@ docstring latexifyFromCursor(DocIterator const & cur, int len)
 			endpos = cur.pos() + len;
 		TeXOnePar(buf, *cur.innerText(), cur.pit(), os, runparams,
 			  string(), cur.pos(), endpos, true);
-		LYXERR(Debug::FIND, "Latexified text from pos(" << cur.pos() << ") len(" << len << \
"): " << ods.str()); +		LYXERR(Debug::FINDVERBOSE|Debug::FIND, "Latexified text from \
pos(" << cur.pos() << ") len(" << len << "): " << ods.str());  return(ods.str());
 	} else if (cur.inMathed()) {
 		// Retrieve the math environment type, and add '$' or '$[' or others \
(\begin{equation}) accordingly

commit aec76acecc835920cfdd5ce0bdcd8c012d70f75e
Author: Kornel Benko <kornel@lyx.org>
Date:   Sun May 1 10:34:12 2022 +0200

    Small addition concerning advanced find and regular expression

diff --git a/lib/doc/UserGuide.lyx b/lib/doc/UserGuide.lyx
index 30a6ad3..493e6d2 100644
--- a/lib/doc/UserGuide.lyx
+++ b/lib/doc/UserGuide.lyx
@@ -165,6 +165,7 @@ logicalmkup
 \author 5863344 "Enrico Forestieri"
 \author 244031559 "Yuriy"
 \author 630872221 "Jean-Pierre Chrétien" jeanpierre.chretien@free.fr
+\author 1549938239 "Kornel Benko"
 \author 1675569489 "Stephan Witt"
 \end_header
 
@@ -8973,14 +8974,12 @@ Verbatim
 \end_layout
 
 \begin_layout Verbatim
-
 This is Verbatim.
 \end_layout
 
 \begin_layout Verbatim
 \noindent
 \align block
-
 The following 2 lines are empty:
 \end_layout
 
@@ -8993,7 +8992,6 @@ The following 2 lines are empty:
 \end_layout
 
 \begin_layout Verbatim
-
 Almost everything is allowed in Verbatim:"%&$ #~'`
 \backslash
 }][{|
@@ -9017,7 +9015,6 @@ Verbatim
 \end_layout
 
 \begin_layout Verbatim*
-
 This is Verbatim*.
 \end_layout
 
@@ -38775,7 +38772,7 @@ R
 .
 \end_layout
 
-\begin_layout Subsection
+\begin_layout Subsubsection
 Advanced usage
 \end_layout
 
@@ -38863,12 +38860,25 @@ Find
 \end_layout
 
 \begin_layout Enumerate
-Searching for all text with a given style: for example, after unchecking
- the 
+Searching for all text with a given style: for example, after 
+\change_deleted 1549938239 1651390777
+un
+\change_unchanged
+checking the 
+\change_inserted 1549938239 1651390710
+
 \family sans
+'Adhere to search string formatting of'
+\change_deleted 1549938239 1651390724
 Ignore format
+\change_unchanged
+
 \family default
- option from the 
+ 
+\change_inserted 1549938239 1651390961
+and the 'Select all' 
+\change_unchanged
+option from the 
 \family sans
 Settings
 \family default
@@ -38888,8 +38898,109 @@ Settings
 
  regular expression in a bullet or enumerated list or a section heading,
  you can find all bullet or enumerated lists or section headings.
+
+\change_inserted 1549938239 1651391772
+ The meaning of the specific style options (if checked) is as follows:
+\end_layout
+
+\begin_deeper
+\begin_layout Description
+
+\change_inserted 1549938239 1651391862
+Language Allows searching for text in specific language
 \end_layout
 
+\begin_layout Description
+
+\change_inserted 1549938239 1651392163
+Font
+\begin_inset space ~
+\end_inset
+
+color colored text like cyan, yellow, etc
+\end_layout
+
+\begin_layout Description
+
+\change_inserted 1549938239 1651392038
+Font
+\begin_inset space ~
+\end_inset
+
+family Roman, Sans serif, Typewriter
+\end_layout
+
+\begin_layout Description
+
+\change_inserted 1549938239 1651392204
+Font
+\begin_inset space ~
+\end_inset
+
+series e.g.
+ Bold
+\end_layout
+
+\begin_layout Description
+
+\change_inserted 1549938239 1651392249
+Font
+\begin_inset space ~
+\end_inset
+
+shape e.g.
+ upright, italic, ...
+\end_layout
+
+\begin_layout Description
+
+\change_inserted 1549938239 1651392299
+Font
+\begin_inset space ~
+\end_inset
+
+size e.g.
+ Large, Tiny, ...
+\end_layout
+
+\begin_layout Description
+
+\change_inserted 1549938239 1651392343
+Emph/noun Semantic Markup: Emphasized, Noun
+\end_layout
+
+\begin_layout Description
+
+\change_inserted 1549938239 1651392414
+Underlining e.g.
+ Single, Double, Wawy
+\end_layout
+
+\begin_layout Description
+
+\change_inserted 1549938239 1651392503
+Strike-through Single, With '/'
+\end_layout
+
+\begin_layout Description
+
+\change_inserted 1549938239 1651392776
+Deletion searches also in deleted parts (in case of 'Track Changes' enabled)
+\end_layout
+
+\begin_layout Description
+
+\change_inserted 1549938239 1651392891
+Sectioning
+\begin_inset space ~
+\end_inset
+
+markup e.g.
+ title, part, chapter, section, ...
+ 
+\end_layout
+
+\end_deeper
 \begin_layout Standard
 Finally, references to (sub)expressions in regexp may be used as usual:
  Enclosing parts of the expression within round braces 
@@ -38909,9 +39020,25 @@ Finally, references to (sub)expressions in regexp may be \
used as usual:  \begin_inset Newline newline
 \end_inset
 
+
+\change_inserted 1549938239 1651393222
+
+\backslash
+b(
+\backslash
+w+)
+\backslash
+s
+\backslash
+1
+\backslash
+b
+\change_deleted 1549938239 1651393089
 [[:space:]]([[:alpha:]]+)[[:space:]]
 \backslash
 1[[:space:]]
+\change_unchanged
+
 \begin_inset Newline newline
 \end_inset
 
@@ -38919,7 +39046,11 @@ in order to find word repetitions, if there are any.
 \end_layout
 
 \begin_layout Standard
-The usage of back references in the replaced text is not (yet) implemented.
+The usage of back references in the replaced text is not (yet) 
+\change_inserted 1549938239 1651393403
+fully 
+\change_unchanged
+implemented.
 \end_layout
 
 \begin_layout Standard
diff --git a/lib/ui/stdcontext.inc b/lib/ui/stdcontext.inc
index ed9a9da..a9b73cb 100644
--- a/lib/ui/stdcontext.inc
+++ b/lib/ui/stdcontext.inc
@@ -414,7 +414,7 @@ Menuset
 	Menu "context-edit-regexp"
 		Item "Anything|A" "command-sequence regexp-mode; self-insert .*"
 		Item "Anything Non-Empty|o" "command-sequence regexp-mode; self-insert .+"
-		Item "Any Word|W" "command-sequence regexp-mode; self-insert [a-z]+"
+		Item "Any Word|W" "command-sequence regexp-mode; self-insert \w+"
 		Item "Any Number|N" "command-sequence regexp-mode; self-insert [0-9]+"
 		Item "User Defined|U" "regexp-mode"
 	End

commit 32367d3dc559e139d8ef310c5d70e9450a2515c3
Author: Kornel Benko <kornel@lyx.org>
Date:   Sat Apr 30 20:00:38 2022 +0200

    Update sk.po

diff --git a/po/sk.po b/po/sk.po
index 959591a..a5c177d 100644
--- a/po/sk.po
+++ b/po/sk.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: LyX-2.4\n"
 "Report-Msgid-Bugs-To: lyx-devel@lists.lyx.org\n"
-"POT-Creation-Date: 2022-04-24 17:25+0200\n"
-"PO-Revision-Date: 2022-04-24 15:29+0000\n"
+"POT-Creation-Date: 2022-04-30 19:26+0200\n"
+"PO-Revision-Date: 2022-04-30 17:57+0000\n"
 "Last-Translator: Kornel Benko <kornel@lyx.org>\n"
 "Language-Team: Slovak <kornel@lyx.org>\n"
 "Language: sk\n"
@@ -980,7 +980,7 @@ msgstr "&Farba:"
 
 #: src/frontends/qt/ui/CharacterUi.ui:185
 msgid "U&nderlining:"
-msgstr "Po&dčiarnutie:"
+msgstr "Po&dčiarknutie:"
 
 #: src/frontends/qt/ui/CharacterUi.ui:201
 msgid "Underlining of text"
@@ -1679,18 +1679,6 @@ msgstr "Obmedziť hľadanie na mat. prostredia"
 msgid "Search on&ly in maths"
 msgstr "Prehľadať len mat. vzork&y"
 
-#: src/frontends/qt/ui/FindAndReplaceUi.ui:383
-msgid ""
-"If unchecked, the search will be limited to occurrences of the selected text "
-"and paragraph style"
-msgstr ""
-"Keď nezaškrtnuté, hľadanie je ohraničené len na výskyty v označenom texte a \
                "
-"v štýle odstavca"
-
-#: src/frontends/qt/ui/FindAndReplaceUi.ui:386
-msgid "I&gnore format"
-msgstr "&Ignorovať formát"
-
 #: src/frontends/qt/ui/FindAndReplaceUi.ui:399
 msgid "E&xpand macros"
 msgstr "&Rozvinúť makrá"
@@ -1705,6 +1693,54 @@ msgstr "Udržovať veľkosť prvých písiem v slove tak, ako \
v nájdenom texte"  msgid "&Preserve first case on replace"
 msgstr "&Zachovať veľkosť prvých písiem"
 
+#: src/frontends/qt/ui/FindAndReplaceUi.ui:413
+msgid "Do not search in content that is not output (e.g., notes)"
+msgstr "Nehľadať v častiach dokumentu ktoré nebudú vo výstupe (napr. \
poznámky)" +
+#: src/frontends/qt/ui/FindAndReplaceUi.ui:416
+msgid "Ignore &non-output content"
+msgstr "&Ignorovať prvky bez výstupu"
+
+#: src/frontends/qt/ui/FindAndReplaceUi.ui:425
+msgid ""
+"If the search string is formatted in a non-default way, only find strings "
+"formatted like the search string in the checked respects"
+msgstr ""
+"Reťazec formátovaný na ne-štandardný spôsob nájde reťazce s príznačne "
+"zaškrtnutými vlastnosťami"
+
+#: src/frontends/qt/ui/FindAndReplaceUi.ui:428
+msgid "Ad&here to search string formatting of"
+msgstr "Dr&žať hľadaný reťazec s vlastnosťou pre"
+
+#: src/frontends/qt/ui/FindAndReplaceUi.ui:440
+msgid "Strike-through"
+msgstr "preškrtanie"
+
+#: src/frontends/qt/ui/FindAndReplaceUi.ui:461
+msgid "Emph/noun"
+msgstr "dôraz/meno"
+
+#: src/frontends/qt/ui/FindAndReplaceUi.ui:468
+msgid "Deselect all"
+msgstr "Vypnúť všetko"
+
+#: src/frontends/qt/ui/FindAndReplaceUi.ui:489
+msgid "Sectioning markup"
+msgstr "značkovanie členenia"
+
+#: src/frontends/qt/ui/FindAndReplaceUi.ui:496
+msgid "Deletion (change)"
+msgstr "vymazanie (zmena)"
+
+#: src/frontends/qt/ui/FindAndReplaceUi.ui:503
+msgid "Underlining"
+msgstr "podčiarknutie"
+
+#: src/frontends/qt/ui/FindAndReplaceUi.ui:517
+msgid "Select all"
+msgstr "Vybrať všetko"
+
 #: src/frontends/qt/ui/FloatPlacementUi.ui:14
 #: src/frontends/qt/ui/OutputUi.ui:14 src/frontends/qt/ui/PDFSupportUi.ui:14
 msgid "Form"
@@ -37322,6 +37358,16 @@ msgstr ""
 msgid "Unknown user"
 msgstr "Neznámy používateľ"
 
+#~ msgid "I&gnore formatting"
+#~ msgstr "&Ignorovať formát"
+
+#~ msgid ""
+#~ "If unchecked, the search will be limited to occurrences of the selected "
+#~ "text and paragraph style"
+#~ msgstr ""
+#~ "Keď nezaškrtnuté, hľadanie je ohraničené len na výskyty v označenom \
texte " +#~ "a v štýle odstavca"
+
 #~ msgid "Find and replace mechanism"
 #~ msgstr "Mechanizmus hľadať a nahradiť"
 
@@ -42762,3 +42808,6 @@ msgstr "Neznámy používateľ"
 
 #~ msgid "Set inner lines"
 #~ msgstr "Nastaviť vnútorné čiary"
+
+#~ msgid "I&gnore format"
+#~ msgstr "&Ignorovať formát"

commit 4655792bda39495ff920a1b34b8172d19eab5f86
Author: Juergen Spitzmueller <spitz@lyx.org>
Date:   Sat Apr 30 17:52:09 2022 +0200

    de.po

diff --git a/po/de.gmo b/po/de.gmo
index 0173826..61a1b81 100644
Binary files a/po/de.gmo and b/po/de.gmo differ
diff --git a/po/de.po b/po/de.po
index 517d75b..e13633c 100644
--- a/po/de.po
+++ b/po/de.po
@@ -94,15 +94,15 @@ msgid ""
 msgstr ""
 "Project-Id-Version: LyX 2.4git\n"
 "Report-Msgid-Bugs-To: lyx-devel@lists.lyx.org\n"
-"POT-Creation-Date: 2022-04-24 16:54+0200\n"
-"PO-Revision-Date: 2022-04-24 17:05+0200\n"
+"POT-Creation-Date: 2022-04-30 17:39+0200\n"
+"PO-Revision-Date: 2022-04-30 17:50+0200\n"
 "Last-Translator: Jürgen Spitzmüller <spitz@lyx.org>\n"
 "Language-Team: Deutsch <lyx-docs@lists.lyx.org>\n"
 "Language: de\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Gtranslator 41.0\n"
+"X-Generator: Gtranslator 42.0\n"
 "Plural-Forms: nplurals=2; plural=n != 1;\n"
 
 #: src/frontends/qt/ui/AboutUi.ui:27
@@ -1037,6 +1037,7 @@ msgid "Font Properties"
 msgstr "Schrifteigenschaften"
 
 #: src/frontends/qt/ui/CharacterUi.ui:36 src/frontends/qt/ui/CharacterUi.ui:55
+#: src/frontends/qt/ui/FindAndReplaceUi.ui:475
 msgid "Font family"
 msgstr "Schriftfamilie"
 
@@ -1045,6 +1046,7 @@ msgid "Fa&mily:"
 msgstr "&Familie:"
 
 #: src/frontends/qt/ui/CharacterUi.ui:62 src/frontends/qt/ui/CharacterUi.ui:81
+#: src/frontends/qt/ui/FindAndReplaceUi.ui:447
 msgid "Font series"
 msgstr "Strichstärke"
 
@@ -1053,6 +1055,7 @@ msgid "&Series:"
 msgstr "S&trichstärke:"
 
 #: src/frontends/qt/ui/CharacterUi.ui:88 src/frontends/qt/ui/CharacterUi.ui:107
+#: src/frontends/qt/ui/FindAndReplaceUi.ui:510
 msgid "Font shape"
 msgstr "Schriftschnitt"
 
@@ -1062,11 +1065,13 @@ msgstr "Sch&nitt:"
 
 #: src/frontends/qt/ui/CharacterUi.ui:114
 #: src/frontends/qt/ui/CharacterUi.ui:133
+#: src/frontends/qt/ui/FindAndReplaceUi.ui:524
 msgid "Font size"
 msgstr "Schriftgrad"
 
 #: src/frontends/qt/ui/CharacterUi.ui:159
 #: src/frontends/qt/ui/CharacterUi.ui:178
+#: src/frontends/qt/ui/FindAndReplaceUi.ui:454
 msgid "Font color"
 msgstr "Schriftfarbe"
 
@@ -1100,12 +1105,14 @@ msgstr "Spracheinstellungen"
 msgid "&Language:"
 msgstr "S&prache:"
 
-#: src/frontends/qt/ui/CharacterUi.ui:281 src/frontends/qt/ui/ListingsUi.ui:334
-#: lib/layouts/bicaption.module:16 lib/layouts/europasscv.layout:440
-#: lib/layouts/europasscv.layout:475 lib/layouts/europasscv.layout:482
-#: lib/layouts/europecv.layout:321 lib/layouts/europecv.layout:327
-#: lib/layouts/moderncv.layout:580 src/frontends/qt/GuiDocument.cpp:1781
-#: src/frontends/qt/GuiPrefs.cpp:2430 src/frontends/qt/Menus.cpp:938
+#: src/frontends/qt/ui/CharacterUi.ui:281
+#: src/frontends/qt/ui/FindAndReplaceUi.ui:482
+#: src/frontends/qt/ui/ListingsUi.ui:334 lib/layouts/bicaption.module:16
+#: lib/layouts/europasscv.layout:440 lib/layouts/europasscv.layout:475
+#: lib/layouts/europasscv.layout:482 lib/layouts/europecv.layout:321
+#: lib/layouts/europecv.layout:327 lib/layouts/moderncv.layout:580
+#: src/frontends/qt/GuiDocument.cpp:1781 src/frontends/qt/GuiPrefs.cpp:2430
+#: src/frontends/qt/Menus.cpp:938
 msgid "Language"
 msgstr "Sprache"
 
@@ -1713,25 +1720,25 @@ msgid "Case &sensitive"
 msgstr "&Groß-/Kleinschreibung beachten"
 
 #: src/frontends/qt/ui/FindAndReplaceUi.ui:205
-#: src/frontends/qt/FindAndReplace.cpp:648
+#: src/frontends/qt/FindAndReplace.cpp:717
 msgid "Find next occurrence (Enter, backwards: Shift+Enter)"
 msgstr ""
 "Suche nächsten Treffer (Eingabetaste; rückwärts: Umschalt+Eingabetaste)"
 
 #: src/frontends/qt/ui/FindAndReplaceUi.ui:208
-#: src/frontends/qt/ui/SearchUi.ui:190 src/frontends/qt/FindAndReplace.cpp:647
+#: src/frontends/qt/ui/SearchUi.ui:190 src/frontends/qt/FindAndReplace.cpp:716
 msgid "Find &>"
 msgstr "Suchen &>"
 
 #: src/frontends/qt/ui/FindAndReplaceUi.ui:221
-#: src/frontends/qt/FindAndReplace.cpp:650
+#: src/frontends/qt/FindAndReplace.cpp:719
 msgid "Replace and find next occurrence (Enter, backwards: Shift+Enter)"
 msgstr ""
 "Ersetze und suche nächsten Treffer (Eingabetaste; rückwärts: Umschalt"
 "+Eingabetaste)"
 
 #: src/frontends/qt/ui/FindAndReplaceUi.ui:224
-#: src/frontends/qt/FindAndReplace.cpp:649
+#: src/frontends/qt/FindAndReplace.cpp:718
 msgid "Rep&lace >"
 msgstr "Erse&tzen >"
 
@@ -1782,31 +1789,19 @@ msgstr "&Geöffnete Dokumente"
 msgid "&All manuals"
 msgstr "&Alle LyX-Handbücher"
 
-#: src/frontends/qt/ui/FindAndReplaceUi.ui:370
+#: src/frontends/qt/ui/FindAndReplaceUi.ui:373
+msgid "E&xpand macros"
+msgstr "Mak&ros ausklappen"
+
+#: src/frontends/qt/ui/FindAndReplaceUi.ui:380
 msgid "Restrict search to math environments only"
 msgstr "Suche auf die Mathe-Umgebung beschränken"
 
-#: src/frontends/qt/ui/FindAndReplaceUi.ui:373
+#: src/frontends/qt/ui/FindAndReplaceUi.ui:383
 msgid "Search on&ly in maths"
 msgstr "Nur im Ma&the-Umfeld"
 
-#: src/frontends/qt/ui/FindAndReplaceUi.ui:383
-msgid ""
-"If unchecked, the search will be limited to occurrences of the selected text "
-"and paragraph style"
-msgstr ""
-"Wenn Sie dies deaktivieren, wird die Suche nur auf Vorkommen beschränkt, die "
-"die den ausgewählten Text- und Absatzstil verwenden."
-
-#: src/frontends/qt/ui/FindAndReplaceUi.ui:386
-msgid "I&gnore format"
-msgstr "Ignoriere For&mat"
-
-#: src/frontends/qt/ui/FindAndReplaceUi.ui:399
-msgid "E&xpand macros"
-msgstr "Mak&ros ausklappen"
-
-#: src/frontends/qt/ui/FindAndReplaceUi.ui:406
+#: src/frontends/qt/ui/FindAndReplaceUi.ui:390
 msgid ""
 "Keep the case of the replacement's first letter as in each matching text "
 "first letter"
@@ -1814,10 +1809,60 @@ msgstr ""
 "Groß-/Kleinschreibung des ersten Buchstabens des gefundenen Textes "
 "beibehalten"
 
-#: src/frontends/qt/ui/FindAndReplaceUi.ui:409
+#: src/frontends/qt/ui/FindAndReplaceUi.ui:393
 msgid "&Preserve first case on replace"
 msgstr "Groß-/&Kleinschreibung bewahren"
 
+#: src/frontends/qt/ui/FindAndReplaceUi.ui:413
+msgid "Do not search in content that is not output (e.g., notes)"
+msgstr ""
+"Nicht nach Inhalten suchen, die nicht ausgegeben werden (bspw. Notizen)"
+
+#: src/frontends/qt/ui/FindAndReplaceUi.ui:416
+msgid "Ignore &non-output content"
+msgstr "&Nicht ausgegebene Inhalte ignorieren"
+
+#: src/frontends/qt/ui/FindAndReplaceUi.ui:425
+msgid ""
+"If the search string is formatted in a non-default way, only find strings "
+"formatted like the search string in the checked respects"
+msgstr ""
+"Wenn der Sucheintrag in einer von den Grundeinstellungen abweichenden Art "
+"und Weise formatiert ist, dann werden nur Zeichenketten gefunden, die in den "
+"Aspekten, die hier ausgewählt sind, wie der Sucheintrag formatiert sind."
+
+#: src/frontends/qt/ui/FindAndReplaceUi.ui:428
+msgid "Ad&here to search string formatting of"
+msgstr "Sucheintrags&formatierung beachten bzgl."
+
+#: src/frontends/qt/ui/FindAndReplaceUi.ui:440
+msgid "Strike-through"
+msgstr "Durchstreichung"
+
+#: src/frontends/qt/ui/FindAndReplaceUi.ui:461
+msgid "Emph/noun"
+msgstr "Hervorh./Eigenname"
+
+#: src/frontends/qt/ui/FindAndReplaceUi.ui:468
+msgid "Deselect all"
+msgstr "Alles auswählen"
+
+#: src/frontends/qt/ui/FindAndReplaceUi.ui:489
+msgid "Sectioning markup"
+msgstr "Überschriftenformat"
+
+#: src/frontends/qt/ui/FindAndReplaceUi.ui:496
+msgid "Deletion (change)"
+msgstr "Löschung (Änderungen)"
+
+#: src/frontends/qt/ui/FindAndReplaceUi.ui:503
+msgid "Underlining"
+msgstr "Unterstreichung"
+
+#: src/frontends/qt/ui/FindAndReplaceUi.ui:517
+msgid "Select all"
+msgstr "Alles auswählen"
+
 #: src/frontends/qt/ui/FloatPlacementUi.ui:14
 #: src/frontends/qt/ui/OutputUi.ui:14 src/frontends/qt/ui/PDFSupportUi.ui:14
 msgid "Form"
@@ -5341,7 +5386,7 @@ msgstr "Ohne Präfix"
 msgid "Find previous occurrence (Shift+Enter)"
 msgstr "Vorhergehender Treffer (Umschalt+Eingabe)"
 
-#: src/frontends/qt/ui/SearchUi.ui:55 src/frontends/qt/FindAndReplace.cpp:642
+#: src/frontends/qt/ui/SearchUi.ui:55 src/frontends/qt/FindAndReplace.cpp:711
 msgid "&< Find"
 msgstr "&< Suchen"
 
@@ -31020,15 +31065,15 @@ msgstr ""
 
 #: src/VCBackend.cpp:1522 src/VCBackend.cpp:1526
 #: src/frontends/qt/FindAndReplace.cpp:381 src/frontends/qt/GuiPrefs.cpp:1895
-#: src/lyxfind.cpp:310 src/lyxfind.cpp:337 src/lyxfind.cpp:358
-#: src/lyxfind.cpp:701 src/lyxfind.cpp:729
+#: src/lyxfind.cpp:317 src/lyxfind.cpp:344 src/lyxfind.cpp:365
+#: src/lyxfind.cpp:708 src/lyxfind.cpp:736
 msgid "&Yes"
 msgstr "&Ja"
 
 #: src/VCBackend.cpp:1522 src/VCBackend.cpp:1526
 #: src/frontends/qt/FindAndReplace.cpp:381 src/frontends/qt/GuiPrefs.cpp:1895
-#: src/lyxfind.cpp:310 src/lyxfind.cpp:337 src/lyxfind.cpp:358
-#: src/lyxfind.cpp:701 src/lyxfind.cpp:729
+#: src/lyxfind.cpp:317 src/lyxfind.cpp:344 src/lyxfind.cpp:365
+#: src/lyxfind.cpp:708 src/lyxfind.cpp:736
 msgid "&No"
 msgstr "&Nein"
 
@@ -31237,8 +31282,8 @@ msgstr "Erweiterte Suche läuft (drücken Sie ESC, um \
abzubrechen) ..."  msgid "Advanced search cancelled by user"
 msgstr "Erweiterte Suche durch den Benutzer abgebrochen"
 
-#: src/frontends/qt/FindAndReplace.cpp:380 src/lyxfind.cpp:357
-#: src/lyxfind.cpp:700 src/lyxfind.cpp:728
+#: src/frontends/qt/FindAndReplace.cpp:380 src/lyxfind.cpp:364
+#: src/lyxfind.cpp:707 src/lyxfind.cpp:735
 msgid "Wrap search?"
 msgstr "Von vorne suchen?"
 
@@ -31246,24 +31291,24 @@ msgstr "Von vorne suchen?"
 msgid "Nothing to search"
 msgstr "Nichts zum suchen"
 
-#: src/frontends/qt/FindAndReplace.cpp:479
+#: src/frontends/qt/FindAndReplace.cpp:519
 msgid "No open document(s) in which to search"
 msgstr "Keine Dokumente geöffnet, in denen gesucht werden kann"
 
-#: src/frontends/qt/FindAndReplace.cpp:588
+#: src/frontends/qt/FindAndReplace.cpp:657
 msgid "Advanced Find and Replace"
 msgstr "Erweitertes Suchen und Ersetzen"
 
-#: src/frontends/qt/FindAndReplace.cpp:643
+#: src/frontends/qt/FindAndReplace.cpp:712
 msgid "Find previous occurrence (Shift+Enter, forwards: Enter)"
 msgstr ""
 "Suche vorhergehenden Treffer (Umschalt+Eingabetaste; vorwärts: Eingabetaste)"
 
-#: src/frontends/qt/FindAndReplace.cpp:644
+#: src/frontends/qt/FindAndReplace.cpp:713
 msgid "< Rep&lace"
 msgstr "< Erse&tzen"
 
-#: src/frontends/qt/FindAndReplace.cpp:645
+#: src/frontends/qt/FindAndReplace.cpp:714
 msgid "Replace and find previous occurrence (Shift+Enter, forwards: Enter)"
 msgstr ""
 "Ersetze und suche vorhergehenden Treffer (Umschalt+Eingabetaste; vorwärts: "
@@ -37090,15 +37135,15 @@ msgstr "Vorschau bereit"
 msgid "Preview failed"
 msgstr "Die Vorschau ist fehlgeschlagen"
 
-#: src/lyxfind.cpp:275
+#: src/lyxfind.cpp:282
 msgid "Search error"
 msgstr "Fehler beim Suchen"
 
-#: src/lyxfind.cpp:275
+#: src/lyxfind.cpp:282
 msgid "Search string is empty"
 msgstr "Die Such-Zeichenkette ist leer"
 
-#: src/lyxfind.cpp:307
+#: src/lyxfind.cpp:314
 msgid ""
 "The search string matches the selection, and search is limited to "
 "selection.\n"
@@ -37108,11 +37153,11 @@ msgstr ""
 "Suche ist auf die Auswahl begrenzt.\n"
 "Außerhalb weitersuchen?"
 
-#: src/lyxfind.cpp:309 src/lyxfind.cpp:336
+#: src/lyxfind.cpp:316 src/lyxfind.cpp:343
 msgid "Search outside selection?"
 msgstr "Außerhalb der Auswahl suchen?"
 
-#: src/lyxfind.cpp:334
+#: src/lyxfind.cpp:341
 msgid ""
 "The search string was not found within the selection.\n"
 "Continue search outside?"
@@ -37120,7 +37165,7 @@ msgstr ""
 "Der gesuchte Ausdruck wurde innerhalb der Auswahl nicht gefunden.\n"
 "Außerhalb weitersuchen?"
 
-#: src/lyxfind.cpp:352 src/lyxfind.cpp:698
+#: src/lyxfind.cpp:359 src/lyxfind.cpp:705
 msgid ""
 "End of file reached while searching forward.\n"
 "Continue searching from the beginning?"
@@ -37128,7 +37173,7 @@ msgstr ""
 "Das Ende des Dokuments wurde bei der Vorwärtssuche erreicht.\n"
 "Suche am Anfang fortsetzen?"
 
-#: src/lyxfind.cpp:355 src/lyxfind.cpp:726
+#: src/lyxfind.cpp:362 src/lyxfind.cpp:733
 msgid ""
 "Beginning of file reached while searching backward.\n"
 "Continue searching from the end?"
@@ -37136,62 +37181,62 @@ msgstr ""
 "Der Anfang des Dokuments wurde bei der Rückwärtssuche erreicht.\n"
 "Suche am Ende fortsetzen?"
 
-#: src/lyxfind.cpp:371
+#: src/lyxfind.cpp:378
 msgid "Search reached end of document, continuing from beginning."
 msgstr "Das Ende des Dokuments wurde erreicht, suche vom Anfang ab weiter."
 
-#: src/lyxfind.cpp:372
+#: src/lyxfind.cpp:379
 msgid "Search reached beginning of document, continuing from end."
 msgstr "Der Anfang des Dokuments wurde erreicht, suche vom Ende ab weiter."
 
-#: src/lyxfind.cpp:671
+#: src/lyxfind.cpp:678
 msgid "String not found in selection."
 msgstr "Der gesuchte Ausdruck wurde in der Auswahl nicht gefunden."
 
-#: src/lyxfind.cpp:673
+#: src/lyxfind.cpp:680
 msgid "String not found."
 msgstr "Die Zeichenkette wurde nicht gefunden."
 
-#: src/lyxfind.cpp:676
+#: src/lyxfind.cpp:683
 msgid "String found."
 msgstr "Zeichenkette gefunden."
 
-#: src/lyxfind.cpp:678
+#: src/lyxfind.cpp:685
 msgid "String has been replaced."
 msgstr "Die Zeichenkette wurde ersetzt."
 
-#: src/lyxfind.cpp:681
+#: src/lyxfind.cpp:688
 #, c-format
 msgid "%1$d strings have been replaced in the selection."
 msgstr "%1$d Zeichenketten wurden in der Auswahl ersetzt."
 
-#: src/lyxfind.cpp:682
+#: src/lyxfind.cpp:689
 #, c-format
 msgid "%1$d strings have been replaced."
 msgstr "%1$d Zeichenketten wurden ersetzt."
 
-#: src/lyxfind.cpp:4679
+#: src/lyxfind.cpp:4683
 msgid "One match has been replaced."
 msgstr "Ein Treffer wurde ersetzt."
 
-#: src/lyxfind.cpp:4682
+#: src/lyxfind.cpp:4686
 msgid "Two matches have been replaced."
 msgstr "Zwei Treffer wurden ersetzt."
 
-#: src/lyxfind.cpp:4685
+#: src/lyxfind.cpp:4689
 #, c-format
 msgid "%1$d matches have been replaced."
 msgstr "%1$d Treffer wurden ersetzt."
 
-#: src/lyxfind.cpp:4691
+#: src/lyxfind.cpp:4695
 msgid "Match not found."
 msgstr "Die Zeichenkette wurde nicht gefunden!"
 
-#: src/lyxfind.cpp:4697
+#: src/lyxfind.cpp:4701
 msgid "Match has been replaced."
 msgstr "Die Zeichenkette wurde ersetzt."
 
-#: src/lyxfind.cpp:4699
+#: src/lyxfind.cpp:4703
 msgid "Match found."
 msgstr "Die Zeichenkette wurde gefunden!"
 
@@ -37793,6 +37838,16 @@ msgstr ""
 msgid "Unknown user"
 msgstr "Unbekannter Benutzer"
 
+#~ msgid ""
+#~ "If unchecked, the search will be limited to occurrences of the selected "
+#~ "text and paragraph style"
+#~ msgstr ""
+#~ "Wenn Sie dies deaktivieren, wird die Suche nur auf Vorkommen beschränkt, "
+#~ "die die den ausgewählten Text- und Absatzstil verwenden."
+
+#~ msgid "I&gnore format"
+#~ msgstr "Ignoriere For&mat"
+
 #~ msgid "foot"
 #~ msgstr "Fußnote"
 
@@ -39448,9 +39503,6 @@ msgstr "Unbekannter Benutzer"
 #~ msgid " (version control)"
 #~ msgstr " (Versionskontrolle)"
 
-#~ msgid " (changed)"
-#~ msgstr " (geändert)"
-
 #~ msgid " (read only)"
 #~ msgstr " (schreibgeschützt)"
 

commit c0a3d654ff1b5bfadb4195015fc82a7fefe000eb
Author: Juergen Spitzmueller <spitz@lyx.org>
Date:   Sat Apr 30 14:23:54 2022 +0200

    Add GUI for search-ignore

diff --git a/src/frontends/qt/FindAndReplace.cpp \
b/src/frontends/qt/FindAndReplace.cpp index ab61e1a..d72fa92 100644
--- a/src/frontends/qt/FindAndReplace.cpp
+++ b/src/frontends/qt/FindAndReplace.cpp
@@ -421,7 +421,7 @@ bool \
FindAndReplaceWidget::findAndReplaceScope(FindAndReplaceOptions & opt, bool  /// \
Return true if a match was found  bool FindAndReplaceWidget::findAndReplace(
 	bool casesensitive, bool matchword, bool backwards,
-	bool expandmacros, bool ignoreformat, bool replace,
+	bool expandmacros, bool adhereformat, bool replace,
 	bool keep_case, bool replace_all)
 {
 	Buffer & find_buf = find_work_area_->bufferView().buffer();
@@ -460,19 +460,59 @@ bool FindAndReplaceWidget::findAndReplace(
 	       << ", matchword=" << matchword
 	       << ", backwards=" << backwards
 	       << ", expandmacros=" << expandmacros
-	       << ", ignoreformat=" << ignoreformat
+	       << ", adhereformat=" << adhereformat
 	       << ", repl_buf_name" << repl_buf_name
 	       << ", keep_case=" << keep_case
 	       << ", scope=" << scope
 	       << ", restr=" << restr);
 
 	FindAndReplaceOptions opt(find_buf_name, casesensitive, matchword,
-				  !backwards, expandmacros, ignoreformat,
+				  !backwards, expandmacros, !adhereformat,
 				  repl_buf_name, keep_case, scope, restr);
+	
+	if (adhereformat) {
+		// Formats to adhere
+		lyx::dispatch(FuncRequest(LFUN_SEARCH_IGNORE, checkState("language",
+					  !adhereLanguageCB->isChecked())));
+		lyx::dispatch(FuncRequest(LFUN_SEARCH_IGNORE, checkState("color",
+					  !adhereColorCB->isChecked())));
+		lyx::dispatch(FuncRequest(LFUN_SEARCH_IGNORE, checkState("family",
+					  !adhereFFamilyCB->isChecked())));
+		lyx::dispatch(FuncRequest(LFUN_SEARCH_IGNORE, checkState("series",
+					  !adhereFSeriesCB->isChecked())));
+		lyx::dispatch(FuncRequest(LFUN_SEARCH_IGNORE, checkState("shape",
+					  !adhereFShapeCB->isChecked())));
+		lyx::dispatch(FuncRequest(LFUN_SEARCH_IGNORE, checkState("size",
+					  !adhereFSizeCB->isChecked())));
+		lyx::dispatch(FuncRequest(LFUN_SEARCH_IGNORE, checkState("markup",
+					  !adhereMarkupCB->isChecked())));
+		lyx::dispatch(FuncRequest(LFUN_SEARCH_IGNORE, checkState("underline",
+					  !adhereUnderlineCB->isChecked())));
+		lyx::dispatch(FuncRequest(LFUN_SEARCH_IGNORE, checkState("strike",
+					  !adhereStrikeCB->isChecked())));
+		lyx::dispatch(FuncRequest(LFUN_SEARCH_IGNORE, checkState("deleted",
+					  !adhereDeletedCB->isChecked())));
+		lyx::dispatch(FuncRequest(LFUN_SEARCH_IGNORE, checkState("sectioning",
+					  !adhereSectioningCB->isChecked())));
+	}
+	lyx::dispatch(FuncRequest(LFUN_SEARCH_IGNORE, checkState("non-output-content",
+				  ignoreNonOutputCB->isChecked())));
+	
 	return findAndReplaceScope(opt, replace_all);
 }
 
 
+docstring const FindAndReplaceWidget::checkState(string const s, bool const b)
+{
+	docstring res = from_ascii(s) + from_ascii(" ");
+	if (b)
+		res += from_ascii("true");
+	else
+		res += from_ascii("false");
+	return res;
+}
+
+
 bool FindAndReplaceWidget::findAndReplace(bool backwards, bool replace, bool \
replace_all)  {
 	if (! view_.currentMainWorkArea()) {
@@ -492,7 +532,7 @@ bool FindAndReplaceWidget::findAndReplace(bool backwards, bool \
replace, bool rep  wordsCB->isChecked(),
 		backwards,
 		expandMacrosCB->isChecked(),
-		ignoreFormatCB->isChecked(),
+		adhereFormatGB->isChecked(),
 		replace,
 		keepCaseCB->isChecked(),
 		replace_all);
@@ -532,6 +572,34 @@ void FindAndReplaceWidget::on_searchbackCB_clicked()
 }
 
 
+void FindAndReplaceWidget::setFormatIgnores(bool const b)
+{
+	adhereLanguageCB->setChecked(b);
+	adhereColorCB->setChecked(b);
+	adhereFFamilyCB->setChecked(b);
+	adhereFSeriesCB->setChecked(b);
+	adhereFShapeCB->setChecked(b);
+	adhereFSizeCB->setChecked(b);
+	adhereMarkupCB->setChecked(b);
+	adhereUnderlineCB->setChecked(b);
+	adhereStrikeCB->setChecked(b);
+	adhereDeletedCB->setChecked(b);
+	adhereSectioningCB->setChecked(b);
+}
+
+
+void FindAndReplaceWidget::on_selectAllPB_clicked()
+{
+	setFormatIgnores(true);
+}
+
+
+void FindAndReplaceWidget::on_deselectAllPB_clicked()
+{
+	setFormatIgnores(false);
+}
+
+
 // Copy selected elements from bv's BufferParams to the dest_bv's
 static void copy_params(BufferView const & bv, BufferView & dest_bv) {
 	Buffer const & doc_buf = bv.buffer();
@@ -584,8 +652,9 @@ void FindAndReplace::updateView()
 
 
 FindAndReplace::FindAndReplace(GuiView & parent,
-		Qt::DockWidgetArea area, Qt::WindowFlags flags)
-	: DockView(parent, "findreplaceadv", qt_("Advanced Find and Replace"),
+			       Qt::DockWidgetArea area,
+			       Qt::WindowFlags flags)
+    : DockView(parent, "findreplaceadv", qt_("Advanced Find and Replace"),
 		   area, flags)
 {
 	widget_ = new FindAndReplaceWidget(parent);
diff --git a/src/frontends/qt/FindAndReplace.h b/src/frontends/qt/FindAndReplace.h
index 0ffc39d..7ea70a9 100644
--- a/src/frontends/qt/FindAndReplace.h
+++ b/src/frontends/qt/FindAndReplace.h
@@ -16,6 +16,7 @@
 // This is needed so that ui_FindAndReplaceUi.h can find qt_()
 #include "qt_helpers.h"
 #include "ui_FindAndReplaceUi.h"
+#include "support/docstring.h"
 
 #include <string>
 
@@ -65,12 +66,18 @@ private:
 	void virtual hideEvent(QHideEvent *ev) override;
 
 	void hideDialog();
+	
+	void setFormatIgnores(bool const b);
+	
+	docstring const checkState(std::string const s, bool const b);
 
 protected Q_SLOTS:
 	void on_findNextPB_clicked();
 	void on_replacePB_clicked();
 	void on_replaceallPB_clicked();
 	void on_searchbackCB_clicked();
+	void on_selectAllPB_clicked();
+	void on_deselectAllPB_clicked();
 };
 
 
diff --git a/src/frontends/qt/ui/FindAndReplaceUi.ui \
b/src/frontends/qt/ui/FindAndReplaceUi.ui index 58a16eb..6713723 100644
--- a/src/frontends/qt/ui/FindAndReplaceUi.ui
+++ b/src/frontends/qt/ui/FindAndReplaceUi.ui
@@ -7,7 +7,7 @@
     <x>0</x>
     <y>0</y>
     <width>374</width>
-    <height>380</height>
+    <height>664</height>
    </rect>
   </property>
   <property name="windowTitle">
@@ -263,7 +263,7 @@
    <attribute name="title">
     <string>Settin&amp;gs</string>
    </attribute>
-   <layout class="QVBoxLayout" name="dynamicLayoutAdvanced_" stretch="0,0,1">
+   <layout class="QVBoxLayout" name="dynamicLayoutAdvanced_" stretch="0,0,0,1">
     <item>
      <widget class="QGroupBox" name="groupBox_2">
       <property name="enabled">
@@ -365,42 +365,26 @@
        <enum>QLayout::SetMinimumSize</enum>
       </property>
       <item row="3" column="0">
-       <widget class="QCheckBox" name="OnlyMaths">
-        <property name="toolTip">
-         <string>Restrict search to math environments only</string>
-        </property>
-        <property name="text">
-         <string>Search on&amp;ly in maths</string>
-        </property>
-       </widget>
-      </item>
-      <item row="1" column="0">
-       <widget class="QCheckBox" name="ignoreFormatCB">
+       <widget class="QCheckBox" name="expandMacrosCB">
         <property name="enabled">
-         <bool>true</bool>
-        </property>
-        <property name="toolTip">
-         <string>If unchecked, the search will be limited to occurrences of the \
selected text and paragraph style</string> +         <bool>false</bool>
         </property>
         <property name="text">
-         <string>I&amp;gnore format</string>
-        </property>
-        <property name="checked">
-         <bool>true</bool>
+         <string>E&amp;xpand macros</string>
         </property>
        </widget>
       </item>
-      <item row="4" column="0">
-       <widget class="QCheckBox" name="expandMacrosCB">
-        <property name="enabled">
-         <bool>false</bool>
+      <item row="2" column="0">
+       <widget class="QCheckBox" name="OnlyMaths">
+        <property name="toolTip">
+         <string>Restrict search to math environments only</string>
         </property>
         <property name="text">
-         <string>E&amp;xpand macros</string>
+         <string>Search on&amp;ly in maths</string>
         </property>
        </widget>
       </item>
-      <item row="2" column="0">
+      <item row="1" column="0">
        <widget class="QCheckBox" name="keepCaseCB">
         <property name="toolTip">
          <string>Keep the case of the replacement's first letter as in each matching \
text first letter</string> @@ -423,9 +407,128 @@
         </property>
        </spacer>
       </item>
+      <item row="4" column="0">
+       <widget class="QCheckBox" name="ignoreNonOutputCB">
+        <property name="toolTip">
+         <string>Do not search in content that is not output (e.g., notes)</string>
+        </property>
+        <property name="text">
+         <string>Ignore &amp;non-output content</string>
+        </property>
+       </widget>
+      </item>
      </layout>
     </item>
     <item>
+     <widget class="QGroupBox" name="adhereFormatGB">
+      <property name="toolTip">
+       <string>If the search string is formatted in a non-default way, only find \
strings formatted like the search string in the checked respects</string> +      \
</property> +      <property name="title">
+       <string>Ad&amp;here to search string formatting of</string>
+      </property>
+      <property name="checkable">
+       <bool>true</bool>
+      </property>
+      <property name="checked">
+       <bool>false</bool>
+      </property>
+      <layout class="QGridLayout" name="gridLayout_4">
+       <item row="2" column="1">
+        <widget class="QCheckBox" name="adhereStrikeCB">
+         <property name="text">
+          <string>Strike-through</string>
+         </property>
+        </widget>
+       </item>
+       <item row="3" column="0">
+        <widget class="QCheckBox" name="adhereFSeriesCB">
+         <property name="text">
+          <string>Font series</string>
+         </property>
+        </widget>
+       </item>
+       <item row="1" column="0">
+        <widget class="QCheckBox" name="adhereColorCB">
+         <property name="text">
+          <string>Font color</string>
+         </property>
+        </widget>
+       </item>
+       <item row="0" column="1">
+        <widget class="QCheckBox" name="adhereMarkupCB">
+         <property name="text">
+          <string>Emph/noun</string>
+         </property>
+        </widget>
+       </item>
+       <item row="6" column="1">
+        <widget class="QPushButton" name="deselectAllPB">
+         <property name="text">
+          <string>Deselect all</string>
+         </property>
+        </widget>
+       </item>
+       <item row="2" column="0">
+        <widget class="QCheckBox" name="adhereFFamilyCB">
+         <property name="text">
+          <string>Font family</string>
+         </property>
+        </widget>
+       </item>
+       <item row="0" column="0">
+        <widget class="QCheckBox" name="adhereLanguageCB">
+         <property name="text">
+          <string>Language</string>
+         </property>
+        </widget>
+       </item>
+       <item row="4" column="1">
+        <widget class="QCheckBox" name="adhereSectioningCB">
+         <property name="text">
+          <string>Sectioning markup</string>
+         </property>
+        </widget>
+       </item>
+       <item row="3" column="1">
+        <widget class="QCheckBox" name="adhereDeletedCB">
+         <property name="text">
+          <string>Deletion (change)</string>
+         </property>
+        </widget>
+       </item>
+       <item row="1" column="1">
+        <widget class="QCheckBox" name="adhereUnderlineCB">
+         <property name="text">
+          <string>Underlining</string>
+         </property>
+        </widget>
+       </item>
+       <item row="4" column="0">
+        <widget class="QCheckBox" name="adhereFShapeCB">
+         <property name="text">
+          <string>Font shape</string>
+         </property>
+        </widget>
+       </item>
+       <item row="6" column="0">
+        <widget class="QPushButton" name="selectAllPB">
+         <property name="text">
+          <string>Select all</string>
+         </property>
+        </widget>
+       </item>
+       <item row="5" column="0">
+        <widget class="QCheckBox" name="adhereFSizeCB">
+         <property name="text">
+          <string>Font size</string>
+         </property>
+        </widget>
+       </item>
+      </layout>
+     </widget>
+    </item>
+    <item>
      <spacer name="verticalSpacer_2">
       <property name="orientation">
        <enum>Qt::Vertical</enum>

commit cbe2f613969fe92d9c14231f48d19749674f8e26
Author: Kornel Benko <kornel@lyx.org>
Date:   Sat Apr 30 09:30:15 2022 +0200

    FindAdv: Re-add 'size' to the list of possible ignored formats

diff --git a/src/Font.cpp b/src/Font.cpp
index 514bf03..7b7585d 100644
--- a/src/Font.cpp
+++ b/src/Font.cpp
@@ -336,11 +336,18 @@ int Font::latexWriteStartChanges(otexstream & os, BufferParams \
const & bparams,  p.reduce(prev.bits_);
 
 	if (f.size() != INHERIT_SIZE) {
-		os << '{';
-		++count;
-		os << '\\'
-		   << LaTeXSizeSwitchNames[f.size()] << termcmd;
-		count += strlen(LaTeXSizeSwitchNames[f.size()]) + 1;
+		if (runparams.for_search == OutputParams::NoSearch) {
+			os << '{';
+			++count;
+			os << '\\'
+			   << LaTeXSizeSwitchNames[f.size()] << termcmd;
+			count += strlen(LaTeXSizeSwitchNames[f.size()]) + 1;
+		}
+		else {
+			os << '\\'
+			   << LaTeXSizeSwitchNames[f.size()] << '{';
+			count += strlen(LaTeXSizeSwitchNames[f.size()]) + 2;
+		}
 	}
 	if (f.family() != INHERIT_FAMILY) {
 		if (non_inherit_inset) {
diff --git a/src/lyxfind.cpp b/src/lyxfind.cpp
index c0d8640..ee92523 100644
--- a/src/lyxfind.cpp
+++ b/src/lyxfind.cpp
@@ -88,6 +88,8 @@ class IgnoreFormats {
 	///
 	bool getShape() const { return ignoreShape_; }
 	///
+	bool getSize() const { return ignoreSize_; }
+	///
 	bool getUnderline() const { return ignoreUnderline_; }
 	///
 	bool getMarkUp() const { return ignoreMarkUp_; }
@@ -118,6 +120,8 @@ private:
 	///
 	bool ignoreShape_ = false;
 	///
+	bool ignoreSize_ = true;
+	///
 	bool ignoreUnderline_ = false;
 	///
 	bool ignoreMarkUp_ = false;
@@ -166,6 +170,9 @@ void IgnoreFormats::setIgnoreFormat(string const & type, bool \
value, bool fromUs  else if (type == "shape") {
 		ignoreShape_ = value;
 	}
+	else if (type == "size") {
+		ignoreSize_ = value;
+	}
 	else if (type == "family") {
 		ignoreFamily_ = value;
 	}
@@ -2757,7 +2764,7 @@ void LatexInfo::buildKeys(bool isPatternString)
 	makeKey("textgreek|textcyrillic", KeyInfo(KeyInfo::isStandard, 1, true), false);
 	makeKey("parbox", KeyInfo(KeyInfo::doRemove, 1, true), isPatternString);
 	// like ('tiny{}' or '\tiny ' ... )
-	makeKey("footnotesize|tiny|scriptsize|small|large|Large|LARGE|huge|Huge", \
KeyInfo(KeyInfo::isSize, 0, false), isPatternString); \
+	makeKey("footnotesize|tiny|scriptsize|small|large|Large|LARGE|huge|Huge", \
KeyInfo(KeyInfo::isSize, 0, ignoreFormats.getSize()), isPatternString);  
 	// Survives, like known character
 	// makeKey("lyx|LyX|latex|LaTeX|latexe|LaTeXe|tex|TeX", KeyInfo(KeyInfo::isChar, 0, \
false), isPatternString);

commit a4663bc988a252f27e78c1a4a1e591acc94c7c54
Author: Scott Kostyshak <skostysh@lyx.org>
Date:   Fri Apr 29 21:11:10 2022 -0400

    ctests: categorize testfile for #6197 as resolved
    
    The actual LyX bug was fixed a while ago. There was a remaining
    missing symbols error, but that has been fixed in the latest
    TeX Live 2022.

diff --git a/autotests/export/latex/lyxbugs/6197-polish-amssymb.lyx \
b/autotests/export/latex/lyxbugs-resolved/6197-polish-amssymb.lyx similarity index \
100% rename from autotests/export/latex/lyxbugs/6197-polish-amssymb.lyx
rename to autotests/export/latex/lyxbugs-resolved/6197-polish-amssymb.lyx

commit 301a17b0aa302c65d90f9b1f80ffe1002c65a6bd
Author: Scott Kostyshak <skostysh@lyx.org>
Date:   Fri Apr 29 21:09:33 2022 -0400

    ctests: update description for lyxbugs/6197
    
    With an updated TeX Live 2022, LuaTeX no longer gives a missing
    symbol for this test file (manual inspection confirms the symbols
    are correctly displayed).

diff --git a/autotests/export/latex/lyxbugs/6197-polish-amssymb.lyx \
b/autotests/export/latex/lyxbugs/6197-polish-amssymb.lyx index 9ef2699..b152dc9 \
                100644
--- a/autotests/export/latex/lyxbugs/6197-polish-amssymb.lyx
+++ b/autotests/export/latex/lyxbugs/6197-polish-amssymb.lyx
@@ -1,12 +1,12 @@
 #LyX 2.4 created this file. For more info see https://www.lyx.org/
-\lyxformat 574
+\lyxformat 609
 \begin_document
 \begin_header
 \save_transient_properties true
 \origin unavailable
 \textclass article
 \use_default_options true
-\maintain_unincluded_children false
+\maintain_unincluded_children no
 \language polish
 \language_package default
 \inputencoding auto-legacy
@@ -18,7 +18,9 @@
 \font_default_family default
 \use_non_tex_fonts false
 \font_sc false
-\font_osf false
+\font_roman_osf false
+\font_sans_osf false
+\font_typewriter_osf false
 \font_sf_scale 100 100
 \font_tt_scale 100 100
 \use_microtype false
@@ -55,6 +57,7 @@
 \justification true
 \use_refstyle 1
 \use_minted 0
+\use_lineno 0
 \index Index
 \shortcut idx
 \color #008000
@@ -73,9 +76,13 @@
 \tablestyle default
 \tracking_changes false
 \output_changes false
+\change_bars false
+\postpone_fragile_content false
 \html_math_output 0
 \html_css_as_file 0
 \html_be_strict false
+\docbook_table_output 0
+\docbook_mathml_prefix 1
 \end_header
 
 \begin_body
@@ -127,7 +134,7 @@ lll which becomes
 \begin_inset Quotes prd
 \end_inset
 
- with pdfTeX and a missing symbol with LuaTeX..
+.
 \end_layout
 
 \end_body

commit d54e400ee38d94fab5434a18984a7c23e9530438
Author: Scott Kostyshak <skostysh@lyx.org>
Date:   Fri Apr 29 20:42:07 2022 -0400

    ctests: adapt ignored warnings for lyx2lyx tests
    
    This commit does the same as a8dd4db5 but for the explicit lyx2lyx
    tests.
    
    This commit amends ae31e169.

diff --git a/development/autotests/lyx2lyxtest.cmake \
b/development/autotests/lyx2lyxtest.cmake index 708cd50..4b01ecb 100755
--- a/development/autotests/lyx2lyxtest.cmake
+++ b/development/autotests/lyx2lyxtest.cmake
@@ -30,7 +30,7 @@ string(COMPARE NOTEQUAL  ${_err} 0 _erg)
 file(STRINGS ${errorfile} foundErrors)
 if(foundErrors)
   foreach(_l ${foundErrors})
-    if (NOT _l MATCHES "Warning: No conversion needed:")
+    if (NOT _l MATCHES "lyx2lyx warning: No conversion needed:")
       set(_erg 1)
       message(STATUS "${_l}")
   endif()

commit a8dd4db54f41ff68f26a669049aee99e73de6961
Author: Scott Kostyshak <skostysh@lyx.org>
Date:   Fri Apr 29 19:01:27 2022 -0400

    ctests: adapt ignored warnings to new messages
    
    The change of the warning messages was introduced at ae31e169, which
    broke several lyx2lyx tests. The tests are now fixed with this
    commit.

diff --git a/development/autotests/filterCheckWarnings \
b/development/autotests/filterCheckWarnings index decb045..6873973 100644
--- a/development/autotests/filterCheckWarnings
+++ b/development/autotests/filterCheckWarnings
@@ -1,6 +1,6 @@
 Cannot find translation for language
-Warning: Lyx2lyx knows nothing about (textclass|module) 
-Warning: sfval: [0-9]+ [0-9]+
+lyx2lyx warning: Lyx2lyx knows nothing about (textclass|module) 
+lyx2lyx warning: sfval: [0-9]+ [0-9]+
 Warning: a buffer should not have two parents!
 The master .* does not include this document. Ignoring the master assignment
 Warning: Different textclasses

commit 48c069fa8aec72840dc55688e21c38c5dd321e66
Author: Kornel Benko <kornel@lyx.org>
Date:   Fri Apr 29 19:56:12 2022 +0200

    Amend a83159f0: Use logical operator ||.
    
    Clang is not mocking here, but it looks more consistent.

diff --git a/src/BufferView.cpp b/src/BufferView.cpp
index 30944cc..ebca6f8 100644
--- a/src/BufferView.cpp
+++ b/src/BufferView.cpp
@@ -2532,7 +2532,7 @@ void BufferView::mouseEventDispatch(FuncRequest const & cmd0)
 	// Notify left insets
 	if (cur != old) {
 		bool badcursor = old.fixIfBroken() || cur.fixIfBroken();
-		badcursor |= notifyCursorLeavesOrEnters(old, cur);
+		badcursor = badcursor || notifyCursorLeavesOrEnters(old, cur);
 		if (badcursor)
 			cursor().fixIfBroken();
 	}

commit 531fed9543b07cb06d23ba8f7276691d8fd6b9d6
Author: Kornel Benko <kornel@lyx.org>
Date:   Fri Apr 29 19:23:50 2022 +0200

    FindAdv: Fix the length of leading string
    
    We are removing leading values from the start of string, so
    the size of removed data was wrong because s.find() could find
    a position inside the leading part.

diff --git a/src/lyxfind.cpp b/src/lyxfind.cpp
index a4dd810..c0d8640 100644
--- a/src/lyxfind.cpp
+++ b/src/lyxfind.cpp
@@ -1091,7 +1091,7 @@ void MatchStringAdv::FillResults(MatchResult &found_mr)
 static void setFindParams(OutputParams &runparams)
 {
 	runparams.flavor = Flavor::XeTeX;
-	runparams.use_polyglossia = true;
+	//runparams.use_polyglossia = true;
 	runparams.linelen = 10000; //lyxrc.plaintext_linelen;
 	// No side effect of file copying and image conversion
 	runparams.dryrun = true;
@@ -1226,7 +1226,7 @@ static size_t identifyLeading(string const & s)
 	       || regex_replace(t, t, "^\\\\begin\\{[a-zA-Z_]*\\*?\\}", ""))
 	       ;
 	LYXERR(Debug::FINDVERBOSE, "  after removing leading $, \\[ , \\emph{, \\textbf{, \
                etc.: '" << t << "'");
-	return s.find(t);
+	return s.size() - t.size();
 }
 
 /*

commit a83159f05170733069a2baf2237e81c033f33916
Author: Scott Kostyshak <skostysh@lyx.org>
Date:   Thu Apr 28 21:06:37 2022 -0400

    Fix Clang 14 warning -Wbitwise-instead-of-logical
    
    Use the boolean operator '||' with bools instead of the bitwise
    operator '|'.

diff --git a/src/BufferView.cpp b/src/BufferView.cpp
index 32c890c..30944cc 100644
--- a/src/BufferView.cpp
+++ b/src/BufferView.cpp
@@ -2531,7 +2531,7 @@ void BufferView::mouseEventDispatch(FuncRequest const & cmd0)
 
 	// Notify left insets
 	if (cur != old) {
-		bool badcursor = old.fixIfBroken() | cur.fixIfBroken();
+		bool badcursor = old.fixIfBroken() || cur.fixIfBroken();
 		badcursor |= notifyCursorLeavesOrEnters(old, cur);
 		if (badcursor)
 			cursor().fixIfBroken();

commit e4416535e479fb23cf980e8a3cddd36338d7754a
Author: Jean-Marc Lasgouttes <lasgouttes@lyx.org>
Date:   Thu Apr 28 14:36:11 2022 +0200

    Fix configure with autoconf 2.71
    
    This fixes two issues with autoconf 2.71
    
    * a new version of eilseq.m4 from libiconv is required ;
    
    * the AC_CHECK_HEADER last `-' argument is obsloleted, but I do not
      think that we needed it in the first place.

diff --git a/config/qt.m4 b/config/qt.m4
index 05fa9ce..8c1a818 100644
--- a/config/qt.m4
+++ b/config/qt.m4
@@ -231,10 +231,10 @@ AC_DEFUN([QT_DO_IT_ALL],
 	CPPFLAGS="$save_CPPFLAGS $QT_CORE_INCLUDES"
 	AC_CHECK_HEADER(QtGui/qtgui-config.h,
 	  [lyx_qt5_config=QtGui/qtgui-config.h],
-	  [lyx_qt5_config=qconfig.h],[-])
+	  [lyx_qt5_config=qconfig.h])
 	AC_CHECK_HEADER(QtGui/private/qtgui-config_p.h,
 	  [lyx_qt6_config=QtGui/private/qtgui-config_p.h],
-	  [lyx_qt6_config=qconfig.h],[-])
+	  [lyx_qt6_config=qconfig.h])
 	AC_MSG_CHECKING([whether Qt uses the X Window system])
 	if test x$USE_QT6 = xyes ; then
 	  dnl FIXME: Check whether defining QPA_XCB makes sense with Qt6
diff --git a/m4/eilseq.m4 b/m4/eilseq.m4
index 792d514..5f86ab3 100644
--- a/m4/eilseq.m4
+++ b/m4/eilseq.m4
@@ -1,6 +1,6 @@
-#serial 1
+#serial 2
 
-AC_PREREQ(2.50)
+AC_PREREQ([2.61])
 
 # The EILSEQ errno value ought to be defined in <errno.h>, according to
 # ISO C 99 and POSIX.  But some systems (like SunOS 4) don't define it,
@@ -16,20 +16,20 @@ AC_DEFUN([AC_EILSEQ],
   AC_REQUIRE([AC_PROG_CC])dnl
 
   dnl Check for any extra headers that could define EILSEQ.
-  AC_CHECK_HEADERS(wchar.h)
+  AC_CHECK_HEADERS([wchar.h])
 
-  AC_CACHE_CHECK([for EILSEQ], ac_cv_decl_EILSEQ, [
-    AC_EGREP_CPP(yes,[
+  AC_CACHE_CHECK([for EILSEQ], [ac_cv_decl_EILSEQ], [
+    AC_EGREP_CPP([yes],[
 #include <errno.h>
 #ifdef EILSEQ
 yes
 #endif
-      ], have_eilseq=1)
+      ], [have_eilseq=1])
     if test -n "$have_eilseq"; then
       dnl EILSEQ exists in <errno.h>. Don't need to define EILSEQ ourselves.
       ac_cv_decl_EILSEQ=yes
     else
-      AC_EGREP_CPP(yes,[
+      AC_EGREP_CPP([yes],[
 #include <errno.h>
 #if HAVE_WCHAR_H
 #include <wchar.h>
@@ -37,11 +37,11 @@ yes
 #ifdef EILSEQ
 yes
 #endif
-        ], have_eilseq=1)
+        ], [have_eilseq=1])
       if test -n "$have_eilseq"; then
         dnl EILSEQ exists in some other system header.
         dnl Define it to the same value.
-        _AC_COMPUTE_INT([EILSEQ], ac_cv_decl_EILSEQ, [
+        AC_COMPUTE_INT([ac_cv_decl_EILSEQ], [EILSEQ], [
 #include <errno.h>
 #if HAVE_WCHAR_H
 #include <wchar.h>
@@ -62,6 +62,6 @@ yes
     AC_DEFINE_UNQUOTED([EILSEQ], [$ac_cv_decl_EILSEQ],
                        [Define as good substitute value for EILSEQ.])
     EILSEQ="$ac_cv_decl_EILSEQ"
-    AC_SUBST(EILSEQ)
+    AC_SUBST([EILSEQ])
   fi
 ])

commit 769df229dc2a95c0511f3e5510c772c02376c7f3
Author: Kornel Benko <kornel@lyx.org>
Date:   Wed Apr 27 15:57:24 2022 +0200

    FindAdv: Avoid some duplicated code
    
    Also handle (== ignore) \textgreek{} and \textcyrillic{} commands

diff --git a/src/lyxfind.cpp b/src/lyxfind.cpp
index 825bee3..a4dd810 100644
--- a/src/lyxfind.cpp
+++ b/src/lyxfind.cpp
@@ -1088,6 +1088,15 @@ void MatchStringAdv::FillResults(MatchResult &found_mr)
 		valid_matches = 0;
 }
 
+static void setFindParams(OutputParams &runparams)
+{
+	runparams.flavor = Flavor::XeTeX;
+	runparams.use_polyglossia = true;
+	runparams.linelen = 10000; //lyxrc.plaintext_linelen;
+	// No side effect of file copying and image conversion
+	runparams.dryrun = true;
+}
+
 static docstring buffer_to_latex(Buffer & buffer)
 {
 	//OutputParams runparams(&buffer.params().encoding());
@@ -1095,10 +1104,7 @@ static docstring buffer_to_latex(Buffer & buffer)
 	odocstringstream ods;
 	otexstream os(ods);
 	runparams.nice = true;
-	runparams.flavor = Flavor::XeTeX;
-	runparams.linelen = 10000; //lyxrc.plaintext_linelen;
-	// No side effect of file copying and image conversion
-	runparams.dryrun = true;
+	setFindParams(runparams);
 	if (ignoreFormats.getDeleted())
 		runparams.for_search = OutputParams::SearchWithoutDeleted;
 	else
@@ -1170,9 +1176,7 @@ static docstring stringifySearchBuffer(Buffer & buffer, \
FindAndReplaceOptions co  // OutputParams runparams(&buffer.params().encoding());
 		OutputParams runparams(encodings.fromLyXName("utf8"));
 		runparams.nice = true;
-		runparams.flavor = Flavor::XeTeX;
-		runparams.linelen = 10000; //lyxrc.plaintext_linelen;
-		runparams.dryrun = true;
+		setFindParams(runparams);
 		int option = AS_STR_INSETS |AS_STR_PLAINTEXT;
 		if (ignoreFormats.getDeleted()) {
 			option |= AS_STR_SKIPDELETE;
@@ -2750,6 +2754,7 @@ void LatexInfo::buildKeys(bool isPatternString)
 	makeKey("triangleuppar|triangledownpar|droppar", KeyInfo(KeyInfo::isStandard, 1, \
true), isPatternString);  makeKey("triangleleftpar|shapepar|dropuppar",    \
KeyInfo(KeyInfo::isStandard, 1, true), isPatternString);  \
makeKey("hphantom|vphantom|note|footnote|shortcut|include|includegraphics",     \
KeyInfo(KeyInfo::isStandard, 1, true), isPatternString); \
+	makeKey("textgreek|textcyrillic", KeyInfo(KeyInfo::isStandard, 1, true), false);  \
makeKey("parbox", KeyInfo(KeyInfo::doRemove, 1, true), isPatternString);  // like \
('tiny{}' or '\tiny ' ... )  \
makeKey("footnotesize|tiny|scriptsize|small|large|Large|LARGE|huge|Huge", \
KeyInfo(KeyInfo::isSize, 0, false), isPatternString); @@ -3941,10 +3946,7 @@ \
docstring stringifyFromCursor(DocIterator const & cur, int len)  // OutputParams \
runparams(&cur.buffer()->params().encoding());  OutputParams \
runparams(encodings.fromLyXName("utf8"));  runparams.nice = true;
-		runparams.flavor = Flavor::XeTeX;
-		runparams.linelen = 10000; //lyxrc.plaintext_linelen;
-		// No side effect of file copying and image conversion
-		runparams.dryrun = true;
+		setFindParams(runparams);
 		int option = AS_STR_INSETS | AS_STR_PLAINTEXT;
 		if (ignoreFormats.getDeleted()) {
 			option |= AS_STR_SKIPDELETE;
@@ -3999,10 +4001,7 @@ docstring latexifyFromCursor(DocIterator const & cur, int len)
 	//OutputParams runparams(&buf.params().encoding());
 	OutputParams runparams(encodings.fromLyXName("utf8"));
 	runparams.nice = false;
-	runparams.flavor = Flavor::XeTeX;
-	runparams.linelen = 8000; //lyxrc.plaintext_linelen;
-	// No side effect of file copying and image conversion
-	runparams.dryrun = true;
+	setFindParams(runparams);
 	if (ignoreFormats.getDeleted()) {
 		runparams.for_search = OutputParams::SearchWithoutDeleted;
 	}
@@ -4609,9 +4608,7 @@ static int findAdvReplace(BufferView * bv, \
FindAndReplaceOptions const & opt, Ma  // OutputParams \
runparams(&repl_buffer.params().encoding());  OutputParams \
runparams(encodings.fromLyXName("utf8"));  runparams.nice = false;
-		runparams.flavor = Flavor::XeTeX;
-		runparams.linelen = 8000; //lyxrc.plaintext_linelen;
-		runparams.dryrun = true;
+		setFindParams(runparams);
 		TeXOnePar(repl_buffer, repl_buffer.text(), 0, os, runparams, string(), -1, -1, \
true);  //repl_buffer.getSourceCode(ods, 0, repl_buffer.paragraphs().size(), false);
 		docstring repl_latex = ods.str();

-----------------------------------------------------------------------

Summary of changes:
 .../6197-polish-amssymb.lyx                        |   15 +-
 config/qt.m4                                       |    4 +-
 development/autotests/filterCheckWarnings          |    4 +-
 development/autotests/findadv-05-in.txt            |    2 +-
 development/autotests/findadv-06-in.txt            |    6 +-
 development/autotests/findadv-07-in.txt            |    4 +-
 development/autotests/findadv-09-in.txt            |    4 +-
 development/autotests/findadv-10-in.txt            |    4 +-
 development/autotests/findadv-14-in.txt            |    4 +-
 development/autotests/findadv-15-in.txt            |    4 +-
 development/autotests/findadv-16-in.txt            |    2 +-
 development/autotests/findadv-17-in.txt            |    2 +-
 development/autotests/findadv-21-in.txt            |    4 +-
 development/autotests/findadv-22-in.txt            |    4 +-
 development/autotests/findadv-combined-in.txt      |    2 +-
 development/autotests/findadv-logo-in.txt          |    2 +-
 development/autotests/findadv-re-01-in.txt         |    4 +-
 development/autotests/findadv-re-02-in.txt         |    6 +-
 development/autotests/findadv-re-03-in.txt         |    4 +-
 development/autotests/findadv-re-04-in.txt         |    8 +-
 development/autotests/findadv-re-06-in.txt         |    2 +-
 development/autotests/lyx2lyxtest.cmake            |    2 +-
 development/batchtests/beamer_test.tex.orig        |    4 +-
 lib/doc/UserGuide.lyx                              |  149 +++++++++-
 lib/ui/stdcontext.inc                              |    2 +-
 m4/eilseq.m4                                       |   20 +-
 po/de.gmo                                          |  Bin 624975 -> 625745 bytes
 po/de.po                                           |  222 +++++++++------
 po/fr.gmo                                          |  Bin 628113 -> 629103 bytes
 po/fr.po                                           |  278 +++++++++++-------
 po/sk.po                                           |   95 +++++--
 src/BufferView.cpp                                 |    4 +-
 src/Font.cpp                                       |   17 +-
 src/OutputParams.h                                 |    9 +-
 src/Paragraph.cpp                                  |   37 ++-
 src/Text2.cpp                                      |    1 +
 src/Text3.cpp                                      |   20 +-
 src/frontends/qt/FindAndReplace.cpp                |   81 +++++-
 src/frontends/qt/FindAndReplace.h                  |    7 +
 src/frontends/qt/ui/FindAndReplaceUi.ui            |  157 ++++++++--
 src/frontends/qt/ui/PrefEditUi.ui                  |    9 +-
 src/insets/InsetBibtex.cpp                         |    2 +-
 src/insets/InsetBranch.cpp                         |    4 +-
 src/insets/InsetInclude.cpp                        |    4 +-
 src/insets/InsetIndex.cpp                          |    2 +-
 src/insets/InsetNote.cpp                           |   14 +-
 src/insets/InsetQuotes.cpp                         |    4 +-
 src/insets/InsetSpace.cpp                          |   82 ++++--
 src/lyxfind.cpp                                    |  308 +++++++++++++++----
 src/mathed/InsetMathHull.cpp                       |    6 +-
 src/mathed/InsetMathNest.cpp                       |    2 +-
 src/output_latex.cpp                               |   28 +-
 52 files changed, 1199 insertions(+), 462 deletions(-)
 rename autotests/export/latex/{lyxbugs => lyxbugs-resolved}/6197-polish-amssymb.lyx \
(91%)


hooks/post-receive
-- 
Repository for new features



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


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic