Changes to match math equations

Now tests findadv-01 ... findadv-20 pass too.

keytest.py: Expanded time for controll keys (like \[Return])
findadv*: expanded time for normal keys
lyxfind.cpp: Handle math equations
This commit is contained in:
Kornel Benko 2018-10-28 19:40:14 +01:00
parent 645d42f451
commit 2d477c5e0a
12 changed files with 98 additions and 17 deletions

View File

@ -3,11 +3,17 @@
#
Lang it_IT.utf8
CO: findadv-01.ctrl
KD: 100
TestBegin test.lyx -dbg key,find > findadv-01.loga.txt 2>&1
KK: aaa\[Home]
KK: \CF
Sleep 1
KK: a\[Tab]
KK: aba\[Return]\[Return]\[Return]
Sleep 1
KK: aba
KK: \[Return]
Sleep 1
KK: \[Return]\[Return]
KK: \Cs
KK: \Axbuffer-export latex\[Return]
CR: ^abaabaa$

View File

@ -3,13 +3,20 @@
Lang it_IT.utf8
CO: findadv-02.ctrl
TestBegin test.lyx -dbg key,find > findadv-02.loga.txt 2>&1
KD: 50
KK: \Cm
KK: x^(a) +\\frac 1+x^(a) \[Down]1-x^(a) \C\[Home]
KK: \CF
KK: \Cmx^(a) \[Tab]
Sleep 1
KK: \Cmx_a
KK: \[Return]\[Return]\[Return]
KK: \[Return]
Sleep 1
KK: \[Return]
Sleep 1
KK: \[Return]
KK: \Cs
KD: 10
KK: \Axbuffer-export latex\[Return]
CR: ^\$x_\{a\}\+\\frac\{1\+x_\{a\}\}\{1-x\^\{\(a\)\}\}\$$
CC:

View File

@ -3,6 +3,7 @@
Lang sk_SK.utf8
CO: findadv-05.ctrl
TestBegin test.lyx -dbg key,find > findadv-05.loga.txt 2>&1
KD: 50
CN: Part 1
KK: foo \Cefoo foo\Ce foo\C\[Home]
KK: \Cs

View File

@ -3,6 +3,7 @@
Lang sk_SK.utf8
CO: findadv-06.ctrl
TestBegin test.lyx -dbg key,find > findadv-06.loga.txt 2>&1
KD: 50
CN: Part 1
KK: foo\[Return]
KK: \Ao2

View File

@ -3,6 +3,7 @@
Lang sk_SK.utf8
CO: findadv-07.ctrl
TestBegin test.lyx -dbg key,find > findadv-07.loga.txt 2>&1
KD: 100
CN: Part 1
KK: foo bar\[Return]
#select itemized
@ -15,6 +16,7 @@ KK: \Axdialog-show findreplaceadv\[Return]
# Uncheck ignore format
KK: \At\Ai\Ah
KK: \Aob
Sleep 1
KK: foo\[Return]
CP: Putting selection at .*idx: 0 par: 1 pos: 0\n with len: 3
#
@ -26,6 +28,7 @@ KK: \[Delete]
# Uncheck ignore format
#KK: \At\Ai\Ah
KK: \Aob
Sleep 1
KK: bar\[Return]
CP: Putting selection at .*idx: 0 par: 1 pos: 4\n with len: 3
TestEnd

View File

@ -6,6 +6,7 @@ PrepareShortcuts
Lang sk_SK.utf8
CO: findadv-08.ctrl
TestBegin test.lyx -dbg key,find > findadv-08.loga.txt 2>&1
KD: 100
CN: Part 1
Cr: ^.*Putting
CP: Key (queried) [action=buffer-begin][Ctrl+Home]

View File

@ -3,6 +3,7 @@
Lang it_IT.utf8
CO: findadv-11.ctrl
TestBegin test.lyx -dbg key,find > findadv-11.loga.txt 2>&1
KD: 200
CN: Part 1
KK: \Cm
KK: x_v \C\[Home]

View File

