Date: prev next · Thread: first prev next last
2012 Archives by date, by thread · List index


Hi

License statement already on file.

"make check" succeeds.

Note that I tried converting these usages to boost::ptr_map, but I ran into entirely undecipherable C++ template errors. (can't wait for template-type-checking aka. concepts to make it into the language).

Regards, Noel Grandin

Disclaimer: http://www.peralex.com/disclaimer.html


diff --git a/editeng/inc/editeng/svxrtf.hxx b/editeng/inc/editeng/svxrtf.hxx
index c79f2bd..691725f 100644
--- a/editeng/inc/editeng/svxrtf.hxx
+++ b/editeng/inc/editeng/svxrtf.hxx
@@ -29,7 +29,6 @@
 #ifndef _SVXRTF_HXX
 #define _SVXRTF_HXX
 
-#include <tools/table.hxx>
 #include <tools/string.hxx>
 #include <svl/itemset.hxx>
 #include <svtools/parrtf.hxx>
@@ -39,6 +38,8 @@
 #include <deque>
 #include <utility>
 #include <vector>
+#include <map>
+
 class Font;
 class Color;
 class Graphic;
@@ -85,8 +86,8 @@ public:
 
 typedef Color* ColorPtr;
 typedef std::deque< ColorPtr > SvxRTFColorTbl;
-DECLARE_TABLE( SvxRTFFontTbl, Font* )
-DECLARE_TABLE( SvxRTFStyleTbl, SvxRTFStyleType* )
+typedef std::map<short, Font*> SvxRTFFontTbl;
+typedef std::map<sal_uInt16, SvxRTFStyleType*> SvxRTFStyleTbl;
 typedef SvxRTFItemStackType* SvxRTFItemStackTypePtr;
 SV_DECL_PTRARR_DEL( SvxRTFItemStackList, SvxRTFItemStackTypePtr, 1 )
 
diff --git a/editeng/source/editeng/eertfpar.cxx b/editeng/source/editeng/eertfpar.cxx
index d508716..4e7254f 100644
--- a/editeng/source/editeng/eertfpar.cxx
+++ b/editeng/source/editeng/eertfpar.cxx
@@ -371,10 +371,11 @@ void EditRTFParser::SetAttrInDoc( SvxRTFItemStackType &rSet )
 
     if ( rSet.StyleNo() && pImpEditEngine->GetStyleSheetPool() && 
pImpEditEngine->GetStatus().DoImportRTFStyleSheets() )
     {
-        SvxRTFStyleType* pS = GetStyleTbl().Get( rSet.StyleNo() );
-        DBG_ASSERT( pS, "Template not defined in RTF!" );
-        if ( pS )
+        SvxRTFStyleTbl::iterator it = GetStyleTbl().find( rSet.StyleNo() );
+        DBG_ASSERT( it != GetStyleTbl().end(), "Template not defined in RTF!" );
+        if ( it != GetStyleTbl().end() )
         {
+            SvxRTFStyleType* pS = it->second;
             pImpEditEngine->SetStyleSheet( EditSelection( aStartPaM, aEndPaM ), 
(SfxStyleSheet*)pImpEditEngine->GetStyleSheetPool()->Find( pS->sName, SFX_STYLE_FAMILY_ALL ) );
             nOutlLevel = pS->nOutlineNo;
         }
@@ -433,11 +434,17 @@ void EditRTFParser::SetAttrInDoc( SvxRTFItemStackType &rSet )
 
 SvxRTFStyleType* EditRTFParser::FindStyleSheet( const XubString& rName )
 {
-    SvxRTFStyleType* pS = GetStyleTbl().First();
-    while ( pS && ( pS->sName != rName ) )
-        pS = GetStyleTbl().Next();
+    SvxRTFStyleTbl aTable = GetStyleTbl();
+    SvxRTFStyleTbl::iterator it = aTable.begin();
+    while ( it != aTable.end() )
+    {
+        SvxRTFStyleType* pS = it->second;
+        if ( pS->sName == rName )
+            return pS;
+        ++it;
+    }
 
-    return pS;
+    return NULL;
 }
 
 SfxStyleSheet* EditRTFParser::CreateStyleSheet( SvxRTFStyleType* pRTFStyle )
@@ -451,9 +458,13 @@ SfxStyleSheet* EditRTFParser::CreateStyleSheet( SvxRTFStyleType* pRTFStyle )
     String aParent;
     if ( pRTFStyle->nBasedOn )
     {
-        SvxRTFStyleType* pS = GetStyleTbl().Get( pRTFStyle->nBasedOn );
-        if ( pS && ( pS !=pRTFStyle ) )
-            aParent = pS->sName;
+        SvxRTFStyleTbl::iterator it = GetStyleTbl().find( pRTFStyle->nBasedOn );
+        if ( it != GetStyleTbl().end())
+        {
+            SvxRTFStyleType* pS = it->second;
+            if ( pS && ( pS !=pRTFStyle ) )
+                aParent = pS->sName;
+        }
     }
 
     pStyle = (SfxStyleSheet*) &pImpEditEngine->GetStyleSheetPool()->Make( aName, 
SFX_STYLE_FAMILY_PARA );
@@ -484,12 +495,10 @@ void EditRTFParser::CreateStyleSheets()
     // the SvxRTFParser haa  now created the template...
     if ( pImpEditEngine->GetStyleSheetPool() && 
pImpEditEngine->GetStatus().DoImportRTFStyleSheets() )
     {
-        SvxRTFStyleType* pRTFStyle = GetStyleTbl().First();
-        while ( pRTFStyle )
+        for (SvxRTFStyleTbl::iterator it = GetStyleTbl().begin(); it != GetStyleTbl().end(); ++it)
         {
+            SvxRTFStyleType* pRTFStyle = it->second;
             CreateStyleSheet( pRTFStyle );
-
-            pRTFStyle = GetStyleTbl().Next();
         }
     }
 }
diff --git a/editeng/source/rtf/svxrtf.cxx b/editeng/source/rtf/svxrtf.cxx
index 8b9d93c..8a148a8 100644
--- a/editeng/source/rtf/svxrtf.cxx
+++ b/editeng/source/rtf/svxrtf.cxx
@@ -77,7 +77,6 @@ SvxRTFParser::SvxRTFParser( SfxItemPool& rPool, SvStream& rIn,
             int bReadNewDoc )
     : SvRTFParser( rIn, 5 ),
     rStrm(rIn),
-    aFontTbl( 16, 4 ),
     pInsPos( 0 ),
     pAttrPool( &rPool ),
     m_xDocProps( i_xDocProps ),
@@ -119,10 +118,10 @@ SvxRTFParser::~SvxRTFParser()
 {
     if( !aColorTbl.empty() )
         ClearColorTbl();
-    if( aFontTbl.Count() )
-        ClearFontTbl();
-    if( aStyleTbl.Count() )
+    if( !aStyleTbl.empty() )
         ClearStyleTbl();
+    if( !aFontTbl.empty() )
+        ClearFontTbl();
     if( !aAttrStack.empty() )
         ClearAttrStack();
 
@@ -149,11 +148,7 @@ SvParserState SvxRTFParser::CallParser()
 
     if( !aColorTbl.empty() )
         ClearColorTbl();
-    if( aFontTbl.Count() )
-        ClearFontTbl();
-    if( aStyleTbl.Count() )
-        ClearStyleTbl();
-    if( !aAttrStack.empty() )
+   if( !aAttrStack.empty() )
         ClearAttrStack();
 
     bIsSetDfltTab = sal_False;
@@ -194,7 +189,7 @@ void SvxRTFParser::NextToken( int nToken )
     case RTF_DEFF:
             if( bNewDoc )
             {
-                if( aFontTbl.Count() )
+                if( !aFontTbl.empty() )
                     // Can immediately be set
                     SetDefault( nToken, nTokenValue );
                 else
@@ -385,14 +380,12 @@ void SvxRTFParser::ReadStyleTable()
             {
                 pStyle->sName = DelCharAtEnd( aToken, ';' );
 
-                if( aStyleTbl.Count() )
+                if( !aStyleTbl.empty() )
                 {
-                    SvxRTFStyleType* pOldSt = aStyleTbl.Remove( nStyleNo );
-                    if( pOldSt )
-                        delete pOldSt;
+                    aStyleTbl.erase(nStyleNo);
                 }
                 // All data from the font is available, so off to the table
-                aStyleTbl.Insert( nStyleNo, pStyle );
+                aStyleTbl[ nStyleNo ] = pStyle;
                 pStyle = new SvxRTFStyleType( *pAttrPool, &aWhichMap[0] );
                 pStyle->aAttrSet.Put( GetRTFDefaults() );
                 nStyleNo = 0;
@@ -596,7 +589,7 @@ void SvxRTFParser::ReadFontTable()
                 (sFntNm += ';' ) += sAltNm;
 
             pFont->SetName( sFntNm );
-            aFontTbl.Insert( nInsFontNo, pFont );
+            aFontTbl[ nInsFontNo ] = pFont;
             pFont = new Font();
             pFont->SetCharSet( nSystemChar );
             sAltNm.Erase();
@@ -798,14 +791,16 @@ void SvxRTFParser::ClearColorTbl()
 
 void SvxRTFParser::ClearFontTbl()
 {
-    for( sal_uInt32 nCnt = aFontTbl.Count(); nCnt; )
-        delete aFontTbl.GetObject( --nCnt );
+    for (SvxRTFFontTbl::iterator it = aFontTbl.begin(); it != aFontTbl.end(); ++it)
+        delete it->second;
+    aFontTbl.clear();
 }
 
 void SvxRTFParser::ClearStyleTbl()
 {
-    for( sal_uInt32 nCnt = aStyleTbl.Count(); nCnt; )
-        delete aStyleTbl.GetObject( --nCnt );
+    for (SvxRTFStyleTbl::iterator it = aStyleTbl.begin(); it != aStyleTbl.end(); ++it)
+        delete it->second;
+    aStyleTbl.clear();
 }
 
 void SvxRTFParser::ClearAttrStack()
@@ -833,8 +828,9 @@ String& SvxRTFParser::DelCharAtEnd( String& rStr, const sal_Unicode cDel )
 
 const Font& SvxRTFParser::GetFont( sal_uInt16 nId )
 {
-    const Font* pFont = aFontTbl.Get( nId );
-    if( !pFont )
+    SvxRTFFontTbl::const_iterator it = aFontTbl.find( nId );
+    const Font* pFont;
+    if( it == aFontTbl.end() )
     {
         const SvxFontItem& rDfltFont = (const SvxFontItem&)
                         pAttrPool->GetDefaultItem(
@@ -843,6 +839,8 @@ const Font& SvxRTFParser::GetFont( sal_uInt16 nId )
         pDfltFont->SetFamily( rDfltFont.GetFamily() );
         pFont = pDfltFont;
     }
+    else
+        pFont = it->second;
     return *pFont;
 }
 
@@ -872,10 +870,9 @@ void SvxRTFParser::_ClearStyleAttr( SvxRTFItemStackType& rStkType )
     const SfxPoolItem* pItem;
     SfxWhichIter aIter( rSet );
 
-    SvxRTFStyleType* pStyle;
     if( !IsChkStyleAttr() ||
         !rStkType.GetAttrSet().Count() ||
-        0 == ( pStyle = aStyleTbl.Get( rStkType.nStyleNo ) ))
+        aStyleTbl.count( rStkType.nStyleNo ) == 0 )
     {
         for( sal_uInt16 nWhich = aIter.GetCurWhich(); nWhich; nWhich = aIter.NextWhich() )
         {
@@ -889,6 +886,7 @@ void SvxRTFParser::_ClearStyleAttr( SvxRTFItemStackType& rStkType )
     {
         // Delete all Attributes, which are already defined in the Style,
         // from the current AttrSet.
+        SvxRTFStyleType* pStyle = aStyleTbl.find( rStkType.nStyleNo )->second;
         SfxItemSet &rStyleSet = pStyle->aAttrSet;
         const SfxPoolItem* pSItem;
         for( sal_uInt16 nWhich = aIter.GetCurWhich(); nWhich; nWhich = aIter.NextWhich() )
diff --git a/sw/source/filter/rtf/rtffld.cxx b/sw/source/filter/rtf/rtffld.cxx
index 51741e1..1be8e49 100644
--- a/sw/source/filter/rtf/rtffld.cxx
+++ b/sw/source/filter/rtf/rtffld.cxx
@@ -595,8 +595,11 @@ int SwRTFParser::MakeFieldInst( String& rFieldStr )
                         // Font setzen
                         {
                             SvxRTFFontTbl& rTbl = GetFontTbl();
-                            for( Font* pFont = rTbl.First(); pFont;
-                                    pFont = rTbl.Next() )
+                            
+                            for( SvxRTFFontTbl::iterator it = rTbl.begin();
+                                it != rTbl.end(); ++it )
+                            {
+                                Font* pFont = it->second;
                                 if( pFont->GetName() == sParam )
                                 {
                                     rSet.Put( SvxFontItem(
@@ -608,6 +611,7 @@ int SwRTFParser::MakeFieldInst( String& rFieldStr )
                                             RES_CHRATR_FONT ));
                                     break;
                                 }
+                            }
                         }
                         break;
                     case 'h': case 'H':
diff --git a/sw/source/filter/rtf/rtfnum.cxx b/sw/source/filter/rtf/rtfnum.cxx
index 07b3319..dc283be 100644
--- a/sw/source/filter/rtf/rtfnum.cxx
+++ b/sw/source/filter/rtf/rtfnum.cxx
@@ -585,7 +585,7 @@ void SwRTFParser::ReadListOverrideTable()
     }
 
     // search the outline numrule and set it into the doc
-    if( GetStyleTbl().Count() )
+    if( !GetStyleTbl().empty() )
     {
         if( !bStyleTabValid )
             MakeStyleTab();
@@ -594,11 +594,12 @@ void SwRTFParser::ReadListOverrideTable()
         std::map<sal_Int32,SwTxtFmtColl*>::const_iterator iterColl;
         sal_uInt16 nRulePos( USHRT_MAX );
         const SwNumRule *pNumRule = 0;
-        SvxRTFStyleType* pStyle = GetStyleTbl().First();
+        SvxRTFStyleTbl::iterator it = GetStyleTbl().begin();
         do {
+            SvxRTFStyleType* pStyle = it->second;
             if ( MAXLEVEL > pStyle->nOutlineNo )
             {
-                iterColl = aTxtCollTbl.find( (sal_uInt16)GetStyleTbl().GetCurKey() );
+                iterColl = aTxtCollTbl.find( it->first );
                 if ( iterColl != aTxtCollTbl.end() )
                 {
                     const SfxItemState eItemState =
@@ -634,8 +635,9 @@ void SwRTFParser::ReadListOverrideTable()
             }
 
             pStyle->aAttrSet.ClearItem( FN_PARAM_NUM_LEVEL );
-
-        } while( 0 != (pStyle = GetStyleTbl().Next()) );
+            
+            ++it;
+        } while( it != GetStyleTbl().end() );
     }
 
     SkipToken( -1 );        // die schliesende Klammer wird "oben" ausgewertet
@@ -723,17 +725,15 @@ void SwRTFParser::RemoveUnusedNumRules()
 const Font* SwRTFParser::FindFontOfItem( const SvxFontItem& rItem ) const
 {
     SvxRTFFontTbl& rFntTbl = ((SwRTFParser*)this)->GetFontTbl();
-    const Font* pFnt = rFntTbl.First();
-    while( pFnt )
+    for (SvxRTFFontTbl::iterator it = rFntTbl.begin(); it != rFntTbl.end(); ++it)
     {
+        const Font* pFnt = it->second;
         if( pFnt->GetFamily() == rItem.GetFamily() &&
             pFnt->GetName() == rItem.GetFamilyName() &&
             pFnt->GetStyleName() == rItem.GetStyleName() &&
             pFnt->GetPitch() == rItem.GetPitch() &&
             pFnt->GetCharSet() == rItem.GetCharSet() )
             return pFnt;
-
-        pFnt = rFntTbl.Next();
     }
     return 0;
 }
diff --git a/sw/source/filter/rtf/swparrtf.cxx b/sw/source/filter/rtf/swparrtf.cxx
index 81abb16..59b93b6 100644
--- a/sw/source/filter/rtf/swparrtf.cxx
+++ b/sw/source/filter/rtf/swparrtf.cxx
@@ -2195,8 +2195,9 @@ void SwRTFParser::SetAttrInDoc( SvxRTFItemStackType &rSet )
             ((SwFmtCharFmt*)pCharFmt)->GetCharFmt() )
         {
             const String& rName = ((SwFmtCharFmt*)pCharFmt)->GetCharFmt()->GetName();
-            SvxRTFStyleType* pStyle = GetStyleTbl().First();
-            do {
+            for (SvxRTFStyleTbl::iterator it = GetStyleTbl().begin(); it != GetStyleTbl().end(); 
++it)
+            {
+                SvxRTFStyleType* pStyle = it->second;
                 if( pStyle->bIsCharFmt && pStyle->sName == rName )
                 {
                     // alle Attribute, die schon vom Style definiert sind, aus dem
@@ -2218,7 +2219,7 @@ void SwRTFParser::SetAttrInDoc( SvxRTFItemStackType &rSet )
                     }
                     break;
                 }
-            } while( 0 != (pStyle = GetStyleTbl().Next()) );
+            }
 
             pDoc->InsertPoolItem(aPam, *pCharFmt, 0);
             rSet.GetAttrSet().ClearItem(RES_TXTATR_CHARFMT);     //test hack
@@ -2734,7 +2735,7 @@ void SwRTFParser::ReadDocControls( int nToken )
 void SwRTFParser::MakeStyleTab()
 {
     // dann erzeuge aus der SvxStyle-Tabelle die Swg-Collections
-    if( GetStyleTbl().Count() )
+    if( !GetStyleTbl().empty() )
     {
         sal_uInt16 nValidOutlineLevels = 0;
         if( !IsNewDoc() )
@@ -2746,9 +2747,10 @@ void SwRTFParser::MakeStyleTab()
                     nValidOutlineLevels |= 1 << rColls[ n 
]->GetAssignedOutlineStyleLevel();//<-end,zhaojianwei
         }
 
-        SvxRTFStyleType* pStyle = GetStyleTbl().First();
-        do {
-            sal_uInt16 nNo = sal_uInt16( GetStyleTbl().GetCurKey() );
+       for (SvxRTFStyleTbl::iterator it = GetStyleTbl().begin(); it != GetStyleTbl().end(); ++it)
+       {
+            sal_uInt16 nNo = it->first;
+            SvxRTFStyleType* pStyle = it->second;
             if( pStyle->bIsCharFmt )
             {
                 if(aCharFmtTbl.find( nNo ) == aCharFmtTbl.end())
@@ -2761,7 +2763,7 @@ void SwRTFParser::MakeStyleTab()
                 MakeStyle( nNo, *pStyle );
             }
 
-        } while( 0 != (pStyle = GetStyleTbl().Next()) );
+        }
         bStyleTabValid = sal_True;
     }
 }
@@ -3996,7 +3998,10 @@ SwTxtFmtColl* SwRTFParser::MakeStyle( sal_uInt16 nNo, const SvxRTFStyleType& 
rSt
     sal_uInt16 nStyleNo = rStyle.nBasedOn;
     if( rStyle.bBasedOnIsSet && nStyleNo != nNo )
     {
-        SvxRTFStyleType* pDerivedStyle = GetStyleTbl().Get( nStyleNo );
+        SvxRTFStyleTbl::iterator styleIter = GetStyleTbl().find( nStyleNo );
+        SvxRTFStyleType* pDerivedStyle = NULL;
+        if ( styleIter != GetStyleTbl().end() )
+            pDerivedStyle = styleIter->second;
 
         SwTxtFmtColl* pDerivedColl = NULL;
         std::map<sal_Int32,SwTxtFmtColl*>::iterator iter = aTxtCollTbl.find(nStyleNo);
@@ -4041,10 +4046,11 @@ SwTxtFmtColl* SwRTFParser::MakeStyle( sal_uInt16 nNo, const 
SvxRTFStyleType& rSt
         if( iter == aTxtCollTbl.end())            // noch nicht vorhanden, also anlegen
         {
             // ist die ueberhaupt als Style vorhanden ?
-            SvxRTFStyleType* pMkStyle = GetStyleTbl().Get( nStyleNo );
-            pNext = pMkStyle
-                    ? MakeStyle( nStyleNo, *pMkStyle )
-                    : pDoc->GetTxtCollFromPool( RES_POOLCOLL_STANDARD, false );
+            SvxRTFStyleTbl::iterator styleIter = GetStyleTbl().find( nStyleNo );
+            if ( styleIter != GetStyleTbl().end() )
+                pNext = MakeStyle( nStyleNo, *styleIter->second );
+            else
+                pDoc->GetTxtCollFromPool( RES_POOLCOLL_STANDARD, false );
         }
         else
             pNext = iter->second;
@@ -4067,7 +4073,11 @@ SwCharFmt* SwRTFParser::MakeCharStyle( sal_uInt16 nNo, const 
SvxRTFStyleType& rS
     sal_uInt16 nStyleNo = rStyle.nBasedOn;
     if( rStyle.bBasedOnIsSet && nStyleNo != nNo )
     {
-        SvxRTFStyleType* pDerivedStyle = GetStyleTbl().Get( nStyleNo );
+        SvxRTFStyleTbl::iterator styleIter = GetStyleTbl().find( nStyleNo );
+        SvxRTFStyleType* pDerivedStyle = NULL;
+        if ( styleIter != GetStyleTbl().end() )
+            pDerivedStyle = styleIter->second;
+            
         SwCharFmt* pDerivedFmt = NULL;
         std::map<sal_Int32,SwCharFmt*>::iterator iter = aCharFmtTbl.find( nStyleNo );
 

Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.