From: Kornel Benko Date: Thu, 8 Nov 2018 08:59:51 +0000 (+0100) Subject: FindAdv: Polishing X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=c4d87090610d84a331f662121e4afea41011c69c;p=features.git FindAdv: Polishing 1.) Handle some unclosed parentheses Sometimes \shortcut is not correctly closed 2.) Added \ldots as known char 3.) Discard some shapes (circlepar, droppar, ...) 4.) Omit resulting empty string and use some value which cannot be matched instead --- diff --git a/src/lyxfind.cpp b/src/lyxfind.cpp index fe04f95c01..b547df92ee 100644 --- a/src/lyxfind.cpp +++ b/src/lyxfind.cpp @@ -1475,12 +1475,12 @@ void LatexInfo::buildEntries(bool isPatternString) else { // begin|end of unknown env, discard found = keys[key]; - // discard spaces and '%' before pos(0) + // discard spaces before pos(0) int pos = sub.position(size_t(0)); int count; for (count = 0; pos - count > 0; count++) { char c = interval.par[pos-count-1]; - if ((c != ' ') && (c != '%')) + if (c != ' ') break; } found.keytype = KeyInfo::doRemove; @@ -1533,7 +1533,16 @@ void LatexInfo::buildEntries(bool isPatternString) } found._tokensize = found.head.length(); found._dataStart = found._tokenstart + found.head.length(); - found._dataEnd = interval.findclosing(found._dataStart, interval.par.length()); + size_t endpos = interval.findclosing(found._dataStart, interval.par.length()); + if ((endpos == interval.par.length()) && + (found.keytype == KeyInfo::doRemove)) { + // Missing closing => error in latex-input? + // therefore do not delete remaining data + found._dataStart -= 1; + found._dataEnd = found._dataStart; + } + else + found._dataEnd = endpos; if (isPatternString) { keys[key].used = true; } @@ -1591,7 +1600,7 @@ void LatexInfo::buildKeys(bool isPatternString) // Know charaters // No split - makeKey("backslash|textbackslash|textasciicircum|textasciitilde", KeyInfo(KeyInfo::isChar, 1, false), isPatternString); + 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); @@ -1606,7 +1615,13 @@ void LatexInfo::buildKeys(bool isPatternString) // Same effect as previous, parameter will survive (because there is no one anyway) // No split makeKey("noindent", KeyInfo(KeyInfo::isStandard, 0, true), isPatternString); + // Remove table decorations makeKey("hline|tabularnewline|toprule|bottomrule|midrule", KeyInfo(KeyInfo::doRemove, 0, true), isPatternString); + // Discard shape-header + makeKey("circlepar|diamondpar|heartpar|nutpar", KeyInfo(KeyInfo::isStandard, 1, true), isPatternString); + makeKey("trianglerightpar|hexagonpar|starpar", KeyInfo(KeyInfo::isStandard, 1, true), isPatternString); + makeKey("triangleuppar|triangledownpar|droppar", KeyInfo(KeyInfo::isStandard, 1, true), isPatternString); + makeKey("triangleleftpar|shapepar|dropuppar", KeyInfo(KeyInfo::isStandard, 1, true), isPatternString); // like ('tiny{}' or '\tiny ' ... } makeKey("footnotesize|tiny|scriptsize|small|large|Large|LARGE|huge|Huge", KeyInfo(KeyInfo::isSize, 0, true), isPatternString); @@ -1846,7 +1861,7 @@ int LatexInfo::dispatch(ostringstream &os, int previousStart, KeyInfo &actual) break; } case KeyInfo::isSectioning: { - // Discard space before _tokenstart + // Discard spaces before _tokenstart int count; for (count = 0; count < actual._tokenstart; count++) { if (interval.par[actual._tokenstart-count-1] != ' ') @@ -2019,6 +2034,10 @@ string splitOnKnownMacros(string par, bool isPatternString) { (void) li.process(os, firstKey); } s = os.str(); + if (s.empty()) { + // return string definitelly impossible to match + s = "\\foreignlanguage{ignore}{ }"; + } } else s = par; /* no known macros found */