}
bv->putSelectionAt(doc_iterator_begin(&buf), 0, false);
- if (num)
- buf.markDirty();
cur_orig.fixIfBroken();
bv->setCursor(cur_orig);
return pair<bool, int>(false, 0);
cap::replaceSelectionWithString(cur, replacestr, forward);
- bv->buffer().markDirty();
+ if (forward) {
+ cur.pos() += replacestr.length();
+ LASSERT(cur.pos() <= cur.lastpos(), /* */);
+ } else {
+ cur.pos() -= replacestr.length();
+ LASSERT(cur.pos() >= 0, /* */);
+ }
findOne(bv, searchstr, case_sens, whole, forward, false);
return pair<bool, int>(true, 1);
TexRow texrow;
odocstringstream ods;
+ otexstream os(ods);
OutputParams runparams(&buf.params().encoding());
runparams.nice = false;
runparams.flavor = OutputParams::LATEX;
runparams.dryrun = true;
if (cur.inTexted()) {
- // @TODO what about searching beyond/across paragraph breaks ?
- ParagraphList::const_iterator pit = cur.innerText()->paragraphs().begin();
- for (int i = 0; i < cur.pit(); ++i)
- ++pit;
- pos_type const endpos = (len == -1 || cur.pos() + len > int(pit->size()))
- ? pit->size() : cur.pos() + len;
- TeXOnePar(buf, *cur.innerText(), pit, ods, texrow, runparams, string(),
- cur.pos(), endpos);
+ // @TODO what about searching beyond/across paragraph breaks ?
+ pos_type endpos = cur.paragraph().size();
+ if (len != -1 && endpos > cur.pos() + len)
+ endpos = cur.pos() + len;
+ TeXOnePar(buf, *cur.innerText(), cur.pit(), os, texrow, runparams,
+ string(), cur.pos(), endpos);
LYXERR(Debug::FIND, "Latexified text: '" << lyx::to_utf8(ods.str()) << "'");
} else if (cur.inMathed()) {
// Retrieve the math environment type, and add '$' or '$[' or others (\begin{equation}) accordingly
docstring stringifyFromForSearch(FindAndReplaceOptions const & opt,
DocIterator const & cur, int len)
{
+ LASSERT(cur.pos() >= 0 && cur.pos() <= cur.lastpos(), /* */);
if (!opt.ignoreformat)
return latexifyFromCursor(cur, len);
else
Buffer repl_buffer("", false);
repl_buffer.setUnnamed(true);
LASSERT(repl_buffer.readString(lyx), /**/);
- repl_buffer.changeLanguage(
- repl_buffer.language(),
- cur.getFont().language());
if (opt.keep_case && sel_len >= 2) {
if (cur.inTexted()) {
if (firstUppercase(cur))
}
cap::cutSelection(cur, false, false);
if (!cur.inMathed()) {
+ repl_buffer.changeLanguage(
+ repl_buffer.language(),
+ cur.getFont().language());
LYXERR(Debug::FIND, "Replacing by pasteParagraphList()ing repl_buffer");
+ LYXERR(Debug::FIND, "Before pasteParagraphList() cur=" << cur << endl);
cap::pasteParagraphList(cur, repl_buffer.paragraphs(),
repl_buffer.params().documentClassPtr(),
bv->buffer().errorList("Paste"));
+ LYXERR(Debug::FIND, "After pasteParagraphList() cur=" << cur << endl);
+ sel_len = repl_buffer.paragraphs().begin()->size();
} else {
odocstringstream ods;
+ otexstream os(ods);
OutputParams runparams(&repl_buffer.params().encoding());
runparams.nice = false;
runparams.flavor = OutputParams::LATEX;
runparams.linelen = 8000; //lyxrc.plaintext_linelen;
runparams.dryrun = true;
TexRow texrow;
- TeXOnePar(repl_buffer, repl_buffer.text(),
- repl_buffer.paragraphs().begin(), ods, texrow, runparams);
+ TeXOnePar(repl_buffer, repl_buffer.text(), 0, os, texrow, runparams);
//repl_buffer.getSourceCode(ods, 0, repl_buffer.paragraphs().size(), false);
docstring repl_latex = ods.str();
LYXERR(Debug::FIND, "Latexified replace_buffer: '" << repl_latex << "'");
regex_replace(s, s, "\\\\\\[(.*)\\\\\\]", "$1");
repl_latex = from_utf8(s);
LYXERR(Debug::FIND, "Replacing by niceInsert()ing latex: '" << repl_latex << "'");
- cur.niceInsert(repl_latex);
+ sel_len = cur.niceInsert(repl_latex);
}
- bv->buffer().markDirty();
- cur.pos() -= repl_buffer.paragraphs().begin()->size();
- bv->putSelectionAt(DocIterator(cur), repl_buffer.paragraphs().begin()->size(), !opt.forward);
+ cur.pos() -= sel_len;
+ if (cur.pos() < 0)
+ cur.pos() = 0;
+ LYXERR(Debug::FIND, "Putting selection at cur=" << cur << " with len: " << sel_len);
+ bv->putSelectionAt(DocIterator(cur), sel_len, !opt.forward);
bv->processUpdateFlags(Update::Force);
}
bool findAdv(BufferView * bv, FindAndReplaceOptions const & opt)
{
DocIterator cur;
- int match_len;
+ int match_len = 0;
if (opt.search.empty()) {
bv->message(_("Search text is empty!"));