@ -4,6 +4,7 @@
Lang sk_SK.utf8
CO: findadv-14.ctrl
TestBegin test.lyx -dbg key,find > findadv-14.loga.txt 2>&1
KD: 100
CN: Part 1
KK: \Amd
KK: x^2 +x^2\C\[Home]

View File

@ -3,6 +3,7 @@
Lang it_IT.utf8
CO: findadv-19.ctrl
TestBegin test.lyx -dbg key,find > findadv-19.loga.txt 2>&1
KD: 50
KK: Hello world world!\C\[Home]
KK: \Cs
KK: \CF

View File

@ -593,7 +593,7 @@ if qt_frontend is None:
qt_frontend = 'QT4'
if qt_frontend == 'QT5':
# Some tests sometimes failed with value 0.01 on Qt5.8
controlkey_delay = 0.02
controlkey_delay = 0.4
else:
controlkey_delay = 0.4

View File

@ -1279,8 +1279,9 @@ int Intervall::findclosing(int start, int end)
void LatexInfo::buildEntries(bool isPatternString)
{
static regex const rmath("\\\\(begin|end)\\{((eqnarray|equation|flalign|gather|multiline|align)\\*?)\\}");
static regex const rkeys("\\\\((([a-zA-Z]+\\*?)(\\{([a-z]+\\*?)\\}|=[0-9]+[a-z]+)?))");
static regex const rmath("\\$|\\\\\\[|\\\\\\]|\\\\(begin|end)\\{((eqnarray|equation|flalign|gather|multiline|align)\\*?)\\}");
static regex const rkeys("\\$|\\\\\\[|\\\\\\]|\\\\((([a-zA-Z]+\\*?)(\\{([a-z]+\\*?)\\}|=[0-9]+[a-z]+)?))");
static bool disableLanguageOverride = false;
smatch sub, submath;
bool evaluatingRegexp = false;
KeyInfo found;
@ -1293,9 +1294,22 @@ void LatexInfo::buildEntries(bool isPatternString)
for (sregex_iterator itmath(interval.par.begin(), interval.par.end(), rmath), end; itmath != end; ++itmath) {
submath = *itmath;
if (math_end_waiting) {
if ((submath.str(1).compare("end") == 0) &&
size_t pos = submath.position(size_t(0));
if (math_end == "$") {
if ((submath.str(0) == "$") && (interval.par[pos-1] != '\\')) {
math_size = pos + 1 - math_pos;
math_end_waiting = false;
}
}
else if (math_end == "\\]") {
if (submath.str(0) == "\\]") {
math_size = pos + 2 - math_pos;
math_end_waiting = false;
}
}
else if ((submath.str(1).compare("end") == 0) &&
(submath.str(2).compare(math_end) == 0)) {
math_size = submath.position(size_t(0)) + submath.str(0).length() - math_pos;
math_size = pos + submath.str(0).length() - math_pos;
math_end_waiting = false;
}
}
@ -1305,10 +1319,44 @@ void LatexInfo::buildEntries(bool isPatternString)
math_end = submath.str(2);
math_pos = submath.position(size_t(0));
}
else if (submath.str(0).compare("\\[") == 0) {
math_end_waiting = true;
math_end = "\\]";
math_pos = submath.position(size_t(0));
}
else if (submath.str(0) == "$") {
size_t pos = submath.position(size_t(0));
if ((pos == 0) || (interval.par[pos-1] != '\\')) {
math_end_waiting = true;
math_end = "$";
math_pos = pos;
}
}
}
}
if (isPatternString) {
if (math_pos < interval.par.length()) {
// Disable language
keys["foreignlanguage"].disabled = true;
disableLanguageOverride = true;
}
else
disableLanguageOverride = false;
}
else {
if (disableLanguageOverride) {
keys["foreignlanguage"].disabled = true;
}
}
for (sregex_iterator it(interval.par.begin(), interval.par.end(), rkeys), end; it != end; ++it) {
sub = *it;
string key = sub.str(3);
if (key == "") {
if (sub.str(0)[0] == '\\')
key = sub.str(0)[1];
else
key = sub.str(0);
};
if (evaluatingRegexp) {
if (sub.str(1).compare("endregexp") == 0) {
evaluatingRegexp = false;
@ -1320,12 +1368,12 @@ void LatexInfo::buildEntries(bool isPatternString)
}
}
else {
if (keys.find(sub.str(3)) == keys.end()) {
if (keys.find(key) == keys.end()) {
LYXERR(Debug::FIND, "Found unknown key " << sub.str(0));
continue;
}
found = keys[sub.str(3)];
if (sub.str(3).compare("regexp") == 0) {
found = keys[key];
if (key.compare("regexp") == 0) {
evaluatingRegexp = true;
found._tokenstart = sub.position(size_t(0));
found._tokensize = 0;
@ -1337,7 +1385,7 @@ void LatexInfo::buildEntries(bool isPatternString)
continue;
else if (found.keytype == KeyInfo::isMath) {
if (size_t(sub.position(size_t(0))) == math_pos) {
found = keys[sub.str(3)];
found = keys[key];
found._tokenstart = sub.position(size_t(0));
found._tokensize = math_size;
found._dataEnd = found._tokenstart + found._tokensize;
@ -1364,14 +1412,14 @@ void LatexInfo::buildEntries(bool isPatternString)
found.head = sub.str(0);
}
else
found.head = "\\" + sub.str(3);
found.head = "\\" + key;
found._tokensize = found.head.length();
found._dataEnd = found._tokenstart + found._tokensize;
found._dataStart = found._dataEnd;
}
else {
if (found.parenthesiscount == 1) {
found.head = "\\" + sub.str(3) + "{";
found.head = "\\" + key + "{";
}
else if (found.parenthesiscount == 2) {
found.head = sub.str(0) + "{";
@ -1381,7 +1429,7 @@ void LatexInfo::buildEntries(bool isPatternString)
found._dataStart = found._tokenstart + found.head.length();
found._dataEnd = interval.findclosing(found._dataStart, interval.par.length());
if (isPatternString) {
keys[sub.str(3)].used = true;
keys[key].used = true;
}
}
}
@ -1455,9 +1503,11 @@ void LatexInfo::buildKeys(bool isPatternString)
// Survives, like known character
makeKey("lyx", KeyInfo(KeyInfo::isIgnored, 0, false), isPatternString);
makeKey("item", KeyInfo(KeyInfo::isChar, 0, false), isPatternString);
makeKey("begin", KeyInfo(KeyInfo::isMath, 1, false), isPatternString);
makeKey("end", KeyInfo(KeyInfo::isMath, 1, false), isPatternString);
makeKey("begin|end", KeyInfo(KeyInfo::isMath, 1, false), isPatternString);
makeKey("[|]", KeyInfo(KeyInfo::isMath, 1, false), isPatternString);
makeKey("$", KeyInfo(KeyInfo::isMath, 1, false), isPatternString);
makeKey("par|uldepth|ULdepth", KeyInfo(KeyInfo::doRemove, 0, true), isPatternString);
@ -1672,6 +1722,11 @@ int LatexInfo::dispatch(ostringstream &os, int previousStart, KeyInfo &actual)
case KeyInfo::isMain: {
if (actual.disabled) {
removeHead(actual);
if ((interval.par.substr(actual._dataStart, 3) == " \\[") ||
(interval.par.substr(actual._dataStart, 8) == " \\begin{")) {
// Discard also the space before math-equation
interval.addIntervall(actual._dataStart, actual._dataStart+1);
}
interval.resetOpenedP(actual._dataStart-1);
}
else {
@ -1802,7 +1857,7 @@ string splitOnKnownMacros(string par, bool isPatternString) {
s = os.str();
}
else
s = ""; /* found end */
s = par; /* no known macros found */
return s;
}

View File

@ -138,6 +138,10 @@ docstring stringifyFromForSearch(
DocIterator const & cur,
int len = -1);
/** Set format type to be ignore by search
**/
void setIgnoreFormat(std::string type, bool value);
} // namespace lyx
#endif // LYXFIND_H