diff options
author | Justin Luth <justin_luth@sil.org> | 2017-06-27 10:55:20 -0400 |
---|---|---|
committer | Justin Luth <justin_luth@sil.org> | 2017-09-01 19:23:38 +0200 |
commit | 16db6243768ccde2cf0f78da0834fe4ff14f5c3c (patch) | |
tree | ca131806a6a92ebb1467b7cb65fd0f0766c68c14 | |
parent | 5aafb3db7e8316e8e5a8665d6161fda4d4588443 (diff) |
tdf#101936 sw: ignore comment anchors during search
Comments are anchored by unicode character U+fff9.
If the comment was anchored in the middle of a word, then a search
would not find that word. A comment anchor is not a word-breaking
character, so remove it instead of replacing it with 0x7f.
Change-Id: I4606dbfac74161029029d9807b74bd6ffa285126
Reviewed-on: https://gerrit.libreoffice.org/39361
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Justin Luth <justin_luth@sil.org>
-rw-r--r-- | sw/source/core/crsr/findtxt.cxx | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/sw/source/core/crsr/findtxt.cxx b/sw/source/core/crsr/findtxt.cxx index 65345fb3a4f5..fc360eea94af 100644 --- a/sw/source/core/crsr/findtxt.cxx +++ b/sw/source/core/crsr/findtxt.cxx @@ -56,7 +56,7 @@ using namespace util; static OUString lcl_CleanStr(const SwTextNode& rNd, sal_Int32 const nStart, sal_Int32& rEnd, - std::vector<sal_Int32> &rArr, bool const bRemoveSoftHyphen) + std::vector<sal_Int32> &rArr, bool const bRemoveSoftHyphen, bool const bRemoveCommentAnchors) { OUStringBuffer buf(rNd.GetText()); rArr.clear(); @@ -127,7 +127,6 @@ lcl_CleanStr(const SwTextNode& rNd, sal_Int32 const nStart, sal_Int32& rEnd, case RES_TXTATR_FLYCNT: case RES_TXTATR_FTN: case RES_TXTATR_FIELD: - case RES_TXTATR_ANNOTATION: case RES_TXTATR_REFMARK: case RES_TXTATR_TOXMARK: case RES_TXTATR_META: @@ -140,9 +139,7 @@ lcl_CleanStr(const SwTextNode& rNd, sal_Int32 const nStart, sal_Int32& rEnd, // simply removed if first. If at the end, we keep the // replacement and remove afterwards all at a string's // end (might be normal 0x7f). - const bool bEmpty = - ( pHt->Which() != RES_TXTATR_FIELD - && pHt->Which() != RES_TXTATR_ANNOTATION ) + const bool bEmpty = pHt->Which() != RES_TXTATR_FIELD || (static_txtattr_cast<SwTextField const*>(pHt)->GetFormatField().GetField()->ExpandField(true).isEmpty()); if ( bEmpty && nStart == nAkt ) { @@ -158,6 +155,16 @@ lcl_CleanStr(const SwTextNode& rNd, sal_Int32 const nStart, sal_Int32& rEnd, } } break; + case RES_TXTATR_ANNOTATION: + { + if( bRemoveCommentAnchors ) + { + rArr.push_back( nAkt ); + --rEnd; + buf.remove( nAkt, 1 ); + } + } + break; default: OSL_FAIL( "unknown case in lcl_CleanStr" ); break; @@ -483,6 +490,8 @@ bool SwPaM::DoSearch( const i18nutil::SearchOptions2& rSearchOpt, utl::TextSearc // if the search string contains a soft hyphen, // we don't strip them from the text: bool bRemoveSoftHyphens = true; + // if the search string contains a comment, we don't strip them from the text + const bool bRemoveCommentAnchors = rSearchOpt.searchString.indexOf( CH_TXTATR_INWORD ) == -1; if ( bRegSearch ) { @@ -504,10 +513,10 @@ bool SwPaM::DoSearch( const i18nutil::SearchOptions2& rSearchOpt, utl::TextSearc if( bSrchForward ) sCleanStr = lcl_CleanStr(*pNode->GetTextNode(), nStart, nEnd, - aFltArr, bRemoveSoftHyphens); + aFltArr, bRemoveSoftHyphens, bRemoveCommentAnchors); else sCleanStr = lcl_CleanStr(*pNode->GetTextNode(), nEnd, nStart, - aFltArr, bRemoveSoftHyphens); + aFltArr, bRemoveSoftHyphens, bRemoveCommentAnchors); SwScriptIterator* pScriptIter = nullptr; sal_uInt16 nSearchScript = 0; |