blob: abd9e6d812832aba4fde868109847961b3d4d4e2 [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
#ifndef OOX_DUMP_XLSBDUMPER_HXX
#define OOX_DUMP_XLSBDUMPER_HXX
#include "oox/dump/dumperbase.hxx"
#if OOX_INCLUDE_DUMPER
namespace oox { namespace xls {
class FontPortionModelList;
class PhoneticPortionModelList;
struct FunctionInfo;
class FunctionProvider;
} }
namespace oox {
namespace dump {
namespace xlsb {
// ============================================================================
class RecordObjectBase : public SequenceRecordObjectBase
{
protected:
explicit RecordObjectBase();
virtual ~RecordObjectBase();
using SequenceRecordObjectBase::construct;
void construct( const ObjectBase& rParent, const BinaryInputStreamRef& rxStrm, const ::rtl::OUString& rSysFileName );
void construct( const RecordObjectBase& rParent );
virtual bool implReadRecordHeader( BinaryInputStream& rBaseStrm, sal_Int64& ornRecId, sal_Int64& ornRecSize );
::rtl::OUString getErrorName( sal_uInt8 nErrCode ) const;
// ------------------------------------------------------------------------
void readAddress( Address& orAddress );
void readRange( Range& orRange );
void readRangeList( RangeList& orRanges );
// ------------------------------------------------------------------------
void writeBooleanItem( const String& rName, sal_uInt8 nBool );
void writeErrorCodeItem( const String& rName, sal_uInt8 nErrCode );
void writeFontPortions( const ::oox::xls::FontPortionModelList& rPortions );
void writePhoneticPortions( const ::oox::xls::PhoneticPortionModelList& rPhonetics );
// ------------------------------------------------------------------------
sal_uInt8 dumpBoolean( const String& rName = EMPTY_STRING );
sal_uInt8 dumpErrorCode( const String& rName = EMPTY_STRING );
::rtl::OUString dumpString( const String& rName = EMPTY_STRING, bool bRich = false, bool b32BitLen = true );
void dumpColor( const String& rName = EMPTY_STRING );
::com::sun::star::util::DateTime dumpPivotDateTime( const String& rName = EMPTY_STRING );
sal_Int32 dumpColIndex( const String& rName = EMPTY_STRING );
sal_Int32 dumpRowIndex( const String& rName = EMPTY_STRING );
sal_Int32 dumpColRange( const String& rName = EMPTY_STRING );
sal_Int32 dumpRowRange( const String& rName = EMPTY_STRING );
Address dumpAddress( const String& rName = EMPTY_STRING );
Range dumpRange( const String& rName = EMPTY_STRING );
void dumpRangeList( const String& rName = EMPTY_STRING );
// ------------------------------------------------------------------------
private:
bool readCompressedInt( BinaryInputStream& rStrm, sal_Int32& ornValue );
private:
typedef ::boost::shared_ptr< SequenceInputStream > SequenceInputStreamRef;
SequenceInputStreamRef mxBiffStrm;
NameListRef mxErrCodes;
};
// ============================================================================
class FormulaObject : public RecordObjectBase
{
public:
explicit FormulaObject( const RecordObjectBase& rParent );
virtual ~FormulaObject();
void dumpCellFormula( const String& rName = EMPTY_STRING );
void dumpNameFormula( const String& rName = EMPTY_STRING );
protected:
virtual void implDump();
private:
void constructFmlaObj();
void dumpFormula( const String& rName, bool bNameMode );
TokenAddress createTokenAddress( sal_Int32 nCol, sal_Int32 nRow, bool bRelC, bool bRelR, bool bNameMode ) const;
::rtl::OUString createRef( const ::rtl::OUString& rData ) const;
::rtl::OUString createName( sal_Int32 nNameId ) const;
::rtl::OUString createPlaceHolder( size_t nIdx ) const;
::rtl::OUString createPlaceHolder() const;
::rtl::OUString writeFuncIdItem( sal_uInt16 nFuncId, const ::oox::xls::FunctionInfo** oppFuncInfo = 0 );
sal_Int32 dumpTokenCol( const String& rName, bool& rbRelC, bool& rbRelR );
sal_Int32 dumpTokenRow( const String& rName );
TokenAddress dumpTokenAddress( bool bNameMode );
TokenRange dumpTokenRange( bool bNameMode );
sal_Int16 readTokenRefId();
::rtl::OUString dumpTokenRefId();
void dumpIntToken();
void dumpDoubleToken();
void dumpStringToken();
void dumpBoolToken();
void dumpErrorToken();
void dumpMissArgToken();
void dumpArrayToken( const ::rtl::OUString& rTokClass );
void dumpNameToken( const ::rtl::OUString& rTokClass );
void dumpNameXToken( const ::rtl::OUString& rTokClass );
void dumpRefToken( const ::rtl::OUString& rTokClass, bool bNameMode );
void dumpAreaToken( const ::rtl::OUString& rTokClass, bool bNameMode );
void dumpRefErrToken( const ::rtl::OUString& rTokClass, bool bArea );
void dumpRef3dToken( const ::rtl::OUString& rTokClass, bool bNameMode );
void dumpArea3dToken( const ::rtl::OUString& rTokClass, bool bNameMode );
void dumpRefErr3dToken( const ::rtl::OUString& rTokClass, bool bArea );
void dumpMemFuncToken( const ::rtl::OUString& rTokClass );
void dumpMemAreaToken( const ::rtl::OUString& rTokClass, bool bAddData );
void dumpExpToken( const String& rName );
void dumpUnaryOpToken( const String& rLOp, const String& rROp );
void dumpBinaryOpToken( const String& rOp );
void dumpFuncToken( const ::rtl::OUString& rTokClass );
void dumpFuncVarToken( const ::rtl::OUString& rTokClass );
bool dumpTableToken();
bool dumpAttrToken();
void dumpAddTokenData();
void dumpAddDataExp( size_t nIdx );
void dumpAddDataArray( size_t nIdx );
void dumpAddDataMemArea( size_t nIdx );
void dumpaddDataArrayHeader( sal_Int32& rnCols, sal_Int32& rnRows );
::rtl::OUString dumpaddDataArrayValue();
private:
enum AddDataType { ADDDATA_EXP, ADDDATA_ARRAY, ADDDATA_MEMAREA };
typedef ::boost::shared_ptr< FormulaStack > FormulaStackRef;
typedef ::boost::shared_ptr< ::oox::xls::FunctionProvider > FuncProvRef;
typedef ::std::vector< AddDataType > AddDataTypeVec;
NameListRef mxTokens;
NameListRef mxClasses;
NameListRef mxRelFlags;
NameListRef mxAttrTypes;
NameListRef mxSpTypes;
sal_Int32 mnColCount;
sal_Int32 mnRowCount;
FormulaStackRef mxStack;
FuncProvRef mxFuncProv;
AddDataTypeVec maAddData;
::rtl::OUString maRefPrefix;
::rtl::OUString maName;
sal_Int32 mnSize;
bool mbNameMode;
};
// ============================================================================
class RecordStreamObject : public RecordObjectBase
{
public:
explicit RecordStreamObject( ObjectBase& rParent, const BinaryInputStreamRef& rxStrm, const ::rtl::OUString& rSysFileName );
protected:
virtual bool implIsValid() const;
virtual void implDumpRecordBody();
private:
void dumpGradientHead();
void dumpCellHeader( bool bWithColumn );
private:
typedef ::boost::shared_ptr< FormulaObject > FormulaObjectRef;
FormulaObjectRef mxFmlaObj;
};
// ============================================================================
class RootStorageObject : public StorageObjectBase
{
public:
explicit RootStorageObject( const DumperBase& rParent );
protected:
virtual void implDumpStream(
const ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream >& rxStrm,
const ::rtl::OUString& rStrgPath,
const ::rtl::OUString& rStrmName,
const ::rtl::OUString& rSysFileName );
};
// ============================================================================
class Dumper : public DumperBase
{
public:
explicit Dumper( const ::oox::core::FilterBase& rFilter );
explicit Dumper(
const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& rxContext,
const ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream >& rxInStrm,
const ::rtl::OUString& rSysFileName );
protected:
virtual void implDump();
};
// ============================================================================
} // namespace xlsb
} // namespace dump
} // namespace oox
#endif
#endif