convert SvxAutoCorrDoc from String to OUString
Also:
- simplify the return type of the GetPrevPara method, there is no
need return an OUString by pointer
- simply the ppPara parameter of the ChgAutoCorrWord method,
passing a pointer to a pointer to a value type is unnecessary.
Change-Id: I4a8c44fdab1cf68af88c34003827d1c20704f839
diff --git a/editeng/qa/unit/core-test.cxx b/editeng/qa/unit/core-test.cxx
index b1c100c..e8958e1 100644
--- a/editeng/qa/unit/core-test.cxx
+++ b/editeng/qa/unit/core-test.cxx
@@ -240,18 +240,18 @@ private:
m_rText = m_rText.replaceAt(nStt, nEnd-nStt, "");
return true;
}
virtual sal_Bool Insert( xub_StrLen nPos, const String& rTxt )
virtual sal_Bool Insert( xub_StrLen nPos, const OUString& rTxt )
{
//fprintf(stderr, "TestAutoCorrDoc::Insert\n");
m_rText = m_rText.replaceAt(nPos, 0, rTxt);
return true;
}
virtual sal_Bool Replace( xub_StrLen nPos, const String& rTxt )
virtual sal_Bool Replace( xub_StrLen nPos, const OUString& rTxt )
{
//fprintf(stderr, "TestAutoCorrDoc::Replace\n");
return ReplaceRange( nPos, rTxt.Len(), rTxt );
return ReplaceRange( nPos, rTxt.getLength(), rTxt );
}
virtual sal_Bool ReplaceRange( xub_StrLen nPos, xub_StrLen nLen, const String& rTxt )
virtual sal_Bool ReplaceRange( xub_StrLen nPos, xub_StrLen nLen, const OUString& rTxt )
{
//fprintf(stderr, "TestAutoCorrDoc::ReplaceRange %d %d %s\n", nPos, nLen, OUStringToOString(rTxt, RTL_TEXTENCODING_UTF8).getStr());
m_rText = m_rText.replaceAt(nPos, nLen, rTxt);
@@ -267,14 +267,14 @@ private:
//fprintf(stderr, "TestAutoCorrDoc::SetINetAttr\n");
return true;
}
virtual const String* GetPrevPara( sal_Bool )
virtual OUString GetPrevPara( sal_Bool )
{
//fprintf(stderr, "TestAutoCorrDoc::GetPrevPara\n");
return NULL;
return OUString();
}
virtual sal_Bool ChgAutoCorrWord( sal_uInt16& rSttPos,
sal_uInt16 nEndPos, SvxAutoCorrect& rACorrect,
const String** ppPara )
OUString* pPara )
{
//fprintf(stderr, "TestAutoCorrDoc::ChgAutoCorrWord\n");
@@ -286,8 +286,8 @@ private:
if (pFnd && pFnd->IsTextOnly())
{
m_rText = m_rText.replaceAt(rSttPos, nEndPos, pFnd->GetLong());
if( ppPara )
*ppPara = NULL;//&pCurNode->GetString();
if( pPara )
*pPara = "";//&pCurNode->GetString();
return true;
}
diff --git a/editeng/source/editeng/edtspell.cxx b/editeng/source/editeng/edtspell.cxx
index 6c2fdf7..787189c 100644
--- a/editeng/source/editeng/edtspell.cxx
+++ b/editeng/source/editeng/edtspell.cxx
@@ -603,27 +603,27 @@ sal_Bool EdtAutoCorrDoc::Delete( sal_uInt16 nStt, sal_uInt16 nEnd )
return true;
}
sal_Bool EdtAutoCorrDoc::Insert( sal_uInt16 nPos, const String& rTxt )
sal_Bool EdtAutoCorrDoc::Insert( sal_uInt16 nPos, const OUString& rTxt )
{
EditSelection aSel = EditPaM( pCurNode, nPos );
mpEditEngine->InsertText(aSel, rTxt);
SAL_WARN_IF(nCursor < nPos, "editeng",
"Cursor in the heart of the action?!");
nCursor = nCursor + rTxt.Len();
nCursor = nCursor + rTxt.getLength();
if ( bAllowUndoAction && ( rTxt.Len() == 1 ) )
if ( bAllowUndoAction && ( rTxt.getLength() == 1 ) )
ImplStartUndoAction();
bAllowUndoAction = false;
return true;
}
sal_Bool EdtAutoCorrDoc::Replace( sal_uInt16 nPos, const String& rTxt )
sal_Bool EdtAutoCorrDoc::Replace( sal_uInt16 nPos, const OUString& rTxt )
{
return ReplaceRange( nPos, rTxt.Len(), rTxt );
return ReplaceRange( nPos, rTxt.getLength(), rTxt );
}
sal_Bool EdtAutoCorrDoc::ReplaceRange( xub_StrLen nPos, xub_StrLen nSourceLength, const String& rTxt )
sal_Bool EdtAutoCorrDoc::ReplaceRange( xub_StrLen nPos, xub_StrLen nSourceLength, const OUString& rTxt )
{
// Actually a Replace introduce => corresponds to UNDO
sal_uInt16 nEnd = nPos+nSourceLength;
@@ -636,9 +636,9 @@ sal_Bool EdtAutoCorrDoc::ReplaceRange( xub_StrLen nPos, xub_StrLen nSourceLength
EditSelection(EditPaM(pCurNode, nPos), EditPaM(pCurNode, nEnd)));
if ( nPos == nCursor )
nCursor = nCursor + rTxt.Len();
nCursor = nCursor + rTxt.getLength();
if ( bAllowUndoAction && ( rTxt.Len() == 1 ) )
if ( bAllowUndoAction && ( rTxt.getLength() == 1 ) )
ImplStartUndoAction();
bAllowUndoAction = false;
@@ -691,7 +691,7 @@ sal_Bool EdtAutoCorrDoc::SetINetAttr( sal_uInt16 nStt, sal_uInt16 nEnd,
return true;
}
const String* EdtAutoCorrDoc::GetPrevPara( sal_Bool )
OUString EdtAutoCorrDoc::GetPrevPara( sal_Bool )
{
// Return previous paragraph, so that it can be determined,
// whether the current word is at the beginning of a sentence.
@@ -714,22 +714,22 @@ const String* EdtAutoCorrDoc::GetPrevPara( sal_Bool )
bBullet = true;
}
if ( bBullet )
return NULL;
return OUString();
for ( sal_Int32 n = nPos; n; )
{
n--;
ContentNode* pNode = rNodes[n];
if ( pNode->Len() )
return &pNode->GetString();
return pNode->GetString();
}
return NULL;
return OUString();
}
sal_Bool EdtAutoCorrDoc::ChgAutoCorrWord( sal_uInt16& rSttPos,
sal_uInt16 nEndPos, SvxAutoCorrect& rACorrect,
const String** ppPara )
OUString* pPara )
{
// Paragraph-start or a blank found, search for the word
// shortcut in Auto
@@ -754,8 +754,8 @@ sal_Bool EdtAutoCorrDoc::ChgAutoCorrWord( sal_uInt16& rSttPos,
nCursor -= ( nEndPos-rSttPos );
mpEditEngine->InsertText(aSel, pFnd->GetLong());
nCursor = nCursor + pFnd->GetLong().Len();
if( ppPara )
*ppPara = &pCurNode->GetString();
if( pPara )
*pPara = pCurNode->GetString();
bRet = true;
}
diff --git a/editeng/source/editeng/edtspell.hxx b/editeng/source/editeng/edtspell.hxx
index 8049b5f..375dd78 100644
--- a/editeng/source/editeng/edtspell.hxx
+++ b/editeng/source/editeng/edtspell.hxx
@@ -140,17 +140,17 @@ public:
~EdtAutoCorrDoc();
virtual sal_Bool Delete( sal_uInt16 nStt, sal_uInt16 nEnd );
virtual sal_Bool Insert( sal_uInt16 nPos, const String& rTxt );
virtual sal_Bool Replace( sal_uInt16 nPos, const String& rTxt );
virtual sal_Bool ReplaceRange( xub_StrLen nPos, xub_StrLen nLen, const String& rTxt );
virtual sal_Bool Insert( sal_uInt16 nPos, const OUString& rTxt );
virtual sal_Bool Replace( sal_uInt16 nPos, const OUString& rTxt );
virtual sal_Bool ReplaceRange( xub_StrLen nPos, xub_StrLen nLen, const OUString& rTxt );
virtual sal_Bool SetAttr( sal_uInt16 nStt, sal_uInt16 nEnd, sal_uInt16 nSlotId, SfxPoolItem& );
virtual sal_Bool SetINetAttr( sal_uInt16 nStt, sal_uInt16 nEnd, const OUString& rURL );
virtual const String* GetPrevPara( sal_Bool bAtNormalPos );
virtual OUString GetPrevPara( sal_Bool bAtNormalPos );
virtual sal_Bool ChgAutoCorrWord( sal_uInt16& rSttPos, sal_uInt16 nEndPos,
SvxAutoCorrect& rACorrect, const String** ppPara );
SvxAutoCorrect& rACorrect, OUString* pPara );
virtual LanguageType GetLanguage( sal_uInt16 nPos, sal_Bool bPrevPara = sal_False ) const;
diff --git a/editeng/source/misc/svxacorr.cxx b/editeng/source/misc/svxacorr.cxx
index 52fdb7c..fb7b339 100644
--- a/editeng/source/misc/svxacorr.cxx
+++ b/editeng/source/misc/svxacorr.cxx
@@ -175,7 +175,7 @@ SvxAutoCorrDoc::~SvxAutoCorrDoc()
// - FnCptlSttSntnc
// after the exchange of characters. Then the words, if necessary, can be inserted
// into the exception list.
void SvxAutoCorrDoc::SaveCpltSttWord( sal_uLong, xub_StrLen, const String&,
void SvxAutoCorrDoc::SaveCpltSttWord( sal_uLong, xub_StrLen, const OUString&,
sal_Unicode )
{
}
@@ -865,8 +865,8 @@ sal_Bool SvxAutoCorrect::FnCptlSttSntnc( SvxAutoCorrDoc& rDoc,
{
// Check out the previous paragraph, if it exists.
// If so, then check to paragraph separator at the end.
const String* pPrevPara = rDoc.GetPrevPara( bNormalPos );
if( !pPrevPara )
OUString aPrevPara = rDoc.GetPrevPara( bNormalPos );
if( !aPrevPara.isEmpty() )
{
// valid separator -> replace
OUString sChar( *pWordStt );
@@ -875,7 +875,7 @@ sal_Bool SvxAutoCorrect::FnCptlSttSntnc( SvxAutoCorrDoc& rDoc,
rDoc.ReplaceRange( xub_StrLen( pWordStt - pStart ), 1, sChar );
}
aText = *pPrevPara;
aText = aPrevPara;
bAtStart = sal_False;
pStart = aText.GetBuffer();
pStr = pStart + aText.Len();
@@ -1324,11 +1324,11 @@ SvxAutoCorrect::DoAutoCorrect( SvxAutoCorrDoc& rDoc, const String& rTxt,
if( IsAutoCorrFlag( Autocorrect ) )
{
const String* pPara = 0;
const String** ppPara = IsAutoCorrFlag(CptlSttSntnc) ? &pPara : 0;
OUString aPara;
OUString* pPara = IsAutoCorrFlag(CptlSttSntnc) ? &aPara : 0;
sal_Bool bChgWord = rDoc.ChgAutoCorrWord( nCapLttrPos, nInsPos,
*this, ppPara );
*this, pPara );
if( !bChgWord )
{
xub_StrLen nCapLttrPos1 = nCapLttrPos, nInsPos1 = nInsPos;
@@ -1343,7 +1343,7 @@ SvxAutoCorrect::DoAutoCorrect( SvxAutoCorrDoc& rDoc, const String& rTxt,
if( (nCapLttrPos1 != nCapLttrPos || nInsPos1 != nInsPos ) &&
nCapLttrPos1 < nInsPos1 &&
rDoc.ChgAutoCorrWord( nCapLttrPos1, nInsPos1, *this, ppPara ))
rDoc.ChgAutoCorrWord( nCapLttrPos1, nInsPos1, *this, pPara ))
{
bChgWord = sal_True;
nCapLttrPos = nCapLttrPos1;
@@ -1353,16 +1353,16 @@ SvxAutoCorrect::DoAutoCorrect( SvxAutoCorrDoc& rDoc, const String& rTxt,
if( bChgWord )
{
nRet = Autocorrect;
if( pPara )
if( !aPara.isEmpty() )
{
xub_StrLen nEnd = nCapLttrPos;
while( nEnd < pPara->Len() &&
!IsWordDelim( pPara->GetChar( nEnd )))
while( nEnd < aPara.getLength() &&
!IsWordDelim( aPara[ nEnd ]))
++nEnd;
// Capital letter at beginning of paragraph?
if( IsAutoCorrFlag( CptlSttSntnc ) &&
FnCptlSttSntnc( rDoc, *pPara, sal_False,
FnCptlSttSntnc( rDoc, aPara, sal_False,
nCapLttrPos, nEnd, eLang ) )
nRet |= CptlSttSntnc;
diff --git a/include/editeng/svxacorr.hxx b/include/editeng/svxacorr.hxx
index 42b42c5..c9631ed 100644
--- a/include/editeng/svxacorr.hxx
+++ b/include/editeng/svxacorr.hxx
@@ -87,32 +87,32 @@ public:
virtual ~SvxAutoCorrDoc();
virtual sal_Bool Delete( xub_StrLen nStt, xub_StrLen nEnd ) = 0;
virtual sal_Bool Insert( xub_StrLen nPos, const String& rTxt ) = 0;
virtual sal_Bool Replace( xub_StrLen nPos, const String& rTxt ) = 0;
virtual sal_Bool ReplaceRange( xub_StrLen nPos, xub_StrLen nLen, const String& rTxt ) = 0;
virtual sal_Bool Insert( xub_StrLen nPos, const OUString& rTxt ) = 0;
virtual sal_Bool Replace( xub_StrLen nPos, const OUString& rTxt ) = 0;
virtual sal_Bool ReplaceRange( xub_StrLen nPos, xub_StrLen nLen, const OUString& rTxt ) = 0;
virtual sal_Bool SetAttr( xub_StrLen nStt, xub_StrLen nEnd, sal_uInt16 nSlotId,
SfxPoolItem& ) = 0;
virtual sal_Bool SetINetAttr( xub_StrLen nStt, xub_StrLen nEnd, const OUString& rURL ) = 0;
// Return the text of a previous paragraph. This must not be empty!
// If no paragraph exits or just an empty one, then return 0.
// Return the text of a previous paragraph.
// If no paragraph exits or just an empty one, then return an empty string.
// The flag indicates:
// TRUE: before the normal insertion position (TRUE)
// FALSE: in which the corrected word was inserted.
// (Does not to have to be the same paragraph !!!!)
virtual const String* GetPrevPara( sal_Bool bAtNormalPos ) = 0;
virtual OUString GetPrevPara( sal_Bool bAtNormalPos ) = 0;
virtual sal_Bool ChgAutoCorrWord( xub_StrLen& rSttPos, xub_StrLen nEndPos,
SvxAutoCorrect& rACorrect,
const String** ppPara ) = 0;
OUString* pPara ) = 0;
// Is called after the change of the signs by the functions
// - FnCptlSttWrd
// - FnCptlSttSntnc
// As an option, the words can then be inserted into the exception lists.
virtual void SaveCpltSttWord( sal_uLong nFlag, xub_StrLen nPos,
const String& rExceptWord,
const OUString& rExceptWord,
sal_Unicode cChar );
// which language at the position?
diff --git a/sw/source/core/edit/acorrect.cxx b/sw/source/core/edit/acorrect.cxx
index 936f3a8..64bca9d 100644
--- a/sw/source/core/edit/acorrect.cxx
+++ b/sw/source/core/edit/acorrect.cxx
@@ -123,14 +123,14 @@ sal_Bool SwAutoCorrDoc::Delete( xub_StrLen nStt, xub_StrLen nEnd )
return sal_True;
}
sal_Bool SwAutoCorrDoc::Insert( xub_StrLen nPos, const String& rTxt )
sal_Bool SwAutoCorrDoc::Insert( xub_StrLen nPos, const OUString& rTxt )
{
SwPaM aPam( rCrsr.GetPoint()->nNode.GetNode(), nPos );
rEditSh.GetDoc()->InsertString( aPam, rTxt );
if( !bUndoIdInitialized )
{
bUndoIdInitialized = true;
if( 1 == rTxt.Len() )
if( 1 == rTxt.getLength() )
{
rEditSh.StartUndo( UNDO_AUTOCORRECT );
++m_nEndUndoCounter;
@@ -139,12 +139,12 @@ sal_Bool SwAutoCorrDoc::Insert( xub_StrLen nPos, const String& rTxt )
return sal_True;
}
sal_Bool SwAutoCorrDoc::Replace( xub_StrLen nPos, const String& rTxt )
sal_Bool SwAutoCorrDoc::Replace( xub_StrLen nPos, const OUString& rTxt )
{
return ReplaceRange( nPos, rTxt.Len(), rTxt );
return ReplaceRange( nPos, rTxt.getLength(), rTxt );
}
sal_Bool SwAutoCorrDoc::ReplaceRange( xub_StrLen nPos, xub_StrLen nSourceLength, const String& rTxt )
sal_Bool SwAutoCorrDoc::ReplaceRange( xub_StrLen nPos, xub_StrLen nSourceLength, const OUString& rTxt )
{
SwPaM* pPam = &rCrsr;
if( pPam->GetPoint()->nContent.GetIndex() != nPos )
@@ -161,8 +161,8 @@ sal_Bool SwAutoCorrDoc::ReplaceRange( xub_StrLen nPos, xub_StrLen nSourceLength,
// text attributes with dummy characters must not be replaced!
bool bDoReplace = true;
xub_StrLen const nLen = rTxt.Len();
for ( xub_StrLen n = 0; n < nLen; ++n )
sal_Int32 const nLen = rTxt.getLength();
for ( sal_Int32 n = 0; n < nLen; ++n )
{
sal_Unicode const Char = pNd->GetTxt()[n + nPos];
if ( ( CH_TXTATR_BREAKWORD == Char || CH_TXTATR_INWORD == Char )
@@ -197,7 +197,7 @@ sal_Bool SwAutoCorrDoc::ReplaceRange( xub_StrLen nPos, xub_StrLen nSourceLength,
}
else
{
if( nSourceLength != rTxt.Len() )
if( nSourceLength != rTxt.getLength() )
{
pPam->SetMark();
pPam->GetPoint()->nContent = std::min<sal_Int32>(
@@ -213,7 +213,7 @@ sal_Bool SwAutoCorrDoc::ReplaceRange( xub_StrLen nPos, xub_StrLen nSourceLength,
if( bUndoIdInitialized )
{
bUndoIdInitialized = true;
if( 1 == rTxt.Len() )
if( 1 == rTxt.getLength() )
{
rEditSh.StartUndo( UNDO_AUTOCORRECT );
++m_nEndUndoCounter;
@@ -266,15 +266,13 @@ sal_Bool SwAutoCorrDoc::SetINetAttr( xub_StrLen nStt, xub_StrLen nEnd, const OUS
/** Return the text of a previous paragraph
*
* This must not be empty!
*
* @param bAtNormalPos If <true> before the normal insert position; if <false> in which the
* corrected word was inserted. (Doesn't need to be the same paragraph!)
* @return text or 0, if previous paragraph does not exists or there are only blankness
*/
const String* SwAutoCorrDoc::GetPrevPara( sal_Bool bAtNormalPos )
OUString SwAutoCorrDoc::GetPrevPara( sal_Bool bAtNormalPos )
{
const String* pStr = 0;
OUString aStr;
if( bAtNormalPos || !pIdx )
pIdx = new SwNodeIndex( rCrsr.GetPoint()->nNode, -1 );
@@ -288,16 +286,16 @@ const String* SwAutoCorrDoc::GetPrevPara( sal_Bool bAtNormalPos )
pTNd = pIdx->GetNode().GetTxtNode();
}
if( pTNd && 0 == pTNd->GetAttrOutlineLevel() )//#outline level,zhaojianwei
pStr = reinterpret_cast<String const*>(&pTNd->GetTxt()); // FIXME
aStr = pTNd->GetTxt();
if( bUndoIdInitialized )
bUndoIdInitialized = true;
return pStr;
return aStr;
}
sal_Bool SwAutoCorrDoc::ChgAutoCorrWord( xub_StrLen & rSttPos, xub_StrLen nEndPos,
SvxAutoCorrect& rACorrect,
const String** ppPara )
SvxAutoCorrect& rACorrect,
OUString* pPara )
{
if( bUndoIdInitialized )
bUndoIdInitialized = true;
@@ -347,7 +345,7 @@ sal_Bool SwAutoCorrDoc::ChgAutoCorrWord( xub_StrLen & rSttPos, xub_StrLen nEndPo
DeleteSel( aPam );
pDoc->DontExpandFmt( *aPam.GetPoint() );
if( ppPara )
if( pPara )
{
OSL_ENSURE( !pIdx, "who has not deleted his Index?" );
pIdx = new SwNodeIndex( rCrsr.GetPoint()->nNode, -1 );
@@ -378,7 +376,7 @@ sal_Bool SwAutoCorrDoc::ChgAutoCorrWord( xub_StrLen & rSttPos, xub_StrLen nEndPo
aExpItem.RestoreDontExpandItems( *aPam.GetPoint() );
if( ppPara )
if( pPara )
{
++(*pIdx);
pTxtNd = pIdx->GetNode().GetTxtNode();
@@ -389,8 +387,8 @@ sal_Bool SwAutoCorrDoc::ChgAutoCorrWord( xub_StrLen & rSttPos, xub_StrLen nEndPo
}
}
if( bRet && ppPara && pTxtNd )
*ppPara = reinterpret_cast<String const*>(&pTxtNd->GetTxt()); //FIXME
if( bRet && pPara && pTxtNd )
*pPara = pTxtNd->GetTxt();
return bRet;
}
@@ -402,7 +400,7 @@ sal_Bool SwAutoCorrDoc::ChgAutoCorrWord( xub_StrLen & rSttPos, xub_StrLen nEndPo
// after the exchange of characters. Then the words, if necessary, can be inserted
// into the exception list.
void SwAutoCorrDoc::SaveCpltSttWord( sal_uLong nFlag, xub_StrLen nPos,
const String& rExceptWord,
const OUString& rExceptWord,
sal_Unicode cChar )
{
sal_uLong nNode = pIdx ? pIdx->GetIndex() : rCrsr.GetPoint()->nNode.GetIndex();
diff --git a/sw/source/core/inc/acorrect.hxx b/sw/source/core/inc/acorrect.hxx
index e0d0bc5c..a7a5e6b 100644
--- a/sw/source/core/inc/acorrect.hxx
+++ b/sw/source/core/inc/acorrect.hxx
@@ -58,9 +58,9 @@ public:
~SwAutoCorrDoc();
virtual sal_Bool Delete( xub_StrLen nStt, xub_StrLen nEnd );
virtual sal_Bool Insert( xub_StrLen nPos, const String& rTxt );
virtual sal_Bool Replace( xub_StrLen nPos, const String& rTxt );
virtual sal_Bool ReplaceRange( xub_StrLen nPos, xub_StrLen nLen, const String& rTxt );
virtual sal_Bool Insert( xub_StrLen nPos, const OUString& rTxt );
virtual sal_Bool Replace( xub_StrLen nPos, const OUString& rTxt );
virtual sal_Bool ReplaceRange( xub_StrLen nPos, xub_StrLen nLen, const OUString& rTxt );
virtual sal_Bool SetAttr( xub_StrLen nStt, xub_StrLen nEnd, sal_uInt16 nSlotId,
SfxPoolItem& );
@@ -68,23 +68,22 @@ public:
virtual sal_Bool SetINetAttr( xub_StrLen nStt, xub_StrLen nEnd, const OUString& rURL );
// return text of a previous paragraph
// This must not be empty/blank!
// If it does not exist or if there is nothing before, return 0.
// If it does not exist or if there is nothing before, return blank.
// - sal_True: paragraph before "normal" insertion position
// - sal_False: paragraph in that the corrected word was inserted
// (does not need to be the same paragraph)
virtual const String* GetPrevPara( sal_Bool bAtNormalPos );
virtual OUString GetPrevPara( sal_Bool bAtNormalPos );
virtual sal_Bool ChgAutoCorrWord( xub_StrLen& rSttPos, xub_StrLen nEndPos,
SvxAutoCorrect& rACorrect,
const String** ppPara );
OUString* pPara );
// Will be called after swapping characters by the functions
// - FnCptlSttWrd and
// - FnCptlSttSntnc.
// Afterwards the words can be added into exception list if needed.
virtual void SaveCpltSttWord( sal_uLong nFlag, xub_StrLen nPos,
const String& rExceptWord, sal_Unicode cChar );
const OUString& rExceptWord, sal_Unicode cChar );
virtual LanguageType GetLanguage( xub_StrLen nPos, sal_Bool bPrevPara ) const;
};