diff options
author | Stephan Bergmann <sbergman@redhat.com> | 2017-07-05 07:54:21 +0200 |
---|---|---|
committer | Stephan Bergmann <sbergman@redhat.com> | 2017-07-05 09:26:00 +0200 |
commit | 0153c51bb8530a34d665932e52ffd47064376c83 (patch) | |
tree | a03ed674120004315fea4bd5ad05b18d6311f806 | |
parent | 96dec6af8fbc7f46f2032a227c47370256b7d5a9 (diff) |
Revert "With ScFormatFilterMissing gone we don't need ScFormatFilterPluginImpl"
This reverts commit cc0524a724d0a9b9516ce9eaf499d845165863f8, which broke
UBSan's -fsanitize=vptr, where Library_sc needs the RTTI typeinfo symbol for
ScFormatFilterPlugin, but that would now only be emitted in Library_scfilt,
together with the first non-pure, non-inline virtual function, and Library_sc
cannot link against Library_scfilt (which already links against Library_sc).
-rw-r--r-- | sc/inc/filter.hxx | 39 | ||||
-rw-r--r-- | sc/source/filter/dif/difexp.cxx | 4 | ||||
-rw-r--r-- | sc/source/filter/dif/difimp.cxx | 2 | ||||
-rw-r--r-- | sc/source/filter/excel/excel.cxx | 4 | ||||
-rw-r--r-- | sc/source/filter/ftools/ftools.cxx | 7 | ||||
-rw-r--r-- | sc/source/filter/html/htmlexp.cxx | 2 | ||||
-rw-r--r-- | sc/source/filter/html/htmlimp.cxx | 6 | ||||
-rw-r--r-- | sc/source/filter/inc/ftools.hxx | 36 | ||||
-rw-r--r-- | sc/source/filter/lotus/lotus.cxx | 2 | ||||
-rw-r--r-- | sc/source/filter/qpro/qpro.cxx | 2 | ||||
-rw-r--r-- | sc/source/filter/rtf/rtfexp.cxx | 2 | ||||
-rw-r--r-- | sc/source/filter/rtf/rtfimp.cxx | 4 | ||||
-rw-r--r-- | sc/source/filter/starcalc/scflt.cxx | 2 |
13 files changed, 74 insertions, 38 deletions
diff --git a/sc/inc/filter.hxx b/sc/inc/filter.hxx index efb83c2dcb7d..04a0f4206985 100644 --- a/sc/inc/filter.hxx +++ b/sc/inc/filter.hxx @@ -56,42 +56,39 @@ class ScEEAbsImport { }; class SAL_DLLPUBLIC_RTTI ScFormatFilterPlugin { - // The member functions must be virtual for now even though this class has no derived classes, - // because of how this thing works. public: - ScFormatFilterPlugin() {}; - // various import filters - virtual ErrCode ScImportLotus123( SfxMedium&, ScDocument*, rtl_TextEncoding eSrc ); - virtual ErrCode ScImportQuattroPro(SvStream* pStream, ScDocument *pDoc); - virtual ErrCode ScImportExcel( SfxMedium&, ScDocument*, const EXCIMPFORMAT ); + virtual ErrCode ScImportLotus123( SfxMedium&, ScDocument*, rtl_TextEncoding eSrc ) = 0; + virtual ErrCode ScImportQuattroPro(SvStream* pStream, ScDocument *pDoc) = 0; + virtual ErrCode ScImportExcel( SfxMedium&, ScDocument*, const EXCIMPFORMAT ) = 0; // eFormat == EIF_AUTO -> matching filter is used automatically // eFormat == EIF_BIFF5 -> only Biff5 stream is read successfully (in an Excel97 doc, too) // eFormat == EIF_BIFF8 -> only Biff8 stream is read successfully (only in Excel97 docs) // eFormat == EIF_BIFF_LE4 -> only non storage files _might_ be read successfully - virtual ErrCode ScImportStarCalc10( SvStream&, ScDocument* ); + virtual ErrCode ScImportStarCalc10( SvStream&, ScDocument* ) = 0; virtual ErrCode ScImportDif( SvStream&, ScDocument*, const ScAddress& rInsPos, - const rtl_TextEncoding eSrc ); - virtual ErrCode ScImportRTF( SvStream&, const OUString& rBaseURL, ScDocument*, ScRange& rRange ); + const rtl_TextEncoding eSrc ) = 0; + virtual ErrCode ScImportRTF( SvStream&, const OUString& rBaseURL, ScDocument*, ScRange& rRange ) = 0; virtual ErrCode ScImportHTML( SvStream&, const OUString& rBaseURL, ScDocument*, ScRange& rRange, double nOutputFactor, - bool bCalcWidthHeight, SvNumberFormatter* pFormatter = nullptr, bool bConvertDate = true ); + bool bCalcWidthHeight, SvNumberFormatter* pFormatter = nullptr, bool bConvertDate = true ) = 0; // various import helpers - virtual ScEEAbsImport *CreateRTFImport( ScDocument* pDoc, const ScRange& rRange ); - virtual ScEEAbsImport *CreateHTMLImport( ScDocument* pDocP, const OUString& rBaseURL, const ScRange& rRange ); - virtual OUString GetHTMLRangeNameList( ScDocument* pDoc, const OUString& rOrigName ); + virtual ScEEAbsImport *CreateRTFImport( ScDocument* pDoc, const ScRange& rRange ) = 0; + virtual ScEEAbsImport *CreateHTMLImport( ScDocument* pDocP, const OUString& rBaseURL, const ScRange& rRange ) = 0; + virtual OUString GetHTMLRangeNameList( ScDocument* pDoc, const OUString& rOrigName ) = 0; // various export filters - virtual ErrCode ScExportExcel5( SfxMedium&, ScDocument*, ExportFormatExcel eFormat, rtl_TextEncoding eDest ); - virtual void ScExportDif( SvStream&, ScDocument*, const ScAddress& rOutPos, const rtl_TextEncoding eDest ); - virtual void ScExportDif( SvStream&, ScDocument*, const ScRange& rRange, const rtl_TextEncoding eDest ); + virtual ErrCode ScExportExcel5( SfxMedium&, ScDocument*, ExportFormatExcel eFormat, rtl_TextEncoding eDest ) = 0; + virtual void ScExportDif( SvStream&, ScDocument*, const ScAddress& rOutPos, const rtl_TextEncoding eDest ) = 0; + virtual void ScExportDif( SvStream&, ScDocument*, const ScRange& rRange, const rtl_TextEncoding eDest ) = 0; virtual void ScExportHTML( SvStream&, const OUString& rBaseURL, ScDocument*, const ScRange& rRange, const rtl_TextEncoding eDest, bool bAll, - const OUString& rStreamPath, OUString& rNonConvertibleChars, const OUString& rFilterOptions ); - virtual void ScExportRTF( SvStream&, ScDocument*, const ScRange& rRange, const rtl_TextEncoding eDest ); + const OUString& rStreamPath, OUString& rNonConvertibleChars, const OUString& rFilterOptions ) = 0; + virtual void ScExportRTF( SvStream&, ScDocument*, const ScRange& rRange, const rtl_TextEncoding eDest ) = 0; - virtual ScOrcusFilters* GetOrcusFilters(); + virtual ScOrcusFilters* GetOrcusFilters() = 0; - virtual ~ScFormatFilterPlugin() {} +protected: + ~ScFormatFilterPlugin() {} }; // scfilt plugin symbol diff --git a/sc/source/filter/dif/difexp.cxx b/sc/source/filter/dif/difexp.cxx index cb46e7342daa..4d0371285f0e 100644 --- a/sc/source/filter/dif/difexp.cxx +++ b/sc/source/filter/dif/difexp.cxx @@ -33,7 +33,7 @@ #include <osl/diagnose.h> #include <formula/errorcodes.hxx> -void ScFormatFilterPlugin::ScExportDif( SvStream& rStream, ScDocument* pDoc, +void ScFormatFilterPluginImpl::ScExportDif( SvStream& rStream, ScDocument* pDoc, const ScAddress& rOutPos, const rtl_TextEncoding eNach ) { SCCOL nEndCol; @@ -47,7 +47,7 @@ void ScFormatFilterPlugin::ScExportDif( SvStream& rStream, ScDocument* pDoc, ScExportDif( rStream, pDoc, ScRange( aStart, aEnd ), eNach ); } -void ScFormatFilterPlugin::ScExportDif( SvStream& rOut, ScDocument* pDoc, +void ScFormatFilterPluginImpl::ScExportDif( SvStream& rOut, ScDocument* pDoc, const ScRange&rRange, const rtl_TextEncoding eCharSet ) { OSL_ENSURE( rRange.aStart <= rRange.aEnd, "*ScExportDif(): Range not sorted!" ); diff --git a/sc/source/filter/dif/difimp.cxx b/sc/source/filter/dif/difimp.cxx index a46bbd821380..5df754cc6f94 100644 --- a/sc/source/filter/dif/difimp.cxx +++ b/sc/source/filter/dif/difimp.cxx @@ -47,7 +47,7 @@ const sal_Unicode pKeyNA[] = { 'N', 'A', 0 }; const sal_Unicode pKeyV[] = { 'V', 0 }; const sal_Unicode pKey1_0[] = { '1', ',', '0', 0 }; -ErrCode ScFormatFilterPlugin::ScImportDif(SvStream& rIn, ScDocument* pDoc, const ScAddress& rInsPos, +ErrCode ScFormatFilterPluginImpl::ScImportDif(SvStream& rIn, ScDocument* pDoc, const ScAddress& rInsPos, const rtl_TextEncoding eVon ) { DifParser aDifParser( rIn, *pDoc, eVon ); diff --git a/sc/source/filter/excel/excel.cxx b/sc/source/filter/excel/excel.cxx index 9451fd915fc0..b6087bf30715 100644 --- a/sc/source/filter/excel/excel.cxx +++ b/sc/source/filter/excel/excel.cxx @@ -45,7 +45,7 @@ #include <memory> -ErrCode ScFormatFilterPlugin::ScImportExcel( SfxMedium& rMedium, ScDocument* pDocument, const EXCIMPFORMAT eFormat ) +ErrCode ScFormatFilterPluginImpl::ScImportExcel( SfxMedium& rMedium, ScDocument* pDocument, const EXCIMPFORMAT eFormat ) { // check the passed Calc document OSL_ENSURE( pDocument, "::ScImportExcel - no document" ); @@ -197,7 +197,7 @@ static ErrCode lcl_ExportExcelBiff( SfxMedium& rMedium, ScDocument *pDocument, return eRet; } -ErrCode ScFormatFilterPlugin::ScExportExcel5( SfxMedium& rMedium, ScDocument *pDocument, +ErrCode ScFormatFilterPluginImpl::ScExportExcel5( SfxMedium& rMedium, ScDocument *pDocument, ExportFormatExcel eFormat, rtl_TextEncoding eNach ) { if( eFormat != ExpBiff5 && eFormat != ExpBiff8 ) diff --git a/sc/source/filter/ftools/ftools.cxx b/sc/source/filter/ftools/ftools.cxx index 691e0571d9cd..e3ebc5597730 100644 --- a/sc/source/filter/ftools/ftools.cxx +++ b/sc/source/filter/ftools/ftools.cxx @@ -349,7 +349,10 @@ bool ScfTools::GetHTMLNameFromName( const OUString& rSource, OUString& rName ) return !rName.isEmpty(); } -ScOrcusFilters* ScFormatFilterPlugin::GetOrcusFilters() +ScFormatFilterPluginImpl::ScFormatFilterPluginImpl() {} +ScFormatFilterPluginImpl::~ScFormatFilterPluginImpl() {} + +ScOrcusFilters* ScFormatFilterPluginImpl::GetOrcusFilters() { static ScOrcusFiltersImpl aImpl; return &aImpl; @@ -357,7 +360,7 @@ ScOrcusFilters* ScFormatFilterPlugin::GetOrcusFilters() ScFormatFilterPlugin * SAL_CALL ScFilterCreate() { - return new ScFormatFilterPlugin(); + return new ScFormatFilterPluginImpl(); } // implementation class inside the filters diff --git a/sc/source/filter/html/htmlexp.cxx b/sc/source/filter/html/htmlexp.cxx index ce68397aad54..676048806452 100644 --- a/sc/source/filter/html/htmlexp.cxx +++ b/sc/source/filter/html/htmlexp.cxx @@ -125,7 +125,7 @@ const sal_Char ScHTMLExport::sIndentSource[nIndentMax+1] = #define GLOBSTR(id) ScGlobal::GetRscString( id ) -void ScFormatFilterPlugin::ScExportHTML( SvStream& rStrm, const OUString& rBaseURL, ScDocument* pDoc, +void ScFormatFilterPluginImpl::ScExportHTML( SvStream& rStrm, const OUString& rBaseURL, ScDocument* pDoc, const ScRange& rRange, const rtl_TextEncoding /*eNach*/, bool bAll, const OUString& rStreamPath, OUString& rNonConvertibleChars, const OUString& rFilterOptions ) { diff --git a/sc/source/filter/html/htmlimp.cxx b/sc/source/filter/html/htmlimp.cxx index ff0b69c6f95c..5dc06c5a8054 100644 --- a/sc/source/filter/html/htmlimp.cxx +++ b/sc/source/filter/html/htmlimp.cxx @@ -42,7 +42,7 @@ #include "ftools.hxx" #include "tokenarray.hxx" -ErrCode ScFormatFilterPlugin::ScImportHTML( SvStream &rStream, const OUString& rBaseURL, ScDocument *pDoc, +ErrCode ScFormatFilterPluginImpl::ScImportHTML( SvStream &rStream, const OUString& rBaseURL, ScDocument *pDoc, ScRange& rRange, double nOutputFactor, bool bCalcWidthHeight, SvNumberFormatter* pFormatter, bool bConvertDate ) { @@ -54,7 +54,7 @@ ErrCode ScFormatFilterPlugin::ScImportHTML( SvStream &rStream, const OUString& r return nErr; } -ScEEAbsImport *ScFormatFilterPlugin::CreateHTMLImport( ScDocument* pDocP, const OUString& rBaseURL, const ScRange& rRange ) +ScEEAbsImport *ScFormatFilterPluginImpl::CreateHTMLImport( ScDocument* pDocP, const OUString& rBaseURL, const ScRange& rRange ) { return new ScHTMLImport( pDocP, rBaseURL, rRange, true/*bCalcWidthHeight*/ ); } @@ -191,7 +191,7 @@ void ScHTMLImport::WriteToDocument( } } -OUString ScFormatFilterPlugin::GetHTMLRangeNameList( ScDocument* pDoc, const OUString& rOrigName ) +OUString ScFormatFilterPluginImpl::GetHTMLRangeNameList( ScDocument* pDoc, const OUString& rOrigName ) { return ScHTMLImport::GetHTMLRangeNameList( pDoc, rOrigName ); } diff --git a/sc/source/filter/inc/ftools.hxx b/sc/source/filter/inc/ftools.hxx index c8b88271fe12..faf22680d450 100644 --- a/sc/source/filter/inc/ftools.hxx +++ b/sc/source/filter/inc/ftools.hxx @@ -257,6 +257,42 @@ typedef ::std::vector< sal_Int32 > ScfInt32Vec; typedef ::std::vector< sal_uInt32 > ScfUInt32Vec; typedef ::std::vector< OUString > ScfStringVec; +class ScFormatFilterPluginImpl : public ScFormatFilterPlugin +{ +public: + ScFormatFilterPluginImpl(); + virtual ~ScFormatFilterPluginImpl(); + // various import filters + virtual ErrCode ScImportLotus123( SfxMedium&, ScDocument*, rtl_TextEncoding eSrc ) override; + virtual ErrCode ScImportQuattroPro(SvStream* pStream, ScDocument *pDoc) override; + virtual ErrCode ScImportExcel( SfxMedium&, ScDocument*, const EXCIMPFORMAT ) override; + // eFormat == EIF_AUTO -> matching filter is used automatically + // eFormat == EIF_BIFF5 -> only Biff5 stream leads to success (even in an Excel97 doc) + // eFormat == EIF_BIFF8 -> only Biff8 stream leads to success (only in Excel97 docs) + // eFormat == EIF_BIFF_LE4 -> only non-storage files _could_ lead to success + virtual ErrCode ScImportStarCalc10( SvStream&, ScDocument* ) override; + virtual ErrCode ScImportDif( SvStream&, ScDocument*, const ScAddress& rInsPos, + const rtl_TextEncoding eSrc ) override; + virtual ErrCode ScImportRTF( SvStream&, const OUString& rBaseURL, ScDocument*, ScRange& rRange ) override; + virtual ErrCode ScImportHTML( SvStream&, const OUString& rBaseURL, ScDocument*, ScRange& rRange, + double nOutputFactor, bool bCalcWidthHeight, + SvNumberFormatter* pFormatter = nullptr, bool bConvertDate = true ) override; + + virtual ScEEAbsImport *CreateRTFImport( ScDocument* pDoc, const ScRange& rRange ) override; + virtual ScEEAbsImport *CreateHTMLImport( ScDocument* pDocP, const OUString& rBaseURL, const ScRange& rRange ) override; + virtual OUString GetHTMLRangeNameList( ScDocument* pDoc, const OUString& rOrigName ) override; + + // various export filters + virtual ErrCode ScExportExcel5( SfxMedium&, ScDocument*, ExportFormatExcel eFormat, rtl_TextEncoding eDest ) override; + virtual void ScExportDif( SvStream&, ScDocument*, const ScAddress& rOutPos, const rtl_TextEncoding eDest ) override; + virtual void ScExportDif( SvStream&, ScDocument*, const ScRange& rRange, const rtl_TextEncoding eDest ) override; + virtual void ScExportHTML( SvStream&, const OUString& rBaseURL, ScDocument*, const ScRange& rRange, const rtl_TextEncoding eDest, bool bAll, + const OUString& rStreamPath, OUString& rNonConvertibleChars, const OUString& rFilterOptions ) override; + virtual void ScExportRTF( SvStream&, ScDocument*, const ScRange& rRange, const rtl_TextEncoding eDest ) override; + + virtual ScOrcusFilters* GetOrcusFilters() override; +}; + #endif /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sc/source/filter/lotus/lotus.cxx b/sc/source/filter/lotus/lotus.cxx index 574eb9d8c86d..8a7c8493225b 100644 --- a/sc/source/filter/lotus/lotus.cxx +++ b/sc/source/filter/lotus/lotus.cxx @@ -28,7 +28,7 @@ #include "filtopt.hxx" #include "ftools.hxx" -ErrCode ScFormatFilterPlugin::ScImportLotus123( SfxMedium& rMedium, ScDocument* pDocument, rtl_TextEncoding eSrc ) +ErrCode ScFormatFilterPluginImpl::ScImportLotus123( SfxMedium& rMedium, ScDocument* pDocument, rtl_TextEncoding eSrc ) { ScFilterOptions aFilterOpt; bool bWithWK3 = aFilterOpt.GetWK3Flag(); diff --git a/sc/source/filter/qpro/qpro.cxx b/sc/source/filter/qpro/qpro.cxx index c2c119ce05f7..80107e1f6f32 100644 --- a/sc/source/filter/qpro/qpro.cxx +++ b/sc/source/filter/qpro/qpro.cxx @@ -123,7 +123,7 @@ ErrCode ScQProReader::readSheet( SCTAB nTab, ScDocument* pDoc, ScQProStyle *pSty return eRet; } -ErrCode ScFormatFilterPlugin::ScImportQuattroPro(SvStream *pStream, ScDocument *pDoc) +ErrCode ScFormatFilterPluginImpl::ScImportQuattroPro(SvStream *pStream, ScDocument *pDoc) { ScQProReader aReader(pStream); ErrCode eRet = aReader.import( pDoc ); diff --git a/sc/source/filter/rtf/rtfexp.cxx b/sc/source/filter/rtf/rtfexp.cxx index 055e577f18e9..44e8629f9110 100644 --- a/sc/source/filter/rtf/rtfexp.cxx +++ b/sc/source/filter/rtf/rtfexp.cxx @@ -42,7 +42,7 @@ #include "stlpool.hxx" #include "ftools.hxx" -void ScFormatFilterPlugin::ScExportRTF( SvStream& rStrm, ScDocument* pDoc, +void ScFormatFilterPluginImpl::ScExportRTF( SvStream& rStrm, ScDocument* pDoc, const ScRange& rRange, const rtl_TextEncoding /*eNach*/ ) { ScRTFExport aEx( rStrm, pDoc, rRange ); diff --git a/sc/source/filter/rtf/rtfimp.cxx b/sc/source/filter/rtf/rtfimp.cxx index ddadd1c12627..ecd86a537846 100644 --- a/sc/source/filter/rtf/rtfimp.cxx +++ b/sc/source/filter/rtf/rtfimp.cxx @@ -25,7 +25,7 @@ #include "rtfparse.hxx" #include "ftools.hxx" -ErrCode ScFormatFilterPlugin::ScImportRTF( SvStream &rStream, const OUString& rBaseURL, ScDocument *pDoc, ScRange& rRange ) +ErrCode ScFormatFilterPluginImpl::ScImportRTF( SvStream &rStream, const OUString& rBaseURL, ScDocument *pDoc, ScRange& rRange ) { ScRTFImport aImp( pDoc, rRange ); ErrCode nErr = aImp.Read( rStream, rBaseURL ); @@ -35,7 +35,7 @@ ErrCode ScFormatFilterPlugin::ScImportRTF( SvStream &rStream, const OUString& rB return nErr; } -ScEEAbsImport *ScFormatFilterPlugin::CreateRTFImport( ScDocument* pDoc, const ScRange& rRange ) +ScEEAbsImport *ScFormatFilterPluginImpl::CreateRTFImport( ScDocument* pDoc, const ScRange& rRange ) { return new ScRTFImport( pDoc, rRange ); } diff --git a/sc/source/filter/starcalc/scflt.cxx b/sc/source/filter/starcalc/scflt.cxx index fe2f22365371..5a190339f550 100644 --- a/sc/source/filter/starcalc/scflt.cxx +++ b/sc/source/filter/starcalc/scflt.cxx @@ -2400,7 +2400,7 @@ void Sc10Import::LoadObjects() } } -ErrCode ScFormatFilterPlugin::ScImportStarCalc10( SvStream& rStream, ScDocument* pDocument ) +ErrCode ScFormatFilterPluginImpl::ScImportStarCalc10( SvStream& rStream, ScDocument* pDocument ) { rStream.Seek( 0UL ); Sc10Import aImport( rStream, pDocument ); |