[Libreoffice-commits] core.git: sc/inc sc/source
Jochen Nitschke
j.nitschke+logerrit at ok.de
Tue Jul 19 05:39:32 UTC 2016
sc/inc/filter.hxx | 17 --
sc/source/filter/dif/difimp.cxx | 304 +++-------------------------------------
sc/source/filter/inc/dif.hxx | 29 ---
sc/source/filter/inc/ftools.hxx | 2
sc/source/ui/docshell/impex.cxx | 2
5 files changed, 29 insertions(+), 325 deletions(-)
New commits:
commit a7b5be118191a4e8a6cd422b5b2438a1ac22f36f
Author: Jochen Nitschke <j.nitschke+logerrit at ok.de>
Date: Mon Jul 18 09:45:30 2016 +0200
sc dif import: plain number formatter is unused
commit 2cb7d3c13cc55d8ee680fe19d99819529d8b9ba5
revealed DifOptions is always set to DifOptions::Excel,
so DifParser.bPlain is never true.
remove import with plain number formatter and DifOptions enum
Change-Id: I8e214f3fff8ecfc7e03622dd1fe3fb53c2fb1e25
Reviewed-on: https://gerrit.libreoffice.org/27277
Tested-by: Jenkins <ci at libreoffice.org>
Reviewed-by: Noel Grandin <noelgrandin at gmail.com>
diff --git a/sc/inc/filter.hxx b/sc/inc/filter.hxx
index aaeb9f3..e51ee3a 100644
--- a/sc/inc/filter.hxx
+++ b/sc/inc/filter.hxx
@@ -20,7 +20,6 @@
#ifndef INCLUDED_SC_INC_FILTER_HXX
#define INCLUDED_SC_INC_FILTER_HXX
-#include <o3tl/typed_flags_set.hxx>
#include <rtl/textenc.h>
#include <rtl/ustring.hxx>
#include <tools/solar.h>
@@ -60,20 +59,6 @@ enum EXCIMPFORMAT { EIF_AUTO, EIF_BIFF5, EIF_BIFF8, EIF_BIFF_LE4 };
enum ExportFormatLotus { ExpWK1, ExpWK3, ExpWK4 };
enum ExportFormatExcel { ExpBiff2, ExpBiff3, ExpBiff4, ExpBiff4W, ExpBiff5, ExpBiff8, Exp2007Xml };
-// options for DIF im-/export (combine with '|')
-enum class DifOptions
-{
- Plain = 0x00000000,
- Date = 0x00000001,
- Time = 0x00000002,
- Currency = 0x00000004,
-
- Excel = (Date|Time|Currency)
-};
-namespace o3tl {
- template<> struct typed_flags<DifOptions> : is_typed_flags<DifOptions, 0x00000007> {};
-}
-
// These are implemented inside the scfilt library and lazy loaded
class ScEEAbsImport {
@@ -98,7 +83,7 @@ class SAL_DLLPUBLIC_RTTI ScFormatFilterPlugin {
// eFormat == EIF_BIFF_LE4 -> only non storage files _might_ be read successfully
virtual FltError ScImportStarCalc10( SvStream&, ScDocument* ) = 0;
virtual FltError ScImportDif( SvStream&, ScDocument*, const ScAddress& rInsPos,
- const rtl_TextEncoding eSrc = RTL_TEXTENCODING_DONTKNOW, DifOptions nDifOption = DifOptions::Excel ) = 0;
+ const rtl_TextEncoding eSrc = RTL_TEXTENCODING_DONTKNOW ) = 0;
virtual FltError ScImportRTF( SvStream&, const OUString& rBaseURL, ScDocument*, ScRange& rRange ) = 0;
virtual FltError ScImportHTML( SvStream&, const OUString& rBaseURL, ScDocument*, ScRange& rRange, double nOutputFactor = 1.0,
bool bCalcWidthHeight = true, SvNumberFormatter* pFormatter = nullptr, bool bConvertDate = true ) = 0;
diff --git a/sc/source/filter/dif/difimp.cxx b/sc/source/filter/dif/difimp.cxx
index 704bf66..5b5b936 100644
--- a/sc/source/filter/dif/difimp.cxx
+++ b/sc/source/filter/dif/difimp.cxx
@@ -48,11 +48,9 @@ const sal_Unicode pKeyV[] = { 'V', 0 };
const sal_Unicode pKey1_0[] = { '1', ',', '0', 0 };
FltError ScFormatFilterPluginImpl::ScImportDif(SvStream& rIn, ScDocument* pDoc, const ScAddress& rInsPos,
- const rtl_TextEncoding eVon, DifOptions nDifOption )
+ const rtl_TextEncoding eVon )
{
- DifParser aDifParser( rIn, nDifOption, *pDoc, eVon );
-
- const bool bPlain = aDifParser.IsPlain();
+ DifParser aDifParser( rIn, *pDoc, eVon );
SCTAB nBaseTab = rInsPos.Tab();
@@ -126,7 +124,7 @@ FltError ScFormatFilterPluginImpl::ScImportDif(SvStream& rIn, ScDocument* pDoc,
SCCOL nColCnt = SCCOL_MAX;
SCROW nRowCnt = rInsPos.Row();
- DifAttrCache aAttrCache( bPlain );
+ DifAttrCache aAttrCache;
DATASET eAkt = D_UNKNOWN;
@@ -160,18 +158,14 @@ FltError ScFormatFilterPluginImpl::ScImportDif(SvStream& rIn, ScDocument* pDoc,
if( DifParser::IsV( aData.getStr() ) )
{
pDoc->SetValue(aPos, aDifParser.fVal);
- if( !bPlain )
- aAttrCache.SetNumFormat( nColCnt, nRowCnt,
+ aAttrCache.SetNumFormat( nColCnt, nRowCnt,
aDifParser.nNumFormat );
}
else if( aData == pKeyTRUE || aData == pKeyFALSE )
{
pDoc->SetValue(aPos, aDifParser.fVal);
- if( bPlain )
- aAttrCache.SetLogical( nColCnt, nRowCnt );
- else
- aAttrCache.SetNumFormat( nColCnt, nRowCnt,
- aDifParser.nNumFormat );
+ aAttrCache.SetNumFormat( nColCnt, nRowCnt,
+ aDifParser.nNumFormat );
}
else if( aData == pKeyNA || aData == pKeyERROR )
{
@@ -230,12 +224,13 @@ FltError ScFormatFilterPluginImpl::ScImportDif(SvStream& rIn, ScDocument* pDoc,
return eERR_OK;
}
-DifParser::DifParser(SvStream& rNewIn, DifOptions nOption, ScDocument& rDoc, rtl_TextEncoding e )
+DifParser::DifParser( SvStream& rNewIn, ScDocument& rDoc, rtl_TextEncoding e )
: fVal(0.0)
, nVector(0)
, nVal(0)
, nNumFormat(0)
, eCharSet(e)
+ , pNumFormatter(rDoc.GetFormatTable())
, rIn(rNewIn)
{
if ( rIn.GetStreamCharSet() != eCharSet )
@@ -244,13 +239,6 @@ DifParser::DifParser(SvStream& rNewIn, DifOptions nOption, ScDocument& rDoc, rtl
rIn.SetStreamCharSet( eCharSet );
}
rIn.StartReadingUnicodeText( eCharSet );
-
- bPlain = ( nOption == DifOptions::Plain );
-
- if( bPlain )
- pNumFormatter = nullptr;
- else
- pNumFormatter = rDoc.GetFormatTable();
}
TOPIC DifParser::GetNextTopic()
@@ -410,28 +398,20 @@ static void lcl_DeEscapeQuotesDif( OUString& rString )
DATASET DifParser::GetNumberDataset( const sal_Unicode* pPossibleNumericData )
{
DATASET eRet = D_SYNT_ERROR;
- if( bPlain )
+
+ OSL_ENSURE( pNumFormatter, "-DifParser::GetNumberDataset(): No Formatter, more fun!" );
+ OUString aTestVal( pPossibleNumericData );
+ sal_uInt32 nFormat = 0;
+ double fTmpVal;
+ if( pNumFormatter->IsNumberFormat( aTestVal, nFormat, fTmpVal ) )
{
- if( ScanFloatVal( pPossibleNumericData ) )
- eRet = D_NUMERIC;
- else
- eRet = D_SYNT_ERROR;
+ fVal = fTmpVal;
+ nNumFormat = nFormat;
+ eRet = D_NUMERIC;
}
else
- { // ...and for punishment, with number formatting...
- OSL_ENSURE( pNumFormatter, "-DifParser::GetNextDataset(): No Formatter, more fun!" );
- OUString aTestVal( pPossibleNumericData );
- sal_uInt32 nFormat = 0;
- double fTmpVal;
- if( pNumFormatter->IsNumberFormat( aTestVal, nFormat, fTmpVal ) )
- {
- fVal = fTmpVal;
- nNumFormat = nFormat;
- eRet = D_NUMERIC;
- }
- else
- eRet = D_SYNT_ERROR;
- }
+ eRet = D_SYNT_ERROR;
+
return eRet;
}
@@ -629,214 +609,11 @@ const sal_Unicode* DifParser::ScanIntVal( const sal_Unicode* pStart, sal_uInt32&
return pStart;
}
-bool DifParser::ScanFloatVal( const sal_Unicode* pStart )
-{
- bool bNeg = false;
- double fFracPos = 1.0;
- sal_Int32 nExp = 0;
- bool bExpNeg = false;
- bool bExpOverflow = false;
- static const sal_uInt16 nExpLimit = 4096; // FIXME: has to be set more accurately!
-
- sal_Unicode cAkt;
- bool bRet = false;
-
- enum STATE { S_FIRST, S_PRE, S_POST, S_EXP_FIRST, S_EXP, S_END, S_FINDEND };
-
- STATE eS = S_FIRST;
-
- double fNewVal = 0.0;
-
- while( eS != S_END )
- {
- cAkt = *pStart;
- switch( eS )
- {
- case S_FIRST:
- if( IsNumber( cAkt ) )
- {
- fNewVal *= 10;
- fNewVal += cAkt - '0';
- eS = S_PRE;
- }
- else
- {
- switch( cAkt )
- {
- case ' ':
- case '\t':
- case '+':
- break;
- case '-':
- bNeg = !bNeg;
- break;
- case '.':
- case ',':
- eS = S_POST;
- fFracPos = 0.1;
- break;
- default:
- eS = S_END;
- }
- }
- break;
- case S_PRE:
- if( IsNumber( cAkt ) )
- {
- fNewVal *= 10;
- fNewVal += cAkt - '0';
- }
- else
- {
- switch( cAkt )
- {
- case '.':
- case ',':
- eS = S_POST;
- fFracPos = 0.1;
- break;
- case 'e':
- case 'E':
- eS = S_EXP;
- break;
- case 0x00: // IsNumberEnding( cAkt )
- bRet = true;
- SAL_FALLTHROUGH;
- default:
- eS = S_END;
- }
- }
- break;
- case S_POST:
- if( IsNumber( cAkt ) )
- {
- fNewVal += fFracPos * ( cAkt - '0' );
- fFracPos /= 10.0;
- }
- else
- {
- switch( cAkt )
- {
- case 'e':
- case 'E':
- eS = S_EXP_FIRST;
- break;
- case 0x00: // IsNumberEnding( cAkt )
- bRet = true;
- SAL_FALLTHROUGH;
- default:
- eS = S_END;
- }
- }
- break;
- case S_EXP_FIRST:
- if( IsNumber( cAkt ) )
- {
- if( nExp < nExpLimit )
- {
- nExp *= 10;
- nExp += ( sal_uInt16 ) ( cAkt - '0' );
- }
- eS = S_EXP;
- }
- else
- {
- switch( cAkt )
- {
- case '+':
- break;
- case '-':
- bExpNeg = !bExpNeg;
- break;
- default:
- eS = S_END;
- }
- }
- break;
- case S_EXP:
- if( IsNumber( cAkt ) )
- {
- if( nExp < ( 0xFFFF / 10 ) )
- {
- nExp *= 10;
- nExp += ( sal_uInt16 ) ( cAkt - '0' );
- }
- else
- {
- bExpOverflow = true;
- eS = S_FINDEND;
- }
- }
- else
- {
- bRet = IsNumberEnding( cAkt );
- eS = S_END;
- }
- break;
- case S_FINDEND:
- if( IsNumberEnding( cAkt ) )
- {
- bRet = true; // to continue parsing
- eS = S_END;
- }
- break;
- // coverity[dead_error_begin] - following conditions exist to avoid compiler warning
- case S_END:
- OSL_FAIL( "DifParser::ScanFloatVal - unexpected state" );
- break;
- default:
- OSL_FAIL( "DifParser::ScanFloatVal - missing enum" );
- }
- pStart++;
- }
-
- if( bRet )
- {
- if( bExpOverflow )
- return false; // FIXME: add special cases here
-
- if( bNeg )
- fNewVal *= 1.0;
-
- if( bExpNeg )
- nExp *= -1;
-
- if( nExp != 0 )
- fNewVal *= pow( 10.0, ( double ) nExp );
- fVal = fNewVal;
- }
-
- return bRet;
-}
-
DifColumn::DifColumn ()
: mpAkt(nullptr)
{
}
-void DifColumn::SetLogical( SCROW nRow )
-{
- OSL_ENSURE( ValidRow(nRow), "*DifColumn::SetLogical(): Row too big!" );
-
- if( mpAkt )
- {
- OSL_ENSURE( nRow > 0, "*DifColumn::SetLogical(): more cannot be zero!" );
-
- nRow--;
-
- if( mpAkt->nEnd == nRow )
- mpAkt->nEnd++;
- else
- mpAkt = nullptr;
- }
- else
- {
- maEntries.push_back(ENTRY());
- mpAkt = &maEntries.back();
- mpAkt->nStart = mpAkt->nEnd = nRow;
- }
-}
-
void DifColumn::SetNumFormat( SCROW nRow, const sal_uInt32 nNumFormat )
{
OSL_ENSURE( ValidRow(nRow), "*DifColumn::SetNumFormat(): Row too big!" );
@@ -895,9 +672,8 @@ void DifColumn::Apply( ScDocument& rDoc, const SCCOL nCol, const SCTAB nTab )
}
}
-DifAttrCache::DifAttrCache( const bool bNewPlain )
+DifAttrCache::DifAttrCache()
{
- bPlain = bNewPlain;
ppCols = new DifColumn *[ MAXCOL + 1 ];
for( SCCOL nCnt = 0 ; nCnt <= MAXCOL ; nCnt++ )
ppCols[ nCnt ] = nullptr;
@@ -914,21 +690,9 @@ DifAttrCache::~DifAttrCache()
delete[] ppCols;
}
-void DifAttrCache::SetLogical( const SCCOL nCol, const SCROW nRow )
-{
- OSL_ENSURE( ValidCol(nCol), "-DifAttrCache::SetLogical(): Col too big!" );
- OSL_ENSURE( bPlain, "*DifAttrCache::SetLogical(): has to be Plain!" );
-
- if( !ppCols[ nCol ] )
- ppCols[ nCol ] = new DifColumn;
-
- ppCols[ nCol ]->SetLogical( nRow );
-}
-
void DifAttrCache::SetNumFormat( const SCCOL nCol, const SCROW nRow, const sal_uInt32 nNumFormat )
{
OSL_ENSURE( ValidCol(nCol), "-DifAttrCache::SetNumFormat(): Col too big!" );
- OSL_ENSURE( !bPlain, "*DifAttrCache::SetNumFormat(): should not be Plain!" );
if( !ppCols[ nCol ] )
ppCols[ nCol ] = new DifColumn;
@@ -938,32 +702,10 @@ void DifAttrCache::SetNumFormat( const SCCOL nCol, const SCROW nRow, const sal_u
void DifAttrCache::Apply( ScDocument& rDoc, SCTAB nTab )
{
- if( bPlain )
- {
- std::unique_ptr<ScPatternAttr> pPatt;
-
- for( SCCOL nCol = 0 ; nCol <= MAXCOL ; nCol++ )
- {
- if( ppCols[ nCol ] )
- {
- if( !pPatt )
- {
- pPatt.reset(new ScPatternAttr( rDoc.GetPool() ));
- pPatt->GetItemSet().Put( SfxUInt32Item( ATTR_VALUE_FORMAT,
- rDoc.GetFormatTable()->GetStandardFormat( css::util::NumberFormat::LOGICAL ) ) );
- }
-
- ppCols[ nCol ]->Apply( rDoc, nCol, nTab, *pPatt );
- }
- }
- }
- else
+ for( SCCOL nCol = 0 ; nCol <= MAXCOL ; nCol++ )
{
- for( SCCOL nCol = 0 ; nCol <= MAXCOL ; nCol++ )
- {
- if( ppCols[ nCol ] )
- ppCols[ nCol ]->Apply( rDoc, nCol, nTab );
- }
+ if( ppCols[ nCol ] )
+ ppCols[ nCol ]->Apply( rDoc, nCol, nTab );
}
}
diff --git a/sc/source/filter/inc/dif.hxx b/sc/source/filter/inc/dif.hxx
index 9892408..56d2e7d 100644
--- a/sc/source/filter/inc/dif.hxx
+++ b/sc/source/filter/inc/dif.hxx
@@ -55,10 +55,6 @@ enum TOPIC
enum DATASET { D_BOT, D_EOD, D_NUMERIC, D_STRING, D_UNKNOWN, D_SYNT_ERROR };
-class DifAttrCache;
-class ScPatternAttr;
-enum class DifOptions;
-
class DifParser
{
public:
@@ -71,7 +67,6 @@ public:
private:
SvNumberFormatter* pNumFormatter;
SvStream& rIn;
- bool bPlain;
OUString aLookAheadLine;
bool ReadNextLine( OUString& rStr );
@@ -81,21 +76,17 @@ private:
static inline bool IsEOD( const sal_Unicode* pRef );
static inline bool Is1_0( const sal_Unicode* pRef );
public:
- DifParser( SvStream&, DifOptions nOption, ScDocument&, rtl_TextEncoding );
+ DifParser( SvStream&, ScDocument&, rtl_TextEncoding );
TOPIC GetNextTopic();
DATASET GetNextDataset();
static const sal_Unicode* ScanIntVal( const sal_Unicode* pStart, sal_uInt32& rRet );
- bool ScanFloatVal( const sal_Unicode* pStart );
static inline bool IsNumber( const sal_Unicode cChar );
- static inline bool IsNumberEnding( const sal_Unicode cChar );
static inline bool IsV( const sal_Unicode* pRef );
-
- inline bool IsPlain() const;
};
inline bool DifParser::IsBOT( const sal_Unicode* pRef )
@@ -133,16 +124,7 @@ inline bool DifParser::IsNumber( const sal_Unicode cChar )
return ( cChar >= '0' && cChar <= '9' );
}
-inline bool DifParser::IsNumberEnding( const sal_Unicode cChar )
-{
- return ( cChar == 0x00 );
-}
-
-inline bool DifParser::IsPlain() const
-{
- return bPlain;
-}
-
+class DifAttrCache;
class DifColumn
{
friend class DifAttrCache;
@@ -159,8 +141,6 @@ class DifColumn
DifColumn();
- void SetLogical( SCROW nRow );
-
void SetNumFormat( SCROW nRow, const sal_uInt32 nNumFormat );
void NewEntry( const SCROW nPos, const sal_uInt32 nNumFormat );
@@ -174,12 +154,10 @@ class DifAttrCache
{
public:
- DifAttrCache( const bool bPlain );
+ DifAttrCache();
~DifAttrCache();
- void SetLogical( const SCCOL nCol, const SCROW nRow );
-
void SetNumFormat( const SCCOL nCol, const SCROW nRow, const sal_uInt32 nNumFormat );
void Apply( ScDocument&, SCTAB nTab );
@@ -187,7 +165,6 @@ public:
private:
DifColumn** ppCols;
- bool bPlain;
};
#endif
diff --git a/sc/source/filter/inc/ftools.hxx b/sc/source/filter/inc/ftools.hxx
index 2f3d3d8..85ed6b1 100644
--- a/sc/source/filter/inc/ftools.hxx
+++ b/sc/source/filter/inc/ftools.hxx
@@ -276,7 +276,7 @@ public:
// eFormat == EIF_BIFF_LE4 -> nur Nicht-Storage-Dateien _koennen_ zum Erfolg fuehren
virtual FltError ScImportStarCalc10( SvStream&, ScDocument* ) override;
virtual FltError ScImportDif( SvStream&, ScDocument*, const ScAddress& rInsPos,
- const rtl_TextEncoding eSrc = RTL_TEXTENCODING_DONTKNOW, DifOptions nDifOption = DifOptions::Excel ) override;
+ const rtl_TextEncoding eSrc = RTL_TEXTENCODING_DONTKNOW ) override;
virtual FltError ScImportRTF( SvStream&, const OUString& rBaseURL, ScDocument*, ScRange& rRange ) override;
virtual FltError ScImportHTML( SvStream&, const OUString& rBaseURL, ScDocument*, ScRange& rRange,
double nOutputFactor = 1.0, bool bCalcWidthHeight = true,
diff --git a/sc/source/ui/docshell/impex.cxx b/sc/source/ui/docshell/impex.cxx
index a98ad1f..5abc8a8 100644
--- a/sc/source/ui/docshell/impex.cxx
+++ b/sc/source/ui/docshell/impex.cxx
@@ -2221,7 +2221,7 @@ class ScFormatFilterMissing : public ScFormatFilterPlugin {
virtual FltError ScImportExcel( SfxMedium&, ScDocument*, const EXCIMPFORMAT ) override { return eERR_INTERN; }
virtual FltError ScImportStarCalc10( SvStream&, ScDocument* ) override { return eERR_INTERN; }
virtual FltError ScImportDif( SvStream&, ScDocument*, const ScAddress&,
- const rtl_TextEncoding, DifOptions ) override { return eERR_INTERN; }
+ const rtl_TextEncoding ) override { return eERR_INTERN; }
virtual FltError ScImportRTF( SvStream&, const OUString&, ScDocument*, ScRange& ) override { return eERR_INTERN; }
virtual FltError ScImportHTML( SvStream&, const OUString&, ScDocument*, ScRange&, double, bool, SvNumberFormatter*, bool ) override { return eERR_INTERN; }
More information about the Libreoffice-commits
mailing list