diff --git a/editeng/source/editeng/impedit.hxx b/editeng/source/editeng/impedit.hxx index 1c008fb..417415e 100644 --- a/editeng/source/editeng/impedit.hxx +++ b/editeng/source/editeng/impedit.hxx @@ -906,7 +906,7 @@ public: LanguageType GetDefaultLanguage() const { return eDefLanguage; } - LanguageType GetLanguage( const EditSelection rSelection ) const; + LanguageType GetLanguage( const EditSelection &rSelection ) const; LanguageType GetLanguage( const EditPaM& rPaM, sal_uInt16* pEndPos = NULL ) const; ::com::sun::star::lang::Locale GetLocale( const EditPaM& rPaM ) const; @@ -946,12 +946,12 @@ public: //adds one or more portions of text to the SpellPortions depending on language changes void AddPortionIterated( EditView& rEditView, - const EditSelection rSel, + const EditSelection &rSel, ::com::sun::star::uno::Reference< ::com::sun::star::linguistic2::XSpellAlternatives > xAlt, ::svx::SpellPortions& rToFill); //adds one portion to the SpellPortions void AddPortion( - const EditSelection rSel, + const EditSelection &rSel, ::com::sun::star::uno::Reference< ::com::sun::star::linguistic2::XSpellAlternatives > xAlt, ::svx::SpellPortions& rToFill, bool bIsField ); diff --git a/editeng/source/editeng/impedit3.cxx b/editeng/source/editeng/impedit3.cxx index 719a8753..b32cdc3 100644 --- a/editeng/source/editeng/impedit3.cxx +++ b/editeng/source/editeng/impedit3.cxx @@ -68,6 +68,7 @@ #include +#include #include #include #include @@ -86,9 +87,6 @@ using namespace ::com::sun::star::uno; using namespace ::com::sun::star::beans; using namespace ::com::sun::star::linguistic2; -SV_DECL_VARARR_SORT( SortedPositions, sal_uInt32, 16 ) -SV_IMPL_VARARR_SORT( SortedPositions, sal_uInt32 ); - #define CH_HYPH '-' #define RESDIFF 10 @@ -2252,14 +2250,14 @@ sal_uInt16 ImpEditEngine::SplitTextPortion( ParaPortion* pPortion, sal_uInt16 nP return nSplitPortion; } -void ImpEditEngine::CreateTextPortions( ParaPortion* pParaPortion, sal_uInt16& rStart /* , sal_Bool bCreateBlockPortions */ ) +void ImpEditEngine::CreateTextPortions( ParaPortion* pParaPortion, sal_uInt16& rStart ) { sal_uInt16 nStartPos = rStart; ContentNode* pNode = pParaPortion->GetNode(); DBG_ASSERT( pNode->Len(), "CreateTextPortions should not be used for empty paragraphs!" ); - SortedPositions aPositions; - aPositions.Insert( (sal_uInt32) 0 ); + ::std::set< sal_uInt32 > aPositions; + aPositions.insert( 0 ); sal_uInt16 nAttr = 0; EditCharAttrib* pAttrib = GetAttrib( pNode->GetCharAttribs().GetAttribs(), nAttr ); @@ -2267,23 +2265,23 @@ void ImpEditEngine::CreateTextPortions( ParaPortion* pParaPortion, sal_uInt16& r { // Insert Start and End into the Array... // The Insert method does not allow for duplicate values.... - aPositions.Insert( pAttrib->GetStart() ); - aPositions.Insert( pAttrib->GetEnd() ); + aPositions.insert( pAttrib->GetStart() ); + aPositions.insert( pAttrib->GetEnd() ); nAttr++; pAttrib = GetAttrib( pNode->GetCharAttribs().GetAttribs(), nAttr ); } - aPositions.Insert( pNode->Len() ); + aPositions.insert( pNode->Len() ); if ( pParaPortion->aScriptInfos.empty() ) ((ImpEditEngine*)this)->InitScriptTypes( GetParaPortions().GetPos( pParaPortion ) ); const ScriptTypePosInfos& rTypes = pParaPortion->aScriptInfos; for ( size_t nT = 0; nT < rTypes.size(); nT++ ) - aPositions.Insert( rTypes[nT].nStartPos ); + aPositions.insert( rTypes[nT].nStartPos ); const WritingDirectionInfos& rWritingDirections = pParaPortion->aWritingDirectionInfos; for ( size_t nD = 0; nD < rWritingDirections.size(); nD++ ) - aPositions.Insert( rWritingDirections[nD].nStartPos ); + aPositions.insert( rWritingDirections[nD].nStartPos ); if ( mpIMEInfos && mpIMEInfos->nLen && mpIMEInfos->pAttribs && ( mpIMEInfos->aPos.GetNode() == pNode ) ) { @@ -2292,11 +2290,11 @@ void ImpEditEngine::CreateTextPortions( ParaPortion* pParaPortion, sal_uInt16& r { if ( mpIMEInfos->pAttribs[n] != nLastAttr ) { - aPositions.Insert( mpIMEInfos->aPos.GetIndex() + n ); + aPositions.insert( mpIMEInfos->aPos.GetIndex() + n ); nLastAttr = mpIMEInfos->pAttribs[n]; } } - aPositions.Insert( mpIMEInfos->aPos.GetIndex() + mpIMEInfos->nLen ); + aPositions.insert( mpIMEInfos->aPos.GetIndex() + mpIMEInfos->nLen ); } // From ... Delete: @@ -2329,18 +2327,16 @@ void ImpEditEngine::CreateTextPortions( ParaPortion* pParaPortion, sal_uInt16& r pParaPortion->GetTextPortions().DeleteFromPortion( nInvPortion ); // A portion may also have been formed by a line break: - aPositions.Insert( nPortionStart ); + aPositions.insert( nPortionStart ); - sal_uInt16 nInvPos; -#ifdef DBG_UTIL - sal_Bool bFound = -#endif - aPositions.Seek_Entry( nPortionStart, &nInvPos ); + ::std::set< sal_uInt32 >::iterator nInvPos = aPositions.find( nPortionStart ); + DBG_ASSERT( (nInvPos != aPositions.end()), "InvPos ?!" ); - DBG_ASSERT( bFound && ( nInvPos < (aPositions.Count()-1) ), "InvPos ?!" ); - for ( sal_uInt16 i = nInvPos+1; i < aPositions.Count(); i++ ) + ::std::set< sal_uInt32 >::iterator i = nInvPos; + i++; + while ( i != aPositions.end() ) { - TextPortion* pNew = new TextPortion( (sal_uInt16)aPositions[i] - (sal_uInt16)aPositions[i-1] ); + TextPortion* pNew = new TextPortion( static_cast(*i++) - static_cast(*nInvPos++) ); pParaPortion->GetTextPortions().Insert( pNew, pParaPortion->GetTextPortions().Count()); } @@ -3361,12 +3357,6 @@ void ImpEditEngine::Paint( OutputDevice* pOutDev, Rectangle aClipRec, Point aSta } } } - - // comment - - - - } if ( GetStatus().DoOnlineSpelling() && !pPortion->GetNode()->GetWrongList()->empty() && pTextPortion->GetLen() ) @@ -3391,8 +3381,8 @@ void ImpEditEngine::Paint( OutputDevice* pOutDev, Rectangle aClipRec, Point aSta pOutDev->Pop(); - if ( pTmpDXArray ) - delete[] pTmpDXArray; + //The C++ language guarantees that delete p will do nothing if p is equal to NULL. + delete[] pTmpDXArray; if ( pTextPortion->GetKind() == PORTIONKIND_FIELD ) { diff --git a/editeng/source/editeng/impedit4.cxx b/editeng/source/editeng/impedit4.cxx index f76b0ca..043a879 100644 --- a/editeng/source/editeng/impedit4.cxx +++ b/editeng/source/editeng/impedit4.cxx @@ -1983,7 +1983,7 @@ bool ImpEditEngine::SpellSentence(EditView& rEditView, // Adds one portion to the SpellPortions void ImpEditEngine::AddPortion( - const EditSelection rSel, + const EditSelection& rSel, uno::Reference< XSpellAlternatives > xAlt, ::svx::SpellPortions& rToFill, bool bIsField) @@ -2007,7 +2007,7 @@ void ImpEditEngine::AddPortion( // Adds one or more portions of text to the SpellPortions depending on language changes void ImpEditEngine::AddPortionIterated( EditView& rEditView, - const EditSelection rSel, + const EditSelection& rSel, Reference< XSpellAlternatives > xAlt, ::svx::SpellPortions& rToFill) { diff --git a/svtools/source/edit/texteng.cxx b/svtools/source/edit/texteng.cxx index 74c4119..8c17c3d 100644 --- a/svtools/source/edit/texteng.cxx +++ b/svtools/source/edit/texteng.cxx @@ -62,6 +62,7 @@ #include #include +#include #include using namespace ::com::sun::star; @@ -70,10 +71,6 @@ using namespace ::rtl; typedef TextView* TextViewPtr; SV_DECL_PTRARR( TextViews, TextViewPtr, 0 ) -// SV_IMPL_PTRARR( TextViews, TextViewPtr ); - -SV_DECL_VARARR_SORT( TESortedPositions, sal_uLong, 16 ) -SV_IMPL_VARARR_SORT( TESortedPositions, sal_uLong ) #define RESDIFF 10 #define SCRLRANGE 20 // 1/20 der Breite/Hoehe scrollen, wenn im QueryDrop @@ -1822,9 +1819,9 @@ void TextEngine::CreateTextPortions( sal_uLong nPara, sal_uInt16 nStartPos ) TextNode* pNode = pTEParaPortion->GetNode(); DBG_ASSERT( pNode->GetText().Len(), "CreateTextPortions sollte nicht fuer leere Absaetze verwendet werden!" ); - TESortedPositions aPositions; + ::std::set< sal_uLong > aPositions; sal_uLong nZero = 0; - aPositions.Insert( nZero ); + aPositions.insert( nZero ); sal_uInt16 nAttribs = pNode->GetCharAttribs().Count(); for ( sal_uInt16 nAttr = 0; nAttr < nAttribs; nAttr++ ) @@ -1833,14 +1830,14 @@ void TextEngine::CreateTextPortions( sal_uLong nPara, sal_uInt16 nStartPos ) // Start und Ende in das Array eintragen... // Die InsertMethode laesst keine doppelten Werte zu.... - aPositions.Insert( pAttrib->GetStart() ); - aPositions.Insert( pAttrib->GetEnd() ); + aPositions.insert( pAttrib->GetStart() ); + aPositions.insert( pAttrib->GetEnd() ); } - aPositions.Insert( pNode->GetText().Len() ); + aPositions.insert( pNode->GetText().Len() ); const TEWritingDirectionInfos& rWritingDirections = pTEParaPortion->GetWritingDirectionInfos(); for ( sal_uInt16 nD = 0; nD < rWritingDirections.Count(); nD++ ) - aPositions.Insert( rWritingDirections[nD].nStartPos ); + aPositions.insert( rWritingDirections[nD].nStartPos ); if ( mpIMEInfos && mpIMEInfos->pAttribs && ( mpIMEInfos->aPos.GetPara() == nPara ) ) { @@ -1849,7 +1846,7 @@ void TextEngine::CreateTextPortions( sal_uLong nPara, sal_uInt16 nStartPos ) { if ( mpIMEInfos->pAttribs[n] != nLastAttr ) { - aPositions.Insert( mpIMEInfos->aPos.GetIndex() + n ); + aPositions.insert( mpIMEInfos->aPos.GetIndex() + n ); nLastAttr = mpIMEInfos->pAttribs[n]; } } @@ -1858,13 +1855,13 @@ void TextEngine::CreateTextPortions( sal_uLong nPara, sal_uInt16 nStartPos ) sal_uInt16 nTabPos = pNode->GetText().Search( '\t', 0 ); while ( nTabPos != STRING_NOTFOUND ) { - aPositions.Insert( nTabPos ); - aPositions.Insert( nTabPos + 1 ); + aPositions.insert( nTabPos ); + aPositions.insert( nTabPos + 1 ); nTabPos = pNode->GetText().Search( '\t', nTabPos+1 ); } // Ab ... loeschen: - // Leider muss die Anzahl der TextPortions mit aPositions.Count() + // Leider muss die Anzahl der TextPortions mit aPositions.size() // nicht uebereinstimmen, da evtl. Zeilenumbrueche... sal_uInt16 nPortionStart = 0; sal_uInt16 nInvPortion = 0; @@ -1880,7 +1877,7 @@ void TextEngine::CreateTextPortions( sal_uLong nPara, sal_uInt16 nStartPos ) break; } } - DBG_ASSERT( nP < pTEParaPortion->GetTextPortions().Count() || !pTEParaPortion->GetTextPortions().Count(), "Nichts zum loeschen: CreateTextPortions" ); + DBG_ASSERT( nP < pTEParaPortion->GetTextPortions().Count() || !pTEParaPortion->GetTextPortions().Count(), "Nothing to Delete: CreateTextPortions" ); if ( nInvPortion && ( nPortionStart+pTEParaPortion->GetTextPortions().GetObject(nInvPortion)->GetLen() > nStartPos ) ) { // lieber eine davor... @@ -1891,29 +1888,26 @@ void TextEngine::CreateTextPortions( sal_uLong nPara, sal_uInt16 nStartPos ) } pTEParaPortion->GetTextPortions().DeleteFromPortion( nInvPortion ); - // Eine Portion kann auch durch einen Zeilenumbruch entstanden sein: - aPositions.Insert( nPortionStart ); - - sal_uInt16 nInvPos; - #ifdef DBG_UTIL - sal_Bool bFound = - #endif - aPositions.Seek_Entry( nPortionStart, &nInvPos ); - DBG_ASSERT( bFound && ( nInvPos < (aPositions.Count()-1) ), "InvPos ?!" ); - for ( sal_uInt16 i = nInvPos+1; i < aPositions.Count(); i++ ) + // A portion may be formed by a line break: + aPositions.insert( nPortionStart ); + + std::set< sal_uLong >::iterator nInvPos = aPositions.find( nPortionStart ); + DBG_ASSERT( (nInvPos != aPositions.end()), "InvPos ?!" ); + std::set< sal_uLong >::iterator i = nInvPos; + i++; + while ( i != aPositions.end() ) { - TETextPortion* pNew = new TETextPortion( (sal_uInt16)aPositions[i] - (sal_uInt16)aPositions[i-1] ); + TETextPortion* pNew = new TETextPortion( static_cast< sal_uInt16 >(*i++) - static_cast< sal_uInt16 >(*nInvPos++) ); pTEParaPortion->GetTextPortions().Insert( pNew, pTEParaPortion->GetTextPortions().Count()); } - - DBG_ASSERT( pTEParaPortion->GetTextPortions().Count(), "Keine Portions?!" ); + DBG_ASSERT( pTEParaPortion->GetTextPortions().Count(), "No Portions?!" ); } void TextEngine::RecalcTextPortion( sal_uLong nPara, sal_uInt16 nStartPos, short nNewChars ) { TEParaPortion* pTEParaPortion = mpTEParaPortions->GetObject( nPara ); - DBG_ASSERT( pTEParaPortion->GetTextPortions().Count(), "Keine Portions!" ); - DBG_ASSERT( nNewChars, "RecalcTextPortion mit Diff == 0" ); + DBG_ASSERT( pTEParaPortion->GetTextPortions().Count(), "Do Portions not exists?" ); + DBG_ASSERT( nNewChars, "RecalcTextPortion with Diff == 0" ); TextNode* const pNode = pTEParaPortion->GetNode(); if ( nNewChars > 0 ) @@ -1930,9 +1924,6 @@ void TextEngine::RecalcTextPortion( sal_uLong nPara, sal_uInt16 nStartPos, short sal_uInt16 nNewPortionPos = 0; if ( nStartPos ) nNewPortionPos = SplitTextPortion( nPara, nStartPos ) + 1; -// else if ( ( pTEParaPortion->GetTextPortions().Count() == 1 ) && -// !pTEParaPortion->GetTextPortions()[0]->GetLen() ) -// pTEParaPortion->GetTextPortions().Reset(); // DummyPortion // Eine leere Portion kann hier stehen, wenn der Absatz leer war, // oder eine Zeile durch einen harten Zeilenumbruch entstanden ist.