[Libreoffice-commits] core.git: sc/source

Jochen Nitschke j.nitschke+logerrit at ok.de
Tue Jul 19 05:53:41 UTC 2016


 sc/source/filter/excel/xeroot.cxx         |    4 -
 sc/source/filter/inc/formulabase.hxx      |    8 --
 sc/source/filter/inc/workbookhelper.hxx   |    8 --
 sc/source/filter/oox/formulabase.cxx      |  112 ++++++++++--------------------
 sc/source/filter/oox/ooxformulaparser.cxx |    2 
 5 files changed, 43 insertions(+), 91 deletions(-)

New commits:
commit 61fc9da45f845ae98d8e0f159bac6a4c2f39ddd7
Author: Jochen Nitschke <j.nitschke+logerrit at ok.de>
Date:   Fri Jul 15 14:08:12 2016 +0200

    sc: FilterType::FILTER_BIFF and FilterType::FILTER_UNKNOWN are never set
    
    only value ever set is FilterType::FILTER_OOXML.
    main user is FunctionProviderImpl ctor,
    thus used BiffType is always BIFF8, nMaxParam = OOX_MAX_PARAMCOUNT
    and bCallerKnowsAboutMacroExport is always true.
    so remove these parameters and the FilterType enum.
    
    a follow up should check uses of FUNCFLAG_BIFFEXPORTONLY and
    FUNCFLAG_BIFFIMPORTONLY as for such functions
    isSupported() returns always false
    
    Change-Id: I0d2941ba10642a86bad36d57b64a2c71517069ab
    Reviewed-on: https://gerrit.libreoffice.org/27237
    Tested-by: Jenkins <ci at libreoffice.org>
    Reviewed-by: Noel Grandin <noelgrandin at gmail.com>

diff --git a/sc/source/filter/excel/xeroot.cxx b/sc/source/filter/excel/xeroot.cxx
index 05d6fef..e51fa8a 100644
--- a/sc/source/filter/excel/xeroot.cxx
+++ b/sc/source/filter/excel/xeroot.cxx
@@ -240,9 +240,7 @@ void XclExpRoot::InitializeGlobals()
                 break;
             }
             uno::Reference< lang::XMultiServiceFactory > xModelFactory( xComponent, uno::UNO_QUERY);
-            // OOXML is also BIFF8 function-wise
-            oox::xls::OpCodeProvider aOpCodeProvider( xModelFactory,
-                    oox::xls::FILTER_OOXML, oox::xls::BIFF8, false);
+            oox::xls::OpCodeProvider aOpCodeProvider(xModelFactory, false);
             // Compiler mocks about non-matching ctor or conversion from
             // Sequence<...> to Sequence<const ...> if directly created or passed,
             // conversion through Any works around.
diff --git a/sc/source/filter/inc/formulabase.hxx b/sc/source/filter/inc/formulabase.hxx
index c88d4fb..a5b1e7c 100644
--- a/sc/source/filter/inc/formulabase.hxx
+++ b/sc/source/filter/inc/formulabase.hxx
@@ -554,8 +554,7 @@ struct FunctionProviderImpl;
 class FunctionProvider  // not derived from WorkbookHelper to make it usable in file dumpers
 {
 public:
-    explicit            FunctionProvider( FilterType eFilter, BiffType eBiff, bool bImportFilter,
-                                          bool bCallerKnowsAboutMacroExport );
+    explicit            FunctionProvider(bool bImportFilter);
     virtual             ~FunctionProvider();
 
     /** Returns the function info for an OOXML function name, or 0 on error. */
@@ -594,9 +593,8 @@ struct OpCodeProviderImpl;
 class OpCodeProvider : public FunctionProvider // not derived from WorkbookHelper to make it usable as UNO service
 {
 public:
-    explicit            OpCodeProvider(
-                            const css::uno::Reference< css::lang::XMultiServiceFactory >& rxModelFactory,
-                            FilterType eFilter, BiffType eBiff, bool bImportFilter );
+    explicit            OpCodeProvider(const css::uno::Reference<css::lang::XMultiServiceFactory>& rxModelFactory,
+                                       bool bImportFilter);
     virtual             ~OpCodeProvider();
 
     /** Returns the structure containing all token op-codes for operators and
diff --git a/sc/source/filter/inc/workbookhelper.hxx b/sc/source/filter/inc/workbookhelper.hxx
index 11b17fb..6ea3007 100644
--- a/sc/source/filter/inc/workbookhelper.hxx
+++ b/sc/source/filter/inc/workbookhelper.hxx
@@ -66,14 +66,6 @@ namespace xls {
 
 class ExcelFilter;
 
-/** An enumeration for all supported spreadsheet filter types. */
-enum FilterType
-{
-    FILTER_OOXML,       /// MS Excel OOXML (Office Open XML) or BIFF12.
-    FILTER_BIFF,        /// MS Excel BIFF2-BIFF8 (Binary Interchange File Format).
-    FILTER_UNKNOWN      /// Unknown filter type.
-};
-
 /** Functor for case-insensitive string comparison, usable in maps etc. */
 struct IgnoreCaseCompare
 {
diff --git a/sc/source/filter/oox/formulabase.cxx b/sc/source/filter/oox/formulabase.cxx
index 80c277c..6c5cabc 100644
--- a/sc/source/filter/oox/formulabase.cxx
+++ b/sc/source/filter/oox/formulabase.cxx
@@ -236,21 +236,19 @@ struct FunctionData
     FunctionParamInfo   mpParamInfos[ FUNCINFO_PARAMINFOCOUNT ]; /// Information about all parameters.
     sal_uInt16          mnFlags;            /// Additional flags.
 
-    inline bool         isSupported( bool bImportFilter, FilterType eFilter ) const;
+    inline bool         isSupported(bool bImportFilter) const;
 };
 
-inline bool FunctionData::isSupported( bool bImportFilter, FilterType eFilter ) const
+inline bool FunctionData::isSupported(bool bImportFilter) const
 {
-    /*  For import filters: the FUNCFLAG_EXPORTONLY and FUNCFLAG_BIFFEXPORTONLY flag must not be set.
-        For OOXML import:   the FUNCFLAG_BIFFIMPORTONLY flag must not be set.
-        For export filters: the FUNCFLAG_IMPORTONLY and FUNCFLAG_BIFFIMPORTONLY flag must not be set.
-        For OOXML export:   the FUNCFLAG_BIFFEXPORTONLY flag must not be set. */
-    bool bSupported = !getFlag( mnFlags, static_cast<sal_uInt16>(bImportFilter ?
-                (FUNCFLAG_EXPORTONLY | FUNCFLAG_BIFFEXPORTONLY) :
-                (FUNCFLAG_IMPORTONLY | FUNCFLAG_BIFFIMPORTONLY)));
-    if (bSupported && eFilter == FILTER_OOXML)
-        bSupported = !getFlag( mnFlags, bImportFilter ? FUNCFLAG_BIFFIMPORTONLY : FUNCFLAG_BIFFEXPORTONLY );
-    return bSupported;
+    /*  For import filters: the FUNCFLAG_EXPORTONLY, FUNCFLAG_BIFFEXPORTONLY
+                            and FUNCFLAG_BIFFIMPORTONLY flag must not be set.
+        For export filters: the FUNCFLAG_IMPORTONLY, FUNCFLAG_BIFFIMPORTONLY
+                            and FUNCFLAG_BIFFEXPORTONLY flag must not be set. */
+    if (bImportFilter)
+        return !(mnFlags & ( FUNCFLAG_EXPORTONLY | FUNCFLAG_BIFFEXPORTONLY | FUNCFLAG_BIFFIMPORTONLY));
+    else
+        return !(mnFlags & ( FUNCFLAG_IMPORTONLY | FUNCFLAG_BIFFIMPORTONLY | FUNCFLAG_BIFFEXPORTONLY));
 }
 
 const sal_uInt16 NOID = SAL_MAX_UINT16;     /// No BIFF function identifier available.
@@ -1027,67 +1025,35 @@ struct FunctionProviderImpl
     FuncIdMap           maBiffFuncs;        /// Maps BIFF2-BIFF8 function indexes to function data.
     FuncNameMap         maMacroFuncs;       /// Maps macro function names to function data.
 
-    explicit            FunctionProviderImpl( FilterType eFilter, BiffType eBiff, bool bImportFilter,
-                                              bool bCallerKnowsAboutMacroExport );
+    explicit            FunctionProviderImpl(bool bImportFilter);
 
 private:
     /** Creates and inserts a function info struct from the passed function data. */
-    void                initFunc( const FunctionData& rFuncData, sal_uInt8 nMaxParam );
+    void                initFunc(const FunctionData& rFuncData);
 
     /** Initializes the members from the passed function data list. */
-    void                initFuncs(
-                            const FunctionData* pBeg, const FunctionData* pEnd,
-                            sal_uInt8 nMaxParam, bool bImportFilter, FilterType eFilter );
+    void                initFuncs(const FunctionData* pBeg, const FunctionData* pEnd, bool bImportFilter);
 };
 
-FunctionProviderImpl::FunctionProviderImpl( FilterType eFilter, BiffType eBiff, bool bImportFilter,
-        bool bCallerKnowsAboutMacroExport )
-{
-    // NOTE: this warning is only applicable if called for not yet existing
-    // external export filter, not the Calc internal conversion from binary to
-    // OOXML that also uses this mapping. Which is the only reason for
-    // bCallerKnowsAboutMacroExport, to suppress this warning then.
-    OSL_ENSURE( bImportFilter || bCallerKnowsAboutMacroExport,
-            "FunctionProviderImpl::FunctionProviderImpl - need special handling for macro call functions" );
-    (void)bCallerKnowsAboutMacroExport;
-    sal_uInt8 nMaxParam = 0;
-    switch( eFilter )
-    {
-        case FILTER_OOXML:
-            nMaxParam = OOX_MAX_PARAMCOUNT;
-            eBiff = BIFF8;  // insert all BIFF function tables, then the OOXML table
-        break;
-        case FILTER_BIFF:
-            nMaxParam = BIFF_MAX_PARAMCOUNT;
-        break;
-        case FILTER_UNKNOWN:
-            OSL_FAIL( "FunctionProviderImpl::FunctionProviderImpl - invalid filter type" );
-        break;
-    }
-    OSL_ENSURE( eBiff != BIFF_UNKNOWN, "FunctionProviderImpl::FunctionProviderImpl - invalid BIFF type" );
-
+FunctionProviderImpl::FunctionProviderImpl( bool bImportFilter )
+{
     /*  Add functions supported in the current BIFF version only. Function
         tables from later BIFF versions may overwrite single functions from
         earlier tables. */
-    if( eBiff >= BIFF2 )
-        initFuncs( saFuncTableBiff2, ::std::end( saFuncTableBiff2 ), nMaxParam, bImportFilter, eFilter );
-    if( eBiff >= BIFF3 )
-        initFuncs( saFuncTableBiff3, ::std::end( saFuncTableBiff3 ), nMaxParam, bImportFilter, eFilter );
-    if( eBiff >= BIFF4 )
-        initFuncs( saFuncTableBiff4, ::std::end( saFuncTableBiff4 ), nMaxParam, bImportFilter, eFilter );
-    if( eBiff >= BIFF5 )
-        initFuncs( saFuncTableBiff5, ::std::end( saFuncTableBiff5 ), nMaxParam, bImportFilter, eFilter );
-    if( eBiff >= BIFF8 )
-        initFuncs( saFuncTableBiff8, ::std::end( saFuncTableBiff8 ), nMaxParam, bImportFilter, eFilter );
-    initFuncs( saFuncTableOox, ::std::end( saFuncTableOox ), nMaxParam, bImportFilter, eFilter );
-    initFuncs( saFuncTable2010, ::std::end( saFuncTable2010 ), nMaxParam, bImportFilter, eFilter );
-    initFuncs( saFuncTable2013, ::std::end( saFuncTable2013 ), nMaxParam, bImportFilter, eFilter );
-    initFuncs( saFuncTable2016, ::std::end( saFuncTable2016 ), nMaxParam, bImportFilter, eFilter );
-    initFuncs( saFuncTableOdf, ::std::end( saFuncTableOdf ), nMaxParam, bImportFilter, eFilter );
-    initFuncs( saFuncTableOOoLO, ::std::end( saFuncTableOOoLO ), nMaxParam, bImportFilter, eFilter );
-}
-
-void FunctionProviderImpl::initFunc( const FunctionData& rFuncData, sal_uInt8 nMaxParam )
+    initFuncs( saFuncTableBiff2, std::end( saFuncTableBiff2 ), bImportFilter );
+    initFuncs( saFuncTableBiff3, std::end( saFuncTableBiff3 ), bImportFilter );
+    initFuncs( saFuncTableBiff4, std::end( saFuncTableBiff4 ), bImportFilter );
+    initFuncs( saFuncTableBiff5, std::end( saFuncTableBiff5 ), bImportFilter );
+    initFuncs( saFuncTableBiff8, std::end( saFuncTableBiff8 ), bImportFilter );
+    initFuncs( saFuncTableOox,   std::end( saFuncTableOox   ), bImportFilter );
+    initFuncs( saFuncTable2010,  std::end( saFuncTable2010  ), bImportFilter );
+    initFuncs( saFuncTable2013,  std::end( saFuncTable2013  ), bImportFilter );
+    initFuncs( saFuncTable2016,  std::end( saFuncTable2016  ), bImportFilter );
+    initFuncs( saFuncTableOdf,   std::end( saFuncTableOdf   ), bImportFilter );
+    initFuncs( saFuncTableOOoLO, std::end( saFuncTableOOoLO ), bImportFilter );
+}
+
+void FunctionProviderImpl::initFunc(const FunctionData& rFuncData)
 {
     // create a function info object
     FunctionInfoRef xFuncInfo( new FunctionInfo );
@@ -1117,7 +1083,7 @@ void FunctionProviderImpl::initFunc( const FunctionData& rFuncData, sal_uInt8 nM
     xFuncInfo->mnBiff12FuncId = rFuncData.mnBiff12FuncId;
     xFuncInfo->mnBiffFuncId = rFuncData.mnBiffFuncId;
     xFuncInfo->mnMinParamCount = rFuncData.mnMinParamCount;
-    xFuncInfo->mnMaxParamCount = (rFuncData.mnMaxParamCount == MX) ? nMaxParam : rFuncData.mnMaxParamCount;
+    xFuncInfo->mnMaxParamCount = (rFuncData.mnMaxParamCount == MX) ? OOX_MAX_PARAMCOUNT : rFuncData.mnMaxParamCount;
     xFuncInfo->mnRetClass = rFuncData.mnRetClass;
     xFuncInfo->mpParamInfos = rFuncData.mpParamInfos;
     xFuncInfo->mbParamPairs = getFlag( rFuncData.mnFlags, FUNCFLAG_PARAMPAIRS );
@@ -1143,17 +1109,15 @@ void FunctionProviderImpl::initFunc( const FunctionData& rFuncData, sal_uInt8 nM
         maMacroFuncs[ xFuncInfo->maBiffMacroName ] = xFuncInfo;
 }
 
-void FunctionProviderImpl::initFuncs( const FunctionData* pBeg, const FunctionData* pEnd, sal_uInt8 nMaxParam,
-        bool bImportFilter, FilterType eFilter )
+void FunctionProviderImpl::initFuncs(const FunctionData* pBeg, const FunctionData* pEnd, bool bImportFilter)
 {
     for( const FunctionData* pIt = pBeg; pIt != pEnd; ++pIt )
-        if( pIt->isSupported( bImportFilter, eFilter ) )
-            initFunc( *pIt, nMaxParam );
+        if( pIt->isSupported(bImportFilter) )
+            initFunc(*pIt);
 }
 
-FunctionProvider::FunctionProvider( FilterType eFilter, BiffType eBiff, bool bImportFilter,
-        bool bCallerKnowsAboutMacroExport ) :
-    mxFuncImpl( new FunctionProviderImpl( eFilter, eBiff, bImportFilter, bCallerKnowsAboutMacroExport ) )
+FunctionProvider::FunctionProvider(  bool bImportFilter ) :
+    mxFuncImpl( new FunctionProviderImpl( bImportFilter ) )
 {
 }
 
@@ -1484,8 +1448,8 @@ bool OpCodeProviderImpl::initFuncOpCodes( const ApiTokenMap& rIntFuncTokenMap, c
 }
 
 OpCodeProvider::OpCodeProvider( const Reference< XMultiServiceFactory >& rxModelFactory,
-        FilterType eFilter, BiffType eBiff, bool bImportFilter ) :
-    FunctionProvider( eFilter, eBiff, bImportFilter, true/*bCallerKnowsAboutMacroExport*/ ),
+         bool bImportFilter ) :
+    FunctionProvider( bImportFilter ),
     mxOpCodeImpl( new OpCodeProviderImpl( getFuncs(), rxModelFactory ) )
 {
 }
@@ -1621,7 +1585,7 @@ TokenToRangeListState lclProcessClose( sal_Int32& ornParenLevel )
 } // namespace
 
 FormulaProcessorBase::FormulaProcessorBase( const WorkbookHelper& rHelper ) :
-    OpCodeProvider( rHelper.getBaseFilter().getModelFactory(), FILTER_OOXML, rHelper.getBiff(), rHelper.getBaseFilter().isImportFilter() ),
+    OpCodeProvider( rHelper.getBaseFilter().getModelFactory(), rHelper.getBaseFilter().isImportFilter() ),
     ApiOpCodes( getOpCodes() ),
     WorkbookHelper( rHelper )
 {
diff --git a/sc/source/filter/oox/ooxformulaparser.cxx b/sc/source/filter/oox/ooxformulaparser.cxx
index e298876..fc65fde 100644
--- a/sc/source/filter/oox/ooxformulaparser.cxx
+++ b/sc/source/filter/oox/ooxformulaparser.cxx
@@ -50,7 +50,7 @@ private:
 };
 
 OOXMLFormulaParserImpl::OOXMLFormulaParserImpl( const Reference< XMultiServiceFactory >& rxModelFactory ) :
-    FormulaFinalizer( OpCodeProvider( rxModelFactory, FILTER_OOXML, BIFF_UNKNOWN, true ) ),
+    FormulaFinalizer( OpCodeProvider( rxModelFactory, true ) ),
     maApiParser( rxModelFactory, *this )
 {
 }


More information about the Libreoffice-commits mailing list