X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Flyxfind.h;h=b700e0ce1a5065013f8bc1cdf1d2c4d43a72fab2;hb=9716e79624a4d;hp=488804763862df2f9aa79b13c48ffae121079ae2;hpb=eb36b71ce3b9880a9b577f3db25d16e6a86cd338;p=lyx.git diff --git a/src/lyxfind.h b/src/lyxfind.h index 4888047638..b700e0ce1a 100644 --- a/src/lyxfind.h +++ b/src/lyxfind.h @@ -4,9 +4,11 @@ * This file is part of LyX, the document processor. * Licence details can be found in the file COPYING. * - * \author Lars Gullik Bjønnes + * \author Lars Gullik Bjønnes * \author John Levon - * \author Jürgen Vigna + * \author Jürgen Vigna + * \author Alfredo Braunstein + * \author Tommaso Cucinotta * * Full author contact details are available in file CREDITS. */ @@ -14,60 +16,152 @@ #ifndef LYXFIND_H #define LYXFIND_H -#include "support/types.h" +#include "support/strfwd.h" -#include - -class BufferView; -class LyXText; +// FIXME +#include "support/docstring.h" namespace lyx { -namespace find { - -enum SearchResult { - // - SR_NOT_FOUND = 0, - // - SR_FOUND, - // - SR_FOUND_NOUPDATE -}; +class Cursor; +class BufferView; +class DocIterator; +class FuncRequest; -int replace(BufferView * bv, - std::string const &, std::string const &, - bool, bool = true, bool = false, - bool = false, bool = false); - -/** - * This function is called as a general interface to find some - * text from the actual cursor position in whatever direction - * we want to go. This does also update the screen. +/** Decode the \c argument to extract search plus options from a string + * that came to the LyX core in a FuncRequest wrapper. */ -bool find(BufferView *, - std::string const & searchstr, bool forward, - bool casesens = true, bool matchwrd = false); - -/** - * This function does search from the cursor position inside the - * passed LyXText parameter and regards this LyXText as the root - * LyXText. It will NOT update any screen stuff. It will however - * set the cursor to the new position inside LyXText, before - * returning to the calling function. +docstring const string2find(docstring const & argument, + bool &casesensitive, + bool &matchword, + bool &forward, + bool &wrap, + bool &instant, + bool &onlysel); + +/** Encode the parameters needed to find \c search as a string + * that can be dispatched to the LyX core in a FuncRequest wrapper. */ - -SearchResult find(BufferView *, LyXText * text, - std::string const & searchstr, bool forward, - bool casesens = true, bool matchwrd = false); +docstring const find2string(docstring const & search, + bool casesensitive, + bool matchword, + bool forward, + bool wrap, + bool instant, + bool onlysel); + +/** Encode the parameters needed to replace \c search with \c replace + * as a string that can be dispatched to the LyX core in a FuncRequest + * wrapper. + */ +docstring const replace2string(docstring const & replace, + docstring const & search, + bool casesensitive, + bool matchword, + bool all, + bool forward, + bool findnext = true, + bool wrap = true, + bool onlysel = false); + +/** Parse the string encoding of the find request that is found in + * \c ev.argument and act on it. + * The string is encoded by \c find2string. + * \return true if the string was found. + */ +bool lyxfind(BufferView * bv, FuncRequest const & ev); + +bool findOne(BufferView * bv, docstring const & searchstr, + bool case_sens, bool whole, bool forward, + bool find_del = true, bool check_wrap = false, + bool const auto_wrap = false, bool instant = false, + bool onlysel = false); + +/** Parse the string encoding of the replace request that is found in + * \c ev.argument and act on it. + * The string is encoded by \c replace2string. + * \return whether we did anything + */ +bool lyxreplace(BufferView * bv, FuncRequest const &); /// find the next change in the buffer bool findNextChange(BufferView * bv); -SearchResult findNextChange(BufferView * bv, LyXText * text, lyx::pos_type & length); +/// find the previous change in the buffer +bool findPreviousChange(BufferView * bv); + +/// select change under the cursor +bool selectChange(Cursor & cur, bool forward = true); + + +class FindAndReplaceOptions { +public: + typedef enum { + S_BUFFER, + S_DOCUMENT, + S_OPEN_BUFFERS, + S_ALL_MANUALS + } SearchScope; + typedef enum { + R_EVERYTHING, + R_ONLY_MATHS + } SearchRestriction; + FindAndReplaceOptions( + docstring const & find_buf_name, + bool casesensitive, + bool matchword, + bool forward, + bool expandmacros, + bool ignoreformat, + docstring const & repl_buf_name, + bool keep_case, + SearchScope scope = S_BUFFER, + SearchRestriction restr = R_EVERYTHING, + bool replace_all = false + ); + + FindAndReplaceOptions() {} + + docstring find_buf_name; + bool casesensitive = false; + bool matchword = false; + bool forward = false; + bool matchAtStart = false; + bool expandmacros = false; + bool ignoreformat = false; + /// This is docstring() if no replace was requested + docstring repl_buf_name; + bool keep_case = false; + SearchScope scope = S_BUFFER; + SearchRestriction restr = R_EVERYTHING; + bool replace_all = false; +}; + +/// Set the formats that should be ignored +void setIgnoreFormat(std::string const & type, bool value, bool fromUser = true); + +/// Write a FindAdvOptions instance to a stringstream +std::ostringstream & operator<<(std::ostringstream & os, lyx::FindAndReplaceOptions const & opt); + +/// Read a FindAdvOptions instance from a stringstream +std::istringstream & operator>>(std::istringstream & is, lyx::FindAndReplaceOptions & opt); + +/// Perform a FindAdv operation. +bool findAdv(BufferView * bv, FindAndReplaceOptions & opt); + +/** Computes the simple-text or LaTeX export (depending on opt) of buf starting + ** from cur and ending len positions after cur, if len is positive, or at the + ** paragraph or innermost inset end if len is -1. + ** + ** This is useful for computing opt.search from the SearchAdvDialog controller (ControlSearchAdv). + ** Ideally, this should not be needed, and the opt.search field should become a Text const &. + **/ +docstring stringifyFromForSearch( + FindAndReplaceOptions const & opt, + DocIterator const & cur, + int len = -1); -SearchResult nextChange(BufferView * bv, LyXText * text, lyx::pos_type & length); -} // namespace find } // namespace lyx #endif // LYXFIND_H