Kaydet (Commit) 9a93475d authored tarafından Herbert Dürr's avatar Herbert Dürr Kaydeden (comit) Eike Rathke

i#118925# enhance textsearch's match-group references

to work for look-ahead/look-behind
(cherry picked from commit 3b83c404)

Conflicts:
	sw/source/core/crsr/findtxt.cxx

Change-Id: Ia5b31628b0f2af8f93132afa4b2eabd2f533bb91
üst 0e91b738
...@@ -710,7 +710,7 @@ SearchResult TextSearch::RESrchFrwrd( const OUString& searchStr, ...@@ -710,7 +710,7 @@ SearchResult TextSearch::RESrchFrwrd( const OUString& searchStr,
// use the ICU RegexMatcher to find the matches // use the ICU RegexMatcher to find the matches
UErrorCode nIcuErr = U_ZERO_ERROR; UErrorCode nIcuErr = U_ZERO_ERROR;
const IcuUniString aSearchTargetStr( (const UChar*)searchStr.getStr(), endPos); const IcuUniString aSearchTargetStr( (const UChar*)searchStr.getStr(), searchStr.getLength());
pRegexMatcher->reset( aSearchTargetStr); pRegexMatcher->reset( aSearchTargetStr);
// search until there is a valid match // search until there is a valid match
for(;;) for(;;)
......
...@@ -659,31 +659,14 @@ String *ReplaceBackReferences( const SearchOptions& rSearchOpt, SwPaM* pPam ) ...@@ -659,31 +659,14 @@ String *ReplaceBackReferences( const SearchOptions& rSearchOpt, SwPaM* pPam )
if( pTxtNode && pTxtNode->IsTxtNode() && pTxtNode == pPam->GetCntntNode( sal_False ) ) if( pTxtNode && pTxtNode->IsTxtNode() && pTxtNode == pPam->GetCntntNode( sal_False ) )
{ {
utl::TextSearch aSTxt( rSearchOpt ); utl::TextSearch aSTxt( rSearchOpt );
String aStr( pPam->GetTxt() ); const String& rStr = static_cast<const SwTxtNode*>(pTxtNode)->GetTxt();
String aReplaceStr( rSearchOpt.replaceString ); xub_StrLen nStart = pPam->Start()->nContent.GetIndex();
aStr = comphelper::string::remove(aStr, CH_TXTATR_BREAKWORD); xub_StrLen nEnd = pPam->End()->nContent.GetIndex();
aStr = comphelper::string::remove(aStr, CH_TXTATR_INWORD);
xub_StrLen nStart = 0;
OUString sX( 'x' );
if( pPam->Start()->nContent > 0 )
{
aStr.Insert( sX, 0 );
++nStart;
}
xub_StrLen nEnd = aStr.Len();
bool bDeleteLastX = false;
if (pPam->End()->nContent <
static_cast<const SwTxtNode*>(pTxtNode)->GetTxt().getLength())
{
aStr.Insert( sX );
bDeleteLastX = true;
}
SearchResult aResult; SearchResult aResult;
if( aSTxt.SearchFrwrd( aStr, &nStart, &nEnd, &aResult ) ) if( aSTxt.SearchFrwrd( rStr, &nStart, &nEnd, &aResult ) )
{ {
if( bDeleteLastX ) String aReplaceStr( rSearchOpt.replaceString );
aStr.Erase( aStr.Len() - 1 ); aSTxt.ReplaceBackReferences( aReplaceStr, rStr, aResult );
aSTxt.ReplaceBackReferences( aReplaceStr, aStr, aResult );
pRet = new String( aReplaceStr ); pRet = new String( aReplaceStr );
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment