Kaydet (Commit) 9eb39ccf authored tarafından László Németh's avatar László Németh

fdo#68373 allow "*word" pattern matching

Change-Id: I13682f3886451838e522b259dbb2d686bff1437b
üst 19cb39f0
...@@ -2710,20 +2710,29 @@ const SvxAutocorrWord* SvxAutocorrWordList::WordMatches(const SvxAutocorrWord *p ...@@ -2710,20 +2710,29 @@ const SvxAutocorrWord* SvxAutocorrWordList::WordMatches(const SvxAutocorrWord *p
xub_StrLen nEndPos) const xub_StrLen nEndPos) const
{ {
const String& rChk = pFnd->GetShort(); const String& rChk = pFnd->GetShort();
if( nEndPos >= rChk.Len() ) xub_StrLen left_wildcard = ( rChk.GetChar( 0 ) == C_ASTERISK ) ? 1 : 0; // "*word" pattern?
xub_StrLen nSttWdPos = nEndPos;
bool bWasWordDelim = false;
if( nEndPos >= rChk.Len() - left_wildcard)
{ {
xub_StrLen nCalcStt = nEndPos - rChk.Len();
if( ( !nCalcStt || nCalcStt == rStt || xub_StrLen nCalcStt = nEndPos - rChk.Len() + left_wildcard;
if( ( !nCalcStt || nCalcStt == rStt || left_wildcard ||
( nCalcStt < rStt && ( nCalcStt < rStt &&
IsWordDelim( rTxt.GetChar( nCalcStt - 1 ) ))) ) IsWordDelim( rTxt.GetChar( nCalcStt - 1 ) ))) )
{ {
TransliterationWrapper& rCmp = GetIgnoreTranslWrapper(); TransliterationWrapper& rCmp = GetIgnoreTranslWrapper();
OUString sWord(rTxt.GetBuffer() + nCalcStt, rChk.Len() - left_wildcard);
OUString sWord(rTxt.GetBuffer() + nCalcStt, rChk.Len()); if( (!left_wildcard && rCmp.isEqual( rChk, sWord )) || (left_wildcard && rCmp.isEqual( rChk.Copy(1), sWord) ))
if( rCmp.isEqual( rChk, sWord ))
{ {
rStt = nCalcStt; rStt = nCalcStt;
return pFnd; if (!left_wildcard) return pFnd;
// get the first word delimiter position before the matching "*word" pattern
while( rStt && !(bWasWordDelim = IsWordDelim( rTxt.GetChar( --rStt ))))
;
if (bWasWordDelim) rStt++;
SvxAutocorrWord* pNew = new SvxAutocorrWord(OUString(rTxt.GetBuffer() + rStt, nEndPos - rStt), OUString(rTxt.GetBuffer() + rStt, nEndPos - rStt - rChk.Len() + 1) + OUString(pFnd->GetLong()));
if( Insert( pNew ) ) return pNew; else delete pNew;
} }
} }
// match "word*" patterns, eg. "i18n*" // match "word*" patterns, eg. "i18n*"
...@@ -2731,8 +2740,6 @@ const SvxAutocorrWord* SvxAutocorrWordList::WordMatches(const SvxAutocorrWord *p ...@@ -2731,8 +2740,6 @@ const SvxAutocorrWord* SvxAutocorrWordList::WordMatches(const SvxAutocorrWord *p
{ {
String sTmp( rChk.Copy( 0, rChk.Len() - 1 ) ); String sTmp( rChk.Copy( 0, rChk.Len() - 1 ) );
// Get the last word delimiter position // Get the last word delimiter position
xub_StrLen nSttWdPos = nEndPos;
bool bWasWordDelim = false;
bool not_suffix; bool not_suffix;
while( nSttWdPos && !(bWasWordDelim = IsWordDelim( rTxt.GetChar( --nSttWdPos )))) while( nSttWdPos && !(bWasWordDelim = IsWordDelim( rTxt.GetChar( --nSttWdPos ))))
; ;
......
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