Related fdo#53006 Make CApitals correction work without dictionary
In a language for which there is no dictionary available (no "ABC" check in
front of the current item in Writer's "Format - Character... - Font - Language"
list), "Correct TWo INitial CApitals" (from Writer's "Tools - AutoCorrect
Options... - Options") did not work (i.e., typing "FOo" followed by a space
would not change it to "Foo"). That was apparently a regression introduced with
51efaa592d
"Double-capital autocor takes
spellcheck in account." (I verified that with this fix words like "MPs" in
"English (UK)" are still left as "MPs.") Thanks to Caolán for help.
Change-Id: Ia76286e4ca73138ce3571145b9c40b031a4553ba
This commit is contained in:
@@ -371,25 +371,27 @@ sal_Bool SvxAutoCorrect::FnCptlSttWrd( SvxAutoCorrDoc& rDoc, const String& rTxt,
|
|||||||
String sWord( rTxt.Copy( nSttPos - 1, nEndPos - nSttPos + 1 ));
|
String sWord( rTxt.Copy( nSttPos - 1, nEndPos - nSttPos + 1 ));
|
||||||
if( !FindInWrdSttExceptList(eLang, sWord) )
|
if( !FindInWrdSttExceptList(eLang, sWord) )
|
||||||
{
|
{
|
||||||
|
// Check that word isn't correctly spelled before correcting:
|
||||||
::com::sun::star::uno::Reference<
|
::com::sun::star::uno::Reference<
|
||||||
::com::sun::star::linguistic2::XSpellChecker1 > xSpeller =
|
::com::sun::star::linguistic2::XSpellChecker1 > xSpeller =
|
||||||
SvxGetSpellChecker();
|
SvxGetSpellChecker();
|
||||||
Sequence< ::com::sun::star::beans::PropertyValue > aEmptySeq;
|
if( xSpeller->hasLanguage(eLang) )
|
||||||
// Check that word isn't correctly spelled before correcting
|
|
||||||
::com::sun::star::uno::Reference< ::com::sun::star::linguistic2::XSpellAlternatives > xSpellAlt
|
|
||||||
= xSpeller->spell(sWord, eLang, aEmptySeq);
|
|
||||||
if(xSpellAlt.is())
|
|
||||||
{
|
{
|
||||||
sal_Unicode cSave = rTxt.GetChar( nSttPos );
|
Sequence< ::com::sun::star::beans::PropertyValue > aEmptySeq;
|
||||||
rtl::OUString sChar( cSave );
|
if (!xSpeller->spell(sWord, eLang, aEmptySeq).is())
|
||||||
sChar = rCC.lowercase( sChar );
|
|
||||||
if( sChar[0] != cSave && rDoc.ReplaceRange( nSttPos, 1, sChar ))
|
|
||||||
{
|
{
|
||||||
if( SaveWordWrdSttLst & nFlags )
|
return false;
|
||||||
rDoc.SaveCpltSttWord( CptlSttWrd, nSttPos, sWord, cSave );
|
|
||||||
bRet = sal_True;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
sal_Unicode cSave = rTxt.GetChar( nSttPos );
|
||||||
|
rtl::OUString sChar( cSave );
|
||||||
|
sChar = rCC.lowercase( sChar );
|
||||||
|
if( sChar[0] != cSave && rDoc.ReplaceRange( nSttPos, 1, sChar ))
|
||||||
|
{
|
||||||
|
if( SaveWordWrdSttLst & nFlags )
|
||||||
|
rDoc.SaveCpltSttWord( CptlSttWrd, nSttPos, sWord, cSave );
|
||||||
|
bRet = sal_True;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return bRet;
|
return bRet;
|
||||||
|
Reference in New Issue
Block a user