diff options
-rw-r--r-- | sw/source/core/crsr/findtxt.cxx | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/sw/source/core/crsr/findtxt.cxx b/sw/source/core/crsr/findtxt.cxx index ec1dc65d63a6..817091462d51 100644 --- a/sw/source/core/crsr/findtxt.cxx +++ b/sw/source/core/crsr/findtxt.cxx @@ -1101,8 +1101,10 @@ o3tl::optional<OUString> ReplaceBackReferences(const i18nutil::SearchOptions2& r if( pPam && pPam->HasMark() && SearchAlgorithms2::REGEXP == rSearchOpt.AlgorithmType2 ) { - const SwContentNode* pTextNode = pPam->GetContentNode(); - if (!pTextNode || !pTextNode->IsTextNode()) + SwContentNode const*const pTextNode = pPam->GetContentNode(); + SwContentNode const*const pMarkTextNode = pPam->GetContentNode(false); + if (!pTextNode || !pTextNode->IsTextNode() + || !pMarkTextNode || !pMarkTextNode->IsTextNode()) { return xRet; } @@ -1112,7 +1114,7 @@ o3tl::optional<OUString> ReplaceBackReferences(const i18nutil::SearchOptions2& r const bool bParaEnd = rSearchOpt.searchString == "$" || rSearchOpt.searchString == "^$" || rSearchOpt.searchString == "$^"; if (bParaEnd || (pLayout ? sw::FrameContainsNode(*pFrame, pPam->GetMark()->nNode.GetIndex()) - : pTextNode == pPam->GetContentNode(false))) + : pTextNode == pMarkTextNode)) { utl::TextSearch aSText( utl::TextSearch::UpgradeToSearchOptions2( rSearchOpt) ); OUString rStr = pLayout @@ -1122,8 +1124,16 @@ o3tl::optional<OUString> ReplaceBackReferences(const i18nutil::SearchOptions2& r AmbiguousIndex nEnd; if (pLayout) { - nStart.SetFrameIndex(pFrame->MapModelToViewPos(*pPam->Start())); - nEnd.SetFrameIndex(pFrame->MapModelToViewPos(*pPam->End())); + SwTextFrame const*const pStartFrame( + bParaEnd && *pPam->GetMark() < *pPam->GetPoint() + ? static_cast<SwTextFrame const*>(pMarkTextNode->getLayoutFrame(pLayout)) + : pFrame); + SwTextFrame const*const pEndFrame( + bParaEnd && *pPam->GetPoint() <= *pPam->GetMark() + ? static_cast<SwTextFrame const*>(pMarkTextNode->getLayoutFrame(pLayout)) + : pFrame); + nStart.SetFrameIndex(pStartFrame->MapModelToViewPos(*pPam->Start())); + nEnd.SetFrameIndex(pEndFrame->MapModelToViewPos(*pPam->End())); } else { |