X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Flyxfind.C;h=fa6acb468fb2962dacf05f498e971a09e53ed288;hb=98c966c64594611e469313314abd1e59524adb4a;hp=1783959aa7323839b671a947dcdde2edbe66ea60;hpb=b78b32b554cb29a4f3c92ba68c7d3b51f90092c6;p=lyx.git diff --git a/src/lyxfind.C b/src/lyxfind.C index 1783959aa7..fa6acb468f 100644 --- a/src/lyxfind.C +++ b/src/lyxfind.C @@ -33,38 +33,38 @@ enum SearchResult { /// returns true if the specified string is at the specified position bool IsStringInText(Paragraph * par, pos_type pos, - string const & str, bool const & = true, - bool const & = false); + string const & str, bool const & = true, + bool const & = false); /// if the string is found: return true and set the cursor to the new position SearchResult SearchForward(BufferView *, LyXText * text, string const & str, - bool const & = true, bool const & = false); + bool const & = true, bool const & = false); /// SearchResult SearchBackward(BufferView *, LyXText * text, string const & str, - bool const & = true, bool const & = false); + bool const & = true, bool const & = false); int LyXReplace(BufferView * bv, - string const & searchstr, string const & replacestr, - bool forward, bool casesens, bool matchwrd, bool replaceall, - bool once) + string const & searchstr, string const & replacestr, + bool forward, bool casesens, bool matchwrd, bool replaceall, + bool once) { - if (!bv->available() || bv->buffer()->isReadonly()) + if (!bv->available() || bv->buffer()->isReadonly()) return 0; - + // CutSelection cannot cut a single space, so we have to stop // in order to avoid endless loop :-( if (searchstr.length() == 0 || (searchstr.length() == 1 && searchstr[0] == ' ')) { Alert::alert(_("Sorry!"), _("You cannot replace a single space, " - "nor an empty character.")); + "nor an empty character.")); return 0; } - + LyXText * text = bv->getLyXText(); - // now we can start searching for the first + // now we can start searching for the first // start at top if replaceall bool fw = forward; if (replaceall) { @@ -77,7 +77,7 @@ int LyXReplace(BufferView * bv, // override search direction because we search top to bottom fw = true; } - + // if nothing selected or selection does not equal search string // search and select next occurance and return if no replaceall string str1; @@ -110,25 +110,25 @@ int LyXReplace(BufferView * bv, if (!once) found = LyXFind(bv, searchstr, fw, false, casesens, matchwrd); } while (!once && replaceall && found); - + if (bv->focus()) bv->showCursor(); - + return replace_count; } bool LyXFind(BufferView * bv, - string const & searchstr, bool forward, - bool frominset, bool casesens, bool matchwrd) + string const & searchstr, bool forward, + bool frominset, bool casesens, bool matchwrd) { if (!bv->available() || searchstr.empty()) return false; - + LyXText * text = bv->getLyXText(); bv->hideCursor(); bv->update(text, BufferView::SELECT|BufferView::FITCUR); - + if (text->selection.set()) text->cursor = forward ? text->selection.end : text->selection.start; @@ -156,13 +156,13 @@ bool LyXFind(BufferView * bv, text->setCursor(bv, par, pos); } if (par) { - result = forward ? + result = forward ? SearchForward(bv, text, searchstr, casesens, matchwrd) : SearchBackward(bv, text, searchstr, casesens, matchwrd); } } } else { - result = forward ? + result = forward ? SearchForward(bv, text, searchstr, casesens, matchwrd) : SearchBackward(bv, text, searchstr, casesens, matchwrd); } @@ -178,10 +178,10 @@ bool LyXFind(BufferView * bv, bv->update(bv->getLyXText(), BufferView::SELECT|BufferView::FITCUR); } else if (result == SR_NOT_FOUND) found = false; - + if (bv->focus()) bv->showCursor(); - + return found; } @@ -193,13 +193,13 @@ bool IsStringInText(Paragraph * par, pos_type pos, { if (!par) return false; - + string::size_type size = str.length(); pos_type i = 0; while (((pos + i) < par->size()) && (string::size_type(i) < size) && (cs ? (str[i] == par->getChar(pos + i)) - : (toupper(str[i]) == toupper(par->getChar(pos + i))))) + : (uppercase(str[i]) == uppercase(par->getChar(pos + i))))) { ++i; } @@ -220,12 +220,11 @@ bool IsStringInText(Paragraph * par, pos_type pos, // if the string can be found: return true and set the cursor to // the new position, cs = casesensitive, mw = matchword SearchResult SearchForward(BufferView * bv, LyXText * text, string const & str, - bool const & cs, bool const & mw) + bool const & cs, bool const & mw) { Paragraph * par = text->cursor.par(); pos_type pos = text->cursor.pos(); Paragraph * prev_par = par; - pos_type prev_pos; UpdatableInset * inset; while (par && !IsStringInText(par, pos, str, cs, mw)) { @@ -240,25 +239,23 @@ SearchResult SearchForward(BufferView * bv, LyXText * text, string const & str, return SR_FOUND_NOUPDATE; text = bv->getLyXText(); } - + ++pos; - + if (pos >= par->size()) { prev_par = par; - // consider 0-sized empty pars - prev_pos = std::min(pos, par->size()); par = par->next(); pos = 0; } } - + if (par) { text->setCursor(bv, par, pos); return SR_FOUND; } else { // make sure we end up at the end of the text, // not the start point of the last search - text->setCursor(bv, prev_par, prev_pos); + text->setCursor(bv, prev_par, prev_par->size()); return SR_NOT_FOUND; } } @@ -268,19 +265,17 @@ SearchResult SearchForward(BufferView * bv, LyXText * text, string const & str, // if the string can be found: return true and set the cursor to // the new position, cs = casesensitive, mw = matchword SearchResult SearchBackward(BufferView * bv, LyXText * text, - string const & str, - bool const & cs, bool const & mw) + string const & str, + bool const & cs, bool const & mw) { Paragraph * par = text->cursor.par(); pos_type pos = text->cursor.pos(); Paragraph * prev_par = par; - pos_type prev_pos = pos; do { if (pos > 0) --pos; else { - prev_pos = pos; prev_par = par; // We skip empty paragraphs (Asger) do { @@ -300,16 +295,15 @@ SearchResult SearchBackward(BufferView * bv, LyXText * text, if (inset->searchBackward(bv, str, cs, mw)) return SR_FOUND_NOUPDATE; text = bv->getLyXText(); - } + } } while (par && !IsStringInText(par, pos, str, cs, mw)); - + if (par) { text->setCursor(bv, par, pos); return SR_FOUND; } else { // go to the last part of the unsuccessful search - text->setCursor(bv, prev_par, prev_pos); + text->setCursor(bv, prev_par, 0); return SR_NOT_FOUND; } } -