summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sw/source/core/crsr/findtxt.cxx20
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
{