commit 6c735efb1fa34e167f0ae9f4a40f8127631200c3
Author: Kornel Benko <[email protected]>
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)
---
src/Paragraph.cpp | 3 ++
src/lyxfind.cpp | 95 +++++++++++++++++++++++++++++++++++++++++++++++-----
2 files changed, 88 insertions(+), 10 deletions(-)
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);
--
lyx-cvs mailing list
[email protected]
http://lists.lyx.org/mailman/listinfo/lyx-cvs