From cb351665f432671eb263eec76164aa546abd7151 Mon Sep 17 00:00:00 2001 From: Tommaso Cucinotta Date: Thu, 27 Mar 2014 23:12:56 +0000 Subject: [PATCH] Fixing #7987: deleted text in change-tracking mode is not found in Advanced F&R any more. Merged Paragraph::stringify into asString(). Added ignore of deleted text to Advanced F&R. --- src/Paragraph.cpp | 40 +++++++++------------------------------- src/Paragraph.h | 11 ++++------- src/lyxfind.cpp | 15 ++++++++++----- 3 files changed, 23 insertions(+), 43 deletions(-) diff --git a/src/Paragraph.cpp b/src/Paragraph.cpp index d32c0be2f0..64870956cf 100644 --- a/src/Paragraph.cpp +++ b/src/Paragraph.cpp @@ -3347,7 +3347,7 @@ docstring Paragraph::asString(int options) const } -docstring Paragraph::asString(pos_type beg, pos_type end, int options) const +docstring Paragraph::asString(pos_type beg, pos_type end, int options, const OutputParams *p_runparams) const { odocstringstream os; @@ -3364,9 +3364,14 @@ docstring Paragraph::asString(pos_type beg, pos_type end, int options) const || (c == '\n' && (options & AS_STR_NEWLINES))) os.put(c); else if (c == META_INSET && (options & AS_STR_INSETS)) { - getInset(i)->toString(os); - if (getInset(i)->asInsetMath()) - os << " "; + if (options & AS_STR_PLAINTEXT) { + LASSERT(p_runparams != 0, return docstring()); + getInset(i)->plaintext(os, *p_runparams); + } else { + getInset(i)->toString(os); + if (getInset(i)->asInsetMath()) + os << " "; + } } } @@ -3392,33 +3397,6 @@ void Paragraph::forToc(docstring & os, size_t maxlen) const } -docstring Paragraph::stringify(pos_type beg, pos_type end, int options, - OutputParams const & runparams) const -{ - odocstringstream os; - - if (beg == 0 - && options & AS_STR_LABEL - && !d->params_.labelString().empty()) - os << d->params_.labelString() << ' '; - - OutputParams op = runparams; - op.for_search = true; - - for (pos_type i = beg; i < end; ++i) { - char_type const c = d->text_[i]; - if (isPrintable(c) || c == '\t' - || (c == '\n' && (options & AS_STR_NEWLINES))) - os.put(c); - else if (c == META_INSET && (options & AS_STR_INSETS)) { - getInset(i)->plaintext(os, op); - } - } - - return os.str(); -} - - void Paragraph::setInsetOwner(Inset const * inset) { d->inset_owner_ = inset; diff --git a/src/Paragraph.h b/src/Paragraph.h index 955804871b..97d36dc443 100644 --- a/src/Paragraph.h +++ b/src/Paragraph.h @@ -127,7 +127,8 @@ enum AsStringParameter AS_STR_LABEL = 1, ///< Prefix with paragraph label. AS_STR_INSETS = 2, ///< Go into insets. AS_STR_NEWLINES = 4, ///< Get also newline characters. - AS_STR_SKIPDELETE = 8 ///< Skip deleted text in change tracking. + AS_STR_SKIPDELETE = 8, ///< Skip deleted text in change tracking. + AS_STR_PLAINTEXT = 16 ///< Extract only the explicitly visible text (without any formatting), when descending into insets }; @@ -175,15 +176,11 @@ public: docstring asString(int options = AS_STR_NONE) const; /// docstring asString(pos_type beg, pos_type end, - int options = AS_STR_NONE) const; + int options = AS_STR_NONE, + const OutputParams *p_runparams = 0) const; /// void forToc(docstring &, size_t maxlen) const; - /// Extract only the explicitly visible text (without any formatting), - /// descending into insets - docstring stringify(pos_type beg, pos_type end, int options, - OutputParams const & runparams) const; - /// void write(std::ostream &, BufferParams const &, depth_type & depth) const; diff --git a/src/lyxfind.cpp b/src/lyxfind.cpp index ca43d47e92..12d30e08ed 100644 --- a/src/lyxfind.cpp +++ b/src/lyxfind.cpp @@ -782,14 +782,17 @@ static docstring stringifySearchBuffer(Buffer & buffer, FindAndReplaceOptions co runparams.flavor = OutputParams::LATEX; runparams.linelen = 100000; //lyxrc.plaintext_linelen; runparams.dryrun = true; + runparams.for_search = true; for (pos_type pit = pos_type(0); pit < (pos_type)buffer.paragraphs().size(); ++pit) { Paragraph const & par = buffer.paragraphs().at(pit); LYXERR(Debug::FIND, "Adding to search string: '" - << par.stringify(pos_type(0), par.size(), - AS_STR_INSETS, runparams) + << par.asString(pos_type(0), par.size(), + AS_STR_INSETS | AS_STR_SKIPDELETE | AS_STR_PLAINTEXT, + &runparams) << "'"); - str += par.stringify(pos_type(0), par.size(), - AS_STR_INSETS, runparams); + str += par.asString(pos_type(0), par.size(), + AS_STR_INSETS | AS_STR_SKIPDELETE | AS_STR_PLAINTEXT, + &runparams); } } return str; @@ -1040,7 +1043,9 @@ docstring stringifyFromCursor(DocIterator const & cur, int len) runparams.dryrun = true; LYXERR(Debug::FIND, "Stringifying with cur: " << cur << ", from pos: " << cur.pos() << ", end: " << end); - return par.stringify(cur.pos(), end, AS_STR_INSETS, runparams); + return par.asString(cur.pos(), end, + AS_STR_INSETS | AS_STR_SKIPDELETE | AS_STR_PLAINTEXT, + &runparams); } else if (cur.inMathed()) { docstring s; CursorSlice cs = cur.top();