]> git.lyx.org Git - lyx.git/blobdiff - src/lyxfind.cpp
Help avoiding shortcut clashes by discriminating strings.
[lyx.git] / src / lyxfind.cpp
index 1750e2f0925d294d1462d5f83ea7a6c30df95d26..1e45b6502bbd230caf429244527c1f5d772cbd76 100644 (file)
@@ -914,6 +914,7 @@ docstring latexifyFromCursor(DocIterator const & cur, int len)
 
        TexRow texrow;
        odocstringstream ods;
+       otexstream os(ods);
        OutputParams runparams(&buf.params().encoding());
        runparams.nice = false;
        runparams.flavor = OutputParams::LATEX;
@@ -926,7 +927,7 @@ docstring latexifyFromCursor(DocIterator const & cur, int len)
                pos_type endpos = cur.paragraph().size();
                if (len != -1 && endpos > cur.pos() + len)
                        endpos = cur.pos() + len;
-               TeXOnePar(buf, *cur.innerText(), cur.pit(), ods, texrow, runparams,
+               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()) {
@@ -1107,6 +1108,7 @@ int findBackwardsAdv(DocIterator & cur, MatchStringAdv & match) {
 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
@@ -1196,9 +1198,6 @@ static void findAdvReplace(BufferView * bv, FindAndReplaceOptions const & opt, M
        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))
@@ -1209,21 +1208,26 @@ static void findAdvReplace(BufferView * bv, FindAndReplaceOptions const & opt, M
        }
        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(), 0, 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 << "'");
@@ -1232,11 +1236,13 @@ static void findAdvReplace(BufferView * bv, FindAndReplaceOptions const & opt, M
                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);
        }
-       cur.pos() -= repl_buffer.paragraphs().begin()->size();
-       LYXERR(Debug::FIND, "Putting selection at cur=" << cur << " with len: " << 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);
 }