[Libreoffice-commits] .: 3 commits - sc/source

Markus Mohrhard mmohrhard at kemper.freedesktop.org
Sat Apr 21 03:51:19 PDT 2012


 sc/source/filter/excel/xestyle.cxx |   78 +++++++++++++++++++++++--------------
 sc/source/filter/inc/xestyle.hxx   |   25 ++++++-----
 2 files changed, 64 insertions(+), 39 deletions(-)

New commits:
commit 9894f158a287bdfe9933df96ab117a9527e9195b
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date:   Sat Apr 21 03:12:11 2012 +0200

    simplify lifetime management of some variables

diff --git a/sc/source/filter/excel/xestyle.cxx b/sc/source/filter/excel/xestyle.cxx
index ce902cd..7d98fcf 100644
--- a/sc/source/filter/excel/xestyle.cxx
+++ b/sc/source/filter/excel/xestyle.cxx
@@ -1234,7 +1234,7 @@ XclExpNumFmtBuffer::XclExpNumFmtBuffer( const XclExpRoot& rRoot ) :
         cannot convert from 'class String *' to 'class String (*)[54]'
         The effective result here is class String (*)[54*1] */
     mxFormatter( new SvNumberFormatter( rRoot.GetDoc().GetServiceManager(), LANGUAGE_ENGLISH_US ) ),
-    mpKeywordTable( new NfKeywordTable[ 1 ] ),
+    mpKeywordTable( new NfKeywordTable ),
     mnStdFmt( GetFormatter().GetStandardFormat( ScGlobal::eLnge ) )
 {
     switch( GetBiff() )
@@ -1256,7 +1256,6 @@ XclExpNumFmtBuffer::XclExpNumFmtBuffer( const XclExpRoot& rRoot ) :
 
 XclExpNumFmtBuffer::~XclExpNumFmtBuffer()
 {
-    delete[] mpKeywordTable;
 }
 
 sal_uInt16 XclExpNumFmtBuffer::Insert( sal_uLong nScNumFmt )
@@ -1367,7 +1366,7 @@ String GetNumberFormatCode(XclRoot& rRoot, const sal_uInt16 nScNumFmt, SvNumberF
 
 String XclExpNumFmtBuffer::GetFormatCode( sal_uInt16 nScNumFmt )
 {
-    return GetNumberFormatCode( *this, nScNumFmt, mxFormatter.get(), mpKeywordTable );
+    return GetNumberFormatCode( *this, nScNumFmt, mxFormatter.get(), mpKeywordTable.get() );
 }
 
 // XF, STYLE record - Cell formatting =========================================
@@ -2840,7 +2839,7 @@ void XclExpXFBuffer::AddBorderAndFill( const XclExpXF& rXF )
 XclExpDxfs::XclExpDxfs( const XclExpRoot& rRoot )
     : XclExpRoot( rRoot ),
     mxFormatter( new SvNumberFormatter( rRoot.GetDoc().GetServiceManager(), LANGUAGE_ENGLISH_US ) ),
-    mpKeywordTable( new NfKeywordTable[ 1 ] )
+    mpKeywordTable( new NfKeywordTable )
 {
     mxFormatter->FillKeywordTable( *mpKeywordTable, LANGUAGE_ENGLISH_US );
     // remap codes unknown to Excel
diff --git a/sc/source/filter/inc/xestyle.hxx b/sc/source/filter/inc/xestyle.hxx
index 42a7c1b..ba7dc67 100644
--- a/sc/source/filter/inc/xestyle.hxx
+++ b/sc/source/filter/inc/xestyle.hxx
@@ -322,7 +322,7 @@ private:
 
     SvNumberFormatterPtr mxFormatter;   /// Special number formatter for conversion.
     XclExpNumFmtVec     maFormatMap;    /// Maps core formats to Excel indexes.
-    NfKeywordTable*     mpKeywordTable; /// Replacement table.
+    boost::scoped_ptr<NfKeywordTable>   mpKeywordTable; /// Replacement table.
     sal_uLong           mnStdFmt;       /// Key for standard number format.
     sal_uInt16          mnXclOffset;    /// Offset to first user defined format.
 };
@@ -751,6 +751,7 @@ class XclExpDxfs : public XclExpRecordBase, protected XclExpRoot
 {
 public:
     XclExpDxfs( const XclExpRoot& rRoot );
+    virtual ~XclExpDxfs() {}
 
     sal_Int32 GetDxfId(const rtl::OUString& rName);
 
commit 0019c67a587a6c780fe5ae10cedf51cd1914f811
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date:   Sat Apr 21 02:53:55 2012 +0200

    simplify dxfs/dxf export

diff --git a/sc/source/filter/excel/xestyle.cxx b/sc/source/filter/excel/xestyle.cxx
index 0e7c1cf..ce902cd 100644
--- a/sc/source/filter/excel/xestyle.cxx
+++ b/sc/source/filter/excel/xestyle.cxx
@@ -2916,7 +2916,7 @@ XclExpDxfs::XclExpDxfs( const XclExpRoot& rRoot )
                     {
                         sal_uLong nScNumFmt = static_cast< sal_uInt32 >( static_cast< const SfxInt32Item* >(pPoolItem)->GetValue());
                         sal_uInt16 nXclNumFmt = static_cast< sal_uInt16 >( EXC_FORMAT_OFFSET8 + nIndex );
-                        pNumFormat = new XclExpNumFmt( nScNumFmt, nXclNumFmt, GetNumberFormatCode( *this, nScNumFmt, mxFormatter.get(), mpKeywordTable ));
+                        pNumFormat = new XclExpNumFmt( nScNumFmt, nXclNumFmt, GetNumberFormatCode( *this, nScNumFmt, mxFormatter.get(), mpKeywordTable.get() ));
                         ++nNumFmtIndex;
                     }
 
@@ -2939,6 +2939,9 @@ sal_Int32 XclExpDxfs::GetDxfId( const rtl::OUString& rStyleName )
 
 void XclExpDxfs::SaveXml( XclExpXmlStream& rStrm )
 {
+    if(maDxf.empty())
+        return;
+
     sax_fastparser::FSHelperPtr& rStyleSheet = rStrm.GetCurrentStream();
     rStyleSheet->startElement( XML_dxfs,
             XML_count, rtl::OString::valueOf( static_cast<sal_Int32>(maDxf.size())).getStr(),
@@ -3000,16 +3003,8 @@ void XclExpDxf::SaveXml( XclExpXmlStream& rStrm )
 // ============================================================================
 
 XclExpXmlStyleSheet::XclExpXmlStyleSheet( const XclExpRoot& rRoot )
-    : XclExpRoot( rRoot ),
-    mbDxfs(false)
+    : XclExpRoot( rRoot )
 {
-    if ( ScConditionalFormatList* pList = rRoot.GetDoc().GetCondFormList() )
-    {
-        if ( pList->Count() )
-        {
-            mbDxfs = true;
-        }
-    }
 }
 
 void XclExpXmlStyleSheet::SaveXml( XclExpXmlStream& rStrm )
@@ -3030,10 +3025,7 @@ void XclExpXmlStyleSheet::SaveXml( XclExpXmlStream& rStrm )
     CreateRecord( EXC_ID_FONTLIST )->SaveXml( rStrm );
     CreateRecord( EXC_ID_XFLIST )->SaveXml( rStrm );
     CreateRecord( EXC_ID_PALETTE )->SaveXml( rStrm );
-    if(mbDxfs)
-    {
-        CreateRecord( EXC_ID_DXFS )->SaveXml( rStrm );
-    }
+    CreateRecord( EXC_ID_DXFS )->SaveXml( rStrm );
 
     aStyleSheet->endElement( XML_styleSheet );
 
diff --git a/sc/source/filter/inc/xestyle.hxx b/sc/source/filter/inc/xestyle.hxx
index 345d31c..42a7c1b 100644
--- a/sc/source/filter/inc/xestyle.hxx
+++ b/sc/source/filter/inc/xestyle.hxx
@@ -40,6 +40,7 @@
 #include "xeroot.hxx"
 #include "conditio.hxx"
 #include <boost/shared_ptr.hpp>
+#include <boost/scoped_ptr.hpp>
 #include <boost/ptr_container/ptr_vector.hpp>
 
 /* ============================================================================
@@ -759,7 +760,7 @@ private:
     std::map<rtl::OUString, sal_Int32> maStyleNameToDxfId;
     DxfContainer maDxf;
     SvNumberFormatterPtr mxFormatter;   /// Special number formatter for conversion.
-    NfKeywordTable*     mpKeywordTable; /// Replacement table.
+    boost::scoped_ptr<NfKeywordTable>   mpKeywordTable; /// Replacement table.
 };
 
 // ============================================================================
@@ -770,8 +771,6 @@ public:
     explicit            XclExpXmlStyleSheet( const XclExpRoot& rRoot );
 
     virtual void        SaveXml( XclExpXmlStream& rStrm );
-private:
-    bool mbDxfs;
 };
 
 // ============================================================================
commit 6df9865612873b8c01bf789d6c0ac884a17f38ee
Author: Markus Mohrhard <markus.mohrhard at googlemail.com>
Date:   Sat Apr 21 02:44:14 2012 +0200

    first version of number format export into dxf

diff --git a/sc/source/filter/excel/xestyle.cxx b/sc/source/filter/excel/xestyle.cxx
index c73a08b..0e7c1cf 100644
--- a/sc/source/filter/excel/xestyle.cxx
+++ b/sc/source/filter/excel/xestyle.cxx
@@ -1217,12 +1217,12 @@ struct XclExpNumFmtPred
 
 // ----------------------------------------------------------------------------
 
-void XclExpNumFmt::SaveXml( XclExpXmlStream& rStrm, const String& rFormatCode )
+void XclExpNumFmt::SaveXml( XclExpXmlStream& rStrm )
 {
     sax_fastparser::FSHelperPtr& rStyleSheet = rStrm.GetCurrentStream();
     rStyleSheet->singleElement( XML_numFmt,
             XML_numFmtId,   OString::valueOf( static_cast<sal_Int32>(mnXclNumFmt) ).getStr(),
-            XML_formatCode, XclXmlUtils::ToOString( rFormatCode ).getStr(),
+            XML_formatCode, rtl::OUStringToOString(maNumFmtString, RTL_TEXTENCODING_UTF8).getStr(),
             FSEND );
 }
 
@@ -1270,7 +1270,7 @@ sal_uInt16 XclExpNumFmtBuffer::Insert( sal_uLong nScNumFmt )
     if( nSize < static_cast< size_t >( 0xFFFF - mnXclOffset ) )
     {
         sal_uInt16 nXclNumFmt = static_cast< sal_uInt16 >( nSize + mnXclOffset );
-        maFormatMap.push_back( XclExpNumFmt( nScNumFmt, nXclNumFmt ) );
+        maFormatMap.push_back( XclExpNumFmt( nScNumFmt, nXclNumFmt, GetFormatCode( nScNumFmt ) ) );
         return nXclNumFmt;
     }
 
@@ -1294,7 +1294,7 @@ void XclExpNumFmtBuffer::SaveXml( XclExpXmlStream& rStrm )
             FSEND );
     for( XclExpNumFmtVec::iterator aIt = maFormatMap.begin(), aEnd = maFormatMap.end(); aIt != aEnd; ++aIt )
     {
-        aIt->SaveXml( rStrm, GetFormatCode( *aIt ) );
+        aIt->SaveXml( rStrm );
     }
     rStyleSheet->endElement( XML_numFmts );
 }
@@ -1314,14 +1314,16 @@ void XclExpNumFmtBuffer::WriteFormatRecord( XclExpStream& rStrm, sal_uInt16 nXcl
 
 void XclExpNumFmtBuffer::WriteFormatRecord( XclExpStream& rStrm, const XclExpNumFmt& rFormat )
 {
-    WriteFormatRecord( rStrm, rFormat.mnXclNumFmt, GetFormatCode( rFormat ) );
+    WriteFormatRecord( rStrm, rFormat.mnXclNumFmt, GetFormatCode( rFormat.mnScNumFmt ) );
 }
 
-String XclExpNumFmtBuffer::GetFormatCode( const XclExpNumFmt& rFormat )
+namespace {
+
+String GetNumberFormatCode(XclRoot& rRoot, const sal_uInt16 nScNumFmt, SvNumberFormatter* xFormatter, NfKeywordTable* pKeywordTable)
 {
     String aFormatStr;
 
-    if( const SvNumberformat* pEntry = GetFormatter().GetEntry( rFormat.mnScNumFmt ) )
+    if( const SvNumberformat* pEntry = rRoot.GetFormatter().GetEntry( nScNumFmt ) )
     {
         if( pEntry->GetType() == NUMBERFORMAT_LOGICAL )
         {
@@ -1342,12 +1344,12 @@ String XclExpNumFmtBuffer::GetFormatCode( const XclExpNumFmt& rFormat )
                 short nType = NUMBERFORMAT_DEFINED;
                 sal_uInt32 nKey;
                 String aTemp( pEntry->GetFormatstring() );
-                mxFormatter->PutandConvertEntry( aTemp, nCheckPos, nType, nKey, eLang, LANGUAGE_ENGLISH_US );
+                xFormatter->PutandConvertEntry( aTemp, nCheckPos, nType, nKey, eLang, LANGUAGE_ENGLISH_US );
                 OSL_ENSURE( nCheckPos == 0, "XclExpNumFmtBuffer::WriteFormatRecord - format code not convertible" );
-                pEntry = mxFormatter->GetEntry( nKey );
+                pEntry = xFormatter->GetEntry( nKey );
             }
 
-            aFormatStr = pEntry->GetMappedFormatstring( *mpKeywordTable, *mxFormatter->GetLocaleData() );
+            aFormatStr = pEntry->GetMappedFormatstring( *pKeywordTable, *xFormatter->GetLocaleData() );
             if( aFormatStr.EqualsAscii( "Standard" ) )
                 aFormatStr.AssignAscii( "General" );
         }
@@ -1361,6 +1363,13 @@ String XclExpNumFmtBuffer::GetFormatCode( const XclExpNumFmt& rFormat )
     return aFormatStr;
 }
 
+}
+
+String XclExpNumFmtBuffer::GetFormatCode( sal_uInt16 nScNumFmt )
+{
+    return GetNumberFormatCode( *this, nScNumFmt, mxFormatter.get(), mpKeywordTable );
+}
+
 // XF, STYLE record - Cell formatting =========================================
 
 bool XclExpCellProt::FillFromItemSet( const SfxItemSet& rItemSet, bool bStyle )
@@ -2829,8 +2838,20 @@ void XclExpXFBuffer::AddBorderAndFill( const XclExpXF& rXF )
 
 
 XclExpDxfs::XclExpDxfs( const XclExpRoot& rRoot )
-    : XclExpRoot( rRoot )
+    : XclExpRoot( rRoot ),
+    mxFormatter( new SvNumberFormatter( rRoot.GetDoc().GetServiceManager(), LANGUAGE_ENGLISH_US ) ),
+    mpKeywordTable( new NfKeywordTable[ 1 ] )
 {
+    mxFormatter->FillKeywordTable( *mpKeywordTable, LANGUAGE_ENGLISH_US );
+    // remap codes unknown to Excel
+    (*mpKeywordTable)[ NF_KEY_NN ] = String( RTL_CONSTASCII_USTRINGPARAM( "DDD" ) );
+    (*mpKeywordTable)[ NF_KEY_NNN ] = String( RTL_CONSTASCII_USTRINGPARAM( "DDDD" ) );
+    // NNNN gets a separator appended in SvNumberformat::GetMappedFormatString()
+    (*mpKeywordTable)[ NF_KEY_NNNN ] = String( RTL_CONSTASCII_USTRINGPARAM( "DDDD" ) );
+    // Export the Thai T NatNum modifier.
+    (*mpKeywordTable)[ NF_KEY_THAI_T ] = String( RTL_CONSTASCII_USTRINGPARAM( "T" ) );
+    sal_Int32 nNumFmtIndex = 0;
+
     ScConditionalFormatList* pList = rRoot.GetDoc().GetCondFormList();
     if (pList)
     {
@@ -2889,7 +2910,17 @@ XclExpDxfs::XclExpDxfs( const XclExpRoot& rRoot )
                         pFont = new XclExpFont( GetRoot(), XclFontData( aFont ), EXC_COLOR_CELLTEXT );
                     }
 
-                    maDxf.push_back(new XclExpDxf( rRoot, pAlign, pBorder, pFont, NULL, pCellProt, pCellArea ));
+                    XclExpNumFmt* pNumFormat = NULL;
+                    const SfxPoolItem *pPoolItem = NULL;
+                    if( rSet.GetItemState( SID_ATTR_NUMBERFORMAT_VALUE, sal_True, &pPoolItem ) == SFX_ITEM_SET )
+                    {
+                        sal_uLong nScNumFmt = static_cast< sal_uInt32 >( static_cast< const SfxInt32Item* >(pPoolItem)->GetValue());
+                        sal_uInt16 nXclNumFmt = static_cast< sal_uInt16 >( EXC_FORMAT_OFFSET8 + nIndex );
+                        pNumFormat = new XclExpNumFmt( nScNumFmt, nXclNumFmt, GetNumberFormatCode( *this, nScNumFmt, mxFormatter.get(), mpKeywordTable ));
+                        ++nNumFmtIndex;
+                    }
+
+                    maDxf.push_back(new XclExpDxf( rRoot, pAlign, pBorder, pFont, pNumFormat, pCellProt, pCellArea ));
                     ++nIndex;
                 }
 
@@ -2958,7 +2989,7 @@ void XclExpDxf::SaveXml( XclExpXmlStream& rStrm )
     if (mpFont)
         mpFont->SaveXml(rStrm);
     if (mpNumberFmt)
-        mpNumberFmt->SaveXml(rStrm, String());
+        mpNumberFmt->SaveXml(rStrm);
     if (mpProt)
         mpProt->SaveXml(rStrm);
     if (mpCellArea)
diff --git a/sc/source/filter/inc/xestyle.hxx b/sc/source/filter/inc/xestyle.hxx
index 18975c4..345d31c 100644
--- a/sc/source/filter/inc/xestyle.hxx
+++ b/sc/source/filter/inc/xestyle.hxx
@@ -274,18 +274,20 @@ private:
 /** Stores a core number format index with corresponding Excel format index. */
 struct XclExpNumFmt
 {
-    sal_uLong               mnScNumFmt;     /// Core index of the number format.
+    sal_uLong           mnScNumFmt;     /// Core index of the number format.
     sal_uInt16          mnXclNumFmt;    /// Resulting Excel format index.
+    rtl::OUString       maNumFmtString; /// format string
 
-    inline explicit     XclExpNumFmt( sal_uLong nScNumFmt, sal_uInt16 nXclNumFmt ) :
-                            mnScNumFmt( nScNumFmt ), mnXclNumFmt( nXclNumFmt ) {}
+    inline explicit     XclExpNumFmt( sal_uLong nScNumFmt, sal_uInt16 nXclNumFmt, const rtl::OUString& rFrmt ) :
+                            mnScNumFmt( nScNumFmt ), mnXclNumFmt( nXclNumFmt ), maNumFmtString( rFrmt ) {}
 
-    void SaveXml( XclExpXmlStream& rStrm, const String& rFormatCode );
+    void SaveXml( XclExpXmlStream& rStrm );
 };
 
 // ----------------------------------------------------------------------------
 
 class SvNumberFormatter;
+typedef ::std::auto_ptr< SvNumberFormatter >    SvNumberFormatterPtr;
 
 /** Stores all number formats used in the document. */
 class XclExpNumFmtBuffer : public XclExpRecordBase, protected XclExpRoot
@@ -295,7 +297,7 @@ public:
     virtual             ~XclExpNumFmtBuffer();
 
     /** Returns the core index of the current standard number format. */
-    inline sal_uLong        GetStandardFormat() const { return mnStdFmt; }
+    inline sal_uLong    GetStandardFormat() const { return mnStdFmt; }
 
     /** Inserts a number format into the format buffer.
         @param nScNumFmt  The core index of the number format.
@@ -312,16 +314,15 @@ private:
     /** Writes the FORMAT record represented by rFormat. */
     void                WriteFormatRecord( XclExpStream& rStrm, const XclExpNumFmt& rFormat );
 
-    String              GetFormatCode ( const XclExpNumFmt& rFormat );
+    String              GetFormatCode ( sal_uInt16 nScNumFmt );
 
 private:
-    typedef ::std::auto_ptr< SvNumberFormatter >    SvNumberFormatterPtr;
     typedef ::std::vector< XclExpNumFmt >           XclExpNumFmtVec;
 
     SvNumberFormatterPtr mxFormatter;   /// Special number formatter for conversion.
     XclExpNumFmtVec     maFormatMap;    /// Maps core formats to Excel indexes.
     NfKeywordTable*     mpKeywordTable; /// Replacement table.
-    sal_uLong               mnStdFmt;       /// Key for standard number format.
+    sal_uLong           mnStdFmt;       /// Key for standard number format.
     sal_uInt16          mnXclOffset;    /// Offset to first user defined format.
 };
 
@@ -757,6 +758,8 @@ private:
     typedef boost::ptr_vector<XclExpDxf> DxfContainer;
     std::map<rtl::OUString, sal_Int32> maStyleNameToDxfId;
     DxfContainer maDxf;
+    SvNumberFormatterPtr mxFormatter;   /// Special number formatter for conversion.
+    NfKeywordTable*     mpKeywordTable; /// Replacement table.
 };
 
 // ============================================================================


More information about the Libreoffice-commits mailing list