From: Kornel Benko Date: Tue, 13 Nov 2018 11:11:33 +0000 (+0100) Subject: FindAdv: Significantly increase the search speed X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=ed5ea4a03b3ddb2d7e145841caaf53cf897a427f;p=features.git FindAdv: Significantly increase the search speed The needed time to find a simple string dependes on the paragraph length was O(n^2) Now it is down to O(n). Before: To determine if the pattern matches we compared the paragraph from current position to the its end. Increment current position if no match Now: Check if the character at current position has at least the needed features (text, color, language etc) If not, Increment current position else proceed as before --- diff --git a/src/lyxfind.cpp b/src/lyxfind.cpp index 6cc57f4916..2fd36e289e 100644 --- a/src/lyxfind.cpp +++ b/src/lyxfind.cpp @@ -1630,7 +1630,7 @@ void LatexInfo::buildKeys(bool isPatternString) // No split makeKey("backslash|textbackslash|textasciicircum|textasciitilde|ldots", KeyInfo(KeyInfo::isChar, 1, false), isPatternString); // Found in fr/UserGuide.lyx - makeKey("og|fg", KeyInfo(KeyInfo::isChar, 0, false), isPatternString); + makeKey("og|fg|textvisiblespace", KeyInfo(KeyInfo::isChar, 0, false), isPatternString); // Known macros to remove (including their parameter) // No split @@ -2281,6 +2281,8 @@ static int computeSize(string s, int len) skip++; else if ((s[i+j] == '{') && s[i+j+1] == '}') skip += 2; + else if ((s[i+j] == '{') && (i + j + 1 >= len)) + skip++; break; } skip++; @@ -2693,6 +2695,9 @@ int findForwardAdv(DocIterator & cur, MatchStringAdv & match) int match_len_zero_count = 0; for (; !theApp()->longOperationCancelled() && cur; cur.forwardPos()) { LYXERR(Debug::FIND, "Advancing cur: " << cur); + int match_len3 = match(cur, 1); + if (match_len3 < 0) + continue; int match_len2 = match(cur); LYXERR(Debug::FIND, "match_len2: " << match_len2); if (match_len2 > 0) {