]> git.lyx.org Git - features.git/blobdiff - src/Paragraph.cpp
Consider inset strings in simple find/replaceAll (#12049)
[features.git] / src / Paragraph.cpp
index 5930cb86a8dd57f6e3417b5dba96140d37656254..994098df484582bb48e876138917566a2bf2ac11 100644 (file)
@@ -5,7 +5,7 @@
  *
  * \author Asger Alstrup
  * \author Lars Gullik Bjønnes
- * \author Richard Heck (XHTML output)
+ * \author Richard Kimberly Heck (XHTML output)
  * \author Jean-Marc Lasgouttes
  * \author Angus Leeming
  * \author John Levon
@@ -1129,10 +1129,12 @@ void Paragraph::Private::latexSpecialChar(otexstream & os,
 {
        char_type const c = owner_->getUChar(bparams, runparams, i);
 
-       if (style.pass_thru || runparams.pass_thru
+       if (style.pass_thru || runparams.pass_thru || runparams.for_search
            || contains(style.pass_thru_chars, c)
            || contains(runparams.pass_thru_chars, c)) {
-               if (c != '\0') {
+               if ((c == '\\') && runparams.for_search)
+                       os << "\\\\";
+               else if (c != '\0') {
                        Encoding const * const enc = runparams.encoding;
                        if (enc && !enc->encodable(c))
                                throw EncodingException(c);
@@ -2625,7 +2627,6 @@ void Paragraph::latex(BufferParams const & bparams,
                                os << "}";
                                alien_script.clear();
                        }
-                       bool needPar = false;
                        if (in_ct_deletion) {
                                // We have to close and then reopen \lyxdeleted,
                                // as strikeout needs to be on lowest level.
@@ -2636,6 +2637,7 @@ void Paragraph::latex(BufferParams const & bparams,
                                // Force language closing
                                current_font.setLanguage(basefont.language());
                        Font const nextfont = (i == body_pos-1) ? basefont : current_font;
+                       bool needPar = false;
                        column += running_font.latexWriteEndChanges(
                                    os, bparams, runparams, basefont,
                                    nextfont, needPar);
@@ -2703,8 +2705,8 @@ void Paragraph::latex(BufferParams const & bparams,
                                if (in_ct_deletion) {
                                        // We have to close and then reopen \lyxdeleted,
                                        // as strikeout needs to be on lowest level.
-                                       bool needPar = false;
                                        OutputParams rp = runparams;
+                                       bool needPar = false;
                                        column += running_font.latexWriteEndChanges(
                                                os, bparams, rp, basefont,
                                                basefont, needPar);
@@ -4386,6 +4388,13 @@ int Paragraph::find(docstring const & str, bool cs, bool mw,
        int i = 0;
        pos_type const parsize = d->text_.size();
        for (i = 0; i < strsize && pos < parsize; ++i, ++pos) {
+               // ignore deleted matter
+               if (!del && isDeleted(pos)) {
+                       if (pos == parsize - 1)
+                               break;
+                       pos++;
+                       continue;
+               }
                // Ignore "invisible" letters such as ligature breaks
                // and hyphenation chars while searching
                while (pos < parsize - 1 && isInset(pos)) {
@@ -4394,16 +4403,19 @@ int Paragraph::find(docstring const & str, bool cs, bool mw,
                                break;
                        odocstringstream os;
                        inset->toString(os);
-                       if (!os.str().empty())
-                               break;
+                       if (!os.str().empty()) {
+                               int const insetstringsize = os.str().length();
+                               for (int j = 0; j < insetstringsize && pos < parsize; ++i, ++j) {
+                                       if (str[i] != os.str()[j])
+                                               break;
+                               }
+                       }
                        pos++;
                }
                if (cs && str[i] != d->text_[pos])
                        break;
                if (!cs && uppercase(str[i]) != uppercase(d->text_[pos]))
                        break;
-               if (!del && isDeleted(pos))
-                       break;
        }
 
        if (i != strsize)