mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-25 02:49:46 +00:00
Amend 4730ec78
: FindAdv: sometimes a space is added on some math symbols
Restrict the removing to math insets
This commit is contained in:
parent
e80fdf38e4
commit
4bdc7b74ed
@ -1276,6 +1276,16 @@ static string latexNamesToUtf8(docstring strIn, bool withformat)
|
|||||||
return add;
|
return add;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool isPartOfMath(Paragraph const & par)
|
||||||
|
{
|
||||||
|
if (par.size() < 1)
|
||||||
|
return false;
|
||||||
|
const Inset * isInset = par.getInset(par.size()-1);
|
||||||
|
if (isInset == nullptr)
|
||||||
|
return false;
|
||||||
|
return isInset->inMathed();
|
||||||
|
}
|
||||||
|
|
||||||
static docstring stringifySearchBuffer(Buffer & buffer, FindAndReplaceOptions const & opt)
|
static docstring stringifySearchBuffer(Buffer & buffer, FindAndReplaceOptions const & opt)
|
||||||
{
|
{
|
||||||
docstring str;
|
docstring str;
|
||||||
@ -1298,6 +1308,8 @@ static docstring stringifySearchBuffer(Buffer & buffer, FindAndReplaceOptions co
|
|||||||
runparams.find_add_feature(OutputParams::SearchNonOutput);
|
runparams.find_add_feature(OutputParams::SearchNonOutput);
|
||||||
}
|
}
|
||||||
string t("");
|
string t("");
|
||||||
|
// Only check if the very last entry is inside math to remove trailing space
|
||||||
|
bool isMathInset = false;
|
||||||
for (pos_type pit = pos_type(0); pit < (pos_type)buffer.paragraphs().size(); ++pit) {
|
for (pos_type pit = pos_type(0); pit < (pos_type)buffer.paragraphs().size(); ++pit) {
|
||||||
Paragraph const & par = buffer.paragraphs().at(pit);
|
Paragraph const & par = buffer.paragraphs().at(pit);
|
||||||
string add = latexNamesToUtf8(par.asString(pos_type(0), par.size(),
|
string add = latexNamesToUtf8(par.asString(pos_type(0), par.size(),
|
||||||
@ -1306,12 +1318,13 @@ static docstring stringifySearchBuffer(Buffer & buffer, FindAndReplaceOptions co
|
|||||||
LYXERR(Debug::FINDVERBOSE, "Adding to search string: '"
|
LYXERR(Debug::FINDVERBOSE, "Adding to search string: '"
|
||||||
<< add << "'");
|
<< add << "'");
|
||||||
t += add;
|
t += add;
|
||||||
|
isMathInset = isPartOfMath(par);
|
||||||
}
|
}
|
||||||
// Even in ignore-format we have to remove "\text{}, \lyxmathsym{}" parts
|
// Even in ignore-format we have to remove "\text{}, \lyxmathsym{}" parts
|
||||||
while (regex_replace(t, t, "\\\\(text|lyxmathsym|ensuremath)\\{([^\\}]*)\\}", "$2"));
|
while (regex_replace(t, t, "\\\\(text|lyxmathsym|ensuremath)\\{([^\\}]*)\\}", "$2"));
|
||||||
// remove trailing space, it may have been added by plaintext() in InsetMathHull.cpp
|
// remove trailing space, it may have been added by plaintext() in InsetMathHull.cpp
|
||||||
size_t t_size = t.size();
|
size_t t_size = t.size();
|
||||||
if (opt.ignoreformat && (t_size > 1) && (t[t_size-1] == ' '))
|
if (opt.ignoreformat && (t_size > 1) && (t[t_size-1] == ' ') && isMathInset)
|
||||||
str = from_utf8(t.substr(0, t_size-1));
|
str = from_utf8(t.substr(0, t_size-1));
|
||||||
else
|
else
|
||||||
str = from_utf8(t);
|
str = from_utf8(t);
|
||||||
@ -4098,9 +4111,16 @@ string MatchStringAdv::convertLF2Space(docstring const &s, bool ignore_format) c
|
|||||||
return(t.str());
|
return(t.str());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static string showPos(DocIterator const & cur)
|
||||||
|
{
|
||||||
|
stringstream a;
|
||||||
|
a << "[idx(" << cur.idx() << "),pit(" << cur.pit() << "),pos(" << cur.pos() << "),depth(" << cur.depth() << ")]";
|
||||||
|
return(a.str());
|
||||||
|
}
|
||||||
|
|
||||||
docstring stringifyFromCursor(DocIterator const & cur, int len)
|
docstring stringifyFromCursor(DocIterator const & cur, int len)
|
||||||
{
|
{
|
||||||
LYXERR(Debug::FINDVERBOSE, "Stringifying with len=" << len << " from cursor at pos: " << cur);
|
LYXERR(Debug::FINDVERBOSE, "Stringifying with len=" << len << " from cursor at " << showPos(cur));
|
||||||
if (cur.inTexted()) {
|
if (cur.inTexted()) {
|
||||||
Paragraph const & par = cur.paragraph();
|
Paragraph const & par = cur.paragraph();
|
||||||
// TODO what about searching beyond/across paragraph breaks ?
|
// TODO what about searching beyond/across paragraph breaks ?
|
||||||
@ -4122,8 +4142,8 @@ docstring stringifyFromCursor(DocIterator const & cur, int len)
|
|||||||
if (ignoreFormats.getNonContent()) {
|
if (ignoreFormats.getNonContent()) {
|
||||||
runparams.find_add_feature(OutputParams::SearchNonOutput);
|
runparams.find_add_feature(OutputParams::SearchNonOutput);
|
||||||
}
|
}
|
||||||
LYXERR(Debug::FINDVERBOSE, "Stringifying with cur: "
|
LYXERR(Debug::FINDVERBOSE, "Stringifying with cur = "
|
||||||
<< cur << ", from pos: " << cur.pos() << ", end: " << end);
|
<< showPos(cur) << ", to end: " << end);
|
||||||
docstring res = from_utf8(latexNamesToUtf8(par.asString(cur.pos(), end,
|
docstring res = from_utf8(latexNamesToUtf8(par.asString(cur.pos(), end,
|
||||||
option,
|
option,
|
||||||
&runparams), false));
|
&runparams), false));
|
||||||
@ -4143,7 +4163,7 @@ docstring stringifyFromCursor(DocIterator const & cur, int len)
|
|||||||
LYXERR(Debug::FINDVERBOSE|Debug::FIND, "Stringified math from pos(" << cur.pos() << ") len(" << len << "): " << res);
|
LYXERR(Debug::FINDVERBOSE|Debug::FIND, "Stringified math from pos(" << cur.pos() << ") len(" << len << "): " << res);
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
LYXERR(Debug::FINDVERBOSE|Debug::FIND, "Don't know how to stringify from here: " << cur);
|
LYXERR(Debug::FINDVERBOSE|Debug::FIND, "Don't know how to stringify from here: " << showPos(cur));
|
||||||
return docstring();
|
return docstring();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4154,7 +4174,7 @@ docstring stringifyFromCursor(DocIterator const & cur, int len)
|
|||||||
docstring latexifyFromCursor(DocIterator const & cur, int len)
|
docstring latexifyFromCursor(DocIterator const & cur, int len)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
LYXERR(Debug::FINDVERBOSE, "Latexifying with len=" << len << " from cursor at pos: " << cur);
|
LYXERR(Debug::FINDVERBOSE, "Latexifying with len=" << len << " from cursor at " << showPos(cur));
|
||||||
LYXERR(Debug::FINDVERBOSE, " with cur.lastpost=" << cur.lastpos() << ", cur.lastrow="
|
LYXERR(Debug::FINDVERBOSE, " with cur.lastpost=" << cur.lastpos() << ", cur.lastrow="
|
||||||
<< cur.lastrow() << ", cur.lastcol=" << cur.lastcol());
|
<< cur.lastrow() << ", cur.lastcol=" << cur.lastcol());
|
||||||
*/
|
*/
|
||||||
@ -4221,7 +4241,7 @@ docstring latexifyFromCursor(DocIterator const & cur, int len)
|
|||||||
}
|
}
|
||||||
LYXERR(Debug::FINDVERBOSE|Debug::FIND, "Latexified math from pos(" << cur.pos() << ") len(" << len << "): " << ods.str());
|
LYXERR(Debug::FINDVERBOSE|Debug::FIND, "Latexified math from pos(" << cur.pos() << ") len(" << len << "): " << ods.str());
|
||||||
} else {
|
} else {
|
||||||
LYXERR(Debug::FINDVERBOSE|Debug::FIND, "Don't know how to stringify from here: " << cur);
|
LYXERR(Debug::FINDVERBOSE|Debug::FIND, "Don't know how to stringify from here: " << showPos(cur));
|
||||||
}
|
}
|
||||||
return ods.str();
|
return ods.str();
|
||||||
}
|
}
|
||||||
@ -4425,7 +4445,7 @@ int findForwardAdv(DocIterator & cur, MatchStringAdv & match)
|
|||||||
cur = orig_cur;
|
cur = orig_cur;
|
||||||
while (!theApp()->longOperationCancelled() && cur) {
|
while (!theApp()->longOperationCancelled() && cur) {
|
||||||
//(void) findAdvForwardInnermost(cur);
|
//(void) findAdvForwardInnermost(cur);
|
||||||
LYXERR(Debug::FINDVERBOSE, "findForwardAdv() cur: " << cur);
|
LYXERR(Debug::FINDVERBOSE, "findForwardAdv() cur: " << showPos(cur));
|
||||||
MatchResult mres = match(cur, -1, MatchStringAdv::MatchAnyPlace);
|
MatchResult mres = match(cur, -1, MatchStringAdv::MatchAnyPlace);
|
||||||
string msg = "Starting";
|
string msg = "Starting";
|
||||||
if (repeat > 0)
|
if (repeat > 0)
|
||||||
@ -4444,7 +4464,7 @@ int findForwardAdv(DocIterator & cur, MatchStringAdv & match)
|
|||||||
// This should exit nested insets, if any, or otherwise undefine the currsor.
|
// This should exit nested insets, if any, or otherwise undefine the currsor.
|
||||||
cur.pos() = cur.lastpos();
|
cur.pos() = cur.lastpos();
|
||||||
}
|
}
|
||||||
LYXERR(Debug::FINDVERBOSE, "Advancing pos: cur=" << cur);
|
LYXERR(Debug::FINDVERBOSE, "Advancing pos: cur=" << showPos(cur));
|
||||||
cur.forwardPos();
|
cur.forwardPos();
|
||||||
}
|
}
|
||||||
else { // match_len > 0
|
else { // match_len > 0
|
||||||
@ -4542,7 +4562,7 @@ MatchResult findMostBackwards(DocIterator & cur, MatchStringAdv const & match, M
|
|||||||
MatchResult mr = findAdvFinalize(tmp_cur, match, expected);
|
MatchResult mr = findAdvFinalize(tmp_cur, match, expected);
|
||||||
Inset & inset = cur.inset();
|
Inset & inset = cur.inset();
|
||||||
for (; cur != cur_begin; cur.backwardPos()) {
|
for (; cur != cur_begin; cur.backwardPos()) {
|
||||||
LYXERR(Debug::FINDVERBOSE, "findMostBackwards(): cur=" << cur);
|
LYXERR(Debug::FINDVERBOSE, "findMostBackwards(): cur=" << showPos(cur));
|
||||||
DocIterator new_cur = cur;
|
DocIterator new_cur = cur;
|
||||||
new_cur.backwardPos();
|
new_cur.backwardPos();
|
||||||
if (new_cur == cur || &new_cur.inset() != &inset
|
if (new_cur == cur || &new_cur.inset() != &inset
|
||||||
@ -4553,7 +4573,7 @@ MatchResult findMostBackwards(DocIterator & cur, MatchStringAdv const & match, M
|
|||||||
break;
|
break;
|
||||||
mr = new_mr;
|
mr = new_mr;
|
||||||
}
|
}
|
||||||
LYXERR(Debug::FINDVERBOSE, "findMostBackwards(): exiting with cur=" << cur);
|
LYXERR(Debug::FINDVERBOSE, "findMostBackwards(): exiting with cur=" << showPos(cur));
|
||||||
return mr;
|
return mr;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4579,12 +4599,12 @@ int findBackwardsAdv(DocIterator & cur, MatchStringAdv & match)
|
|||||||
cur.pos() = cur.lastpos();
|
cur.pos() = cur.lastpos();
|
||||||
else
|
else
|
||||||
cur.pos() = cur_orig.pos();
|
cur.pos() = cur_orig.pos();
|
||||||
LYXERR(Debug::FINDVERBOSE, "findBackAdv2: cur: " << cur);
|
LYXERR(Debug::FINDVERBOSE, "findBackAdv2: cur: " << showPos(cur));
|
||||||
DocIterator cur_prev_iter;
|
DocIterator cur_prev_iter;
|
||||||
do {
|
do {
|
||||||
found_match = match(cur, -1, MatchStringAdv::MatchFromStart);
|
found_match = match(cur, -1, MatchStringAdv::MatchFromStart);
|
||||||
LYXERR(Debug::FINDVERBOSE, "findBackAdv3: found_match="
|
LYXERR(Debug::FINDVERBOSE, "findBackAdv3: found_match="
|
||||||
<< (found_match.match_len > 0) << ", cur: " << cur);
|
<< (found_match.match_len > 0) << ", cur: " << showPos(cur));
|
||||||
if (found_match.match_len > 0) {
|
if (found_match.match_len > 0) {
|
||||||
MatchResult found_mr = findMostBackwards(cur, match, found_match);
|
MatchResult found_mr = findMostBackwards(cur, match, found_match);
|
||||||
if (found_mr.pos_len > 0) {
|
if (found_mr.pos_len > 0) {
|
||||||
@ -4665,7 +4685,7 @@ static bool firstUppercase(Cursor const & cur)
|
|||||||
char_type ch1, ch2;
|
char_type ch1, ch2;
|
||||||
pos_type pos = cur.selectionBegin().pos();
|
pos_type pos = cur.selectionBegin().pos();
|
||||||
if (pos >= cur.lastpos() - 1) {
|
if (pos >= cur.lastpos() - 1) {
|
||||||
LYXERR(Debug::FINDVERBOSE, "No upper-case at cur: " << cur);
|
LYXERR(Debug::FINDVERBOSE, "No upper-case at cur: " << showPos(cur));
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
ch1 = cur.paragraph().getChar(pos);
|
ch1 = cur.paragraph().getChar(pos);
|
||||||
@ -4773,12 +4793,12 @@ static int findAdvReplace(BufferView * bv, FindAndReplaceOptions const & opt, Ma
|
|||||||
repl_buffer.language(),
|
repl_buffer.language(),
|
||||||
cur.getFont().language());
|
cur.getFont().language());
|
||||||
LYXERR(Debug::FINDVERBOSE, "Replacing by pasteParagraphList()ing repl_buffer");
|
LYXERR(Debug::FINDVERBOSE, "Replacing by pasteParagraphList()ing repl_buffer");
|
||||||
LYXERR(Debug::FINDVERBOSE, "Before pasteParagraphList() cur=" << cur << endl);
|
LYXERR(Debug::FINDVERBOSE, "Before pasteParagraphList() cur=" << showPos(cur) << endl);
|
||||||
cap::pasteParagraphList(cur, repl_buffer.paragraphs(),
|
cap::pasteParagraphList(cur, repl_buffer.paragraphs(),
|
||||||
repl_buffer.params().documentClassPtr(),
|
repl_buffer.params().documentClassPtr(),
|
||||||
repl_buffer.params().authors(),
|
repl_buffer.params().authors(),
|
||||||
bv->buffer().errorList("Paste"));
|
bv->buffer().errorList("Paste"));
|
||||||
LYXERR(Debug::FINDVERBOSE, "After pasteParagraphList() cur=" << cur << endl);
|
LYXERR(Debug::FINDVERBOSE, "After pasteParagraphList() cur=" << showPos(cur) << endl);
|
||||||
sel_len = repl_buffer.paragraphs().begin()->size();
|
sel_len = repl_buffer.paragraphs().begin()->size();
|
||||||
} else if (cur.inMathed()) {
|
} else if (cur.inMathed()) {
|
||||||
odocstringstream ods;
|
odocstringstream ods;
|
||||||
@ -4795,18 +4815,18 @@ static int findAdvReplace(BufferView * bv, FindAndReplaceOptions const & opt, Ma
|
|||||||
(void)regex_replace(to_utf8(repl_latex), s, "\\$(.*)\\$", "$1");
|
(void)regex_replace(to_utf8(repl_latex), s, "\\$(.*)\\$", "$1");
|
||||||
(void)regex_replace(s, s, "\\\\\\[(.*)\\\\\\]", "$1");
|
(void)regex_replace(s, s, "\\\\\\[(.*)\\\\\\]", "$1");
|
||||||
repl_latex = from_utf8(s);
|
repl_latex = from_utf8(s);
|
||||||
LYXERR(Debug::FINDVERBOSE, "Replacing by insert()ing latex: '" << repl_latex << "' cur=" << cur << " with depth=" << cur.depth());
|
LYXERR(Debug::FINDVERBOSE, "Replacing by insert()ing latex: '" << repl_latex << "' cur=" << showPos(cur) );
|
||||||
MathData ar(cur.buffer());
|
MathData ar(cur.buffer());
|
||||||
asArray(repl_latex, ar, Parse::NORMAL);
|
asArray(repl_latex, ar, Parse::NORMAL);
|
||||||
cur.insert(ar);
|
cur.insert(ar);
|
||||||
sel_len = ar.size();
|
sel_len = ar.size();
|
||||||
LYXERR(Debug::FINDVERBOSE, "After insert() cur=" << cur << " with depth: " << cur.depth() << " and len: " << sel_len);
|
LYXERR(Debug::FINDVERBOSE, "After insert() cur=" << showPos(cur) << " and len: " << sel_len);
|
||||||
}
|
}
|
||||||
if (cur.pos() >= sel_len)
|
if (cur.pos() >= sel_len)
|
||||||
cur.pos() -= sel_len;
|
cur.pos() -= sel_len;
|
||||||
else
|
else
|
||||||
cur.pos() = 0;
|
cur.pos() = 0;
|
||||||
LYXERR(Debug::FINDVERBOSE, "After pos adj cur=" << cur << " with depth: " << cur.depth() << " and len: " << sel_len);
|
LYXERR(Debug::FINDVERBOSE, "After pos adj cur=" << showPos(cur) << " and len: " << sel_len);
|
||||||
bv->putSelectionAt(DocIterator(cur), sel_len, !opt.forward);
|
bv->putSelectionAt(DocIterator(cur), sel_len, !opt.forward);
|
||||||
bv->processUpdateFlags(Update::Force);
|
bv->processUpdateFlags(Update::Force);
|
||||||
return 1;
|
return 1;
|
||||||
@ -4926,7 +4946,7 @@ bool findAdv(BufferView * bv, FindAndReplaceOptions & opt)
|
|||||||
// Should never happen, maybe LASSERT() here?
|
// Should never happen, maybe LASSERT() here?
|
||||||
pos_len = cur.lastpos() - cur.pos();
|
pos_len = cur.lastpos() - cur.pos();
|
||||||
}
|
}
|
||||||
LYXERR(Debug::FINDVERBOSE|Debug::FIND, "Putting selection at cur=" << cur << " with len: " << pos_len);
|
LYXERR(Debug::FINDVERBOSE|Debug::FIND, "Putting selection at cur=" << showPos(cur) << " with len: " << pos_len);
|
||||||
bv->putSelectionAt(cur, pos_len, !opt.forward);
|
bv->putSelectionAt(cur, pos_len, !opt.forward);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
Loading…
Reference in New Issue
Block a user