xref: /aoo41x/main/oox/inc/oox/dump/biffdumper.hxx (revision cdf0e10c)
1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 
28 #ifndef OOX_DUMP_BIFFDUMPER_HXX
29 #define OOX_DUMP_BIFFDUMPER_HXX
30 
31 #include "oox/dump/dumperbase.hxx"
32 #include "oox/dump/dffdumper.hxx"
33 #include "oox/dump/oledumper.hxx"
34 #include "oox/xls/richstring.hxx"
35 #include "oox/xls/biffinputstream.hxx"
36 
37 #if OOX_INCLUDE_DUMPER
38 
39 namespace oox { namespace xls {
40     class BiffInputStream;
41     class FontPortionModelList;
42     struct FunctionInfo;
43     class FunctionProvider;
44 } }
45 
46 namespace oox {
47 namespace dump {
48 namespace biff {
49 
50 typedef ::boost::shared_ptr< ::oox::xls::BiffInputStream > BiffInputStreamRef;
51 
52 // ============================================================================
53 // ============================================================================
54 
55 class BiffDffStreamObject : public DffStreamObject
56 {
57 public:
58     explicit            BiffDffStreamObject(
59                             const OutputObjectBase& rParent,
60                             const BinaryInputStreamRef& rxStrm );
61 
62 protected:
63     virtual void        implDumpClientAnchor();
64 };
65 
66 // ============================================================================
67 
68 class BiffCtlsStreamObject : public InputObjectBase
69 {
70 public:
71     explicit            BiffCtlsStreamObject( const OutputObjectBase& rParent, const BinaryInputStreamRef& rxStrm );
72 
73     void                dumpControl( sal_uInt32 nStartPos, sal_uInt32 nLength );
74 
75 protected:
76     virtual void        implDump();
77 
78 private:
79     sal_uInt32          mnStartPos;
80     sal_uInt32          mnLength;
81 };
82 
83 // ============================================================================
84 // ============================================================================
85 
86 class BiffConfig : public Config
87 {
88 public:
89     explicit            BiffConfig( const Config& rParent, ::oox::xls::BiffType eBiff );
90 
91 protected:
92     virtual bool        implIsValid() const;
93     virtual NameListRef implGetNameList( const ::rtl::OUString& rKey ) const;
94 
95 private:
96     ::oox::xls::BiffType meBiff;
97 };
98 
99 // ============================================================================
100 
101 class BiffSharedData : public Base
102 {
103 public:
104     explicit            BiffSharedData( ::oox::xls::BiffType eBiff );
105 
106     void                initializePerSheet();
107 
108     inline ::oox::xls::BiffType getBiff() const { return meBiff; }
109 
110     inline rtl_TextEncoding getTextEncoding() const { return meTextEnc; }
111     void                setTextEncoding( rtl_TextEncoding eTextEnc );
112 
113     sal_uInt16          getFontCount() const;
114     rtl_TextEncoding    getFontEncoding( sal_uInt16 nFontId ) const;
115     void                appendFontEncoding( rtl_TextEncoding eFontEnc );
116 
117     sal_uInt16          getXfCount() const;
118     rtl_TextEncoding    getXfEncoding( sal_uInt16 nXfId ) const;
119     void                appendXfFontId( sal_uInt16 nFontId );
120 
121 protected:
122     virtual bool        implIsValid() const;
123 
124 private:
125     typedef ::std::vector< rtl_TextEncoding >   TextEncVec;
126     typedef ::std::vector< sal_uInt16 >         FontIdVec;
127 
128     TextEncVec          maFontEncs;
129     FontIdVec           maXfFontIds;
130     ::oox::xls::BiffType meBiff;
131     rtl_TextEncoding    meTextEnc;
132 };
133 
134 // ============================================================================
135 
136 class BiffObjectBase : public RecordObjectBase
137 {
138 public:
139     inline BiffSharedData& getBiffData() const { return *mxBiffData; }
140     inline ::oox::xls::BiffInputStream& getBiffStream() const { return *mxBiffStrm; }
141     inline ::oox::xls::BiffType getBiff() const { return mxBiffData->getBiff(); }
142 
143 protected:
144     inline explicit     BiffObjectBase() {}
145     virtual             ~BiffObjectBase();
146 
147     using               InputObjectBase::construct;
148     void                construct( const ObjectBase& rParent, const BinaryInputStreamRef& rxStrm, ::oox::xls::BiffType eBiff, const ::rtl::OUString& rSysFileName );
149     void                construct( const BiffObjectBase& rParent );
150 
151     virtual bool        implIsValid() const;
152     virtual bool        implStartRecord( BinaryInputStream& rBaseStrm, sal_Int64& ornRecPos, sal_Int64& ornRecId, sal_Int64& ornRecSize );
153 
154     inline sal_uInt16   getLastRecId() const { return mnLastRecId; }
155     ::rtl::OUString     getErrorName( sal_uInt8 nErrCode ) const;
156 
157     // ------------------------------------------------------------------------
158 
159     sal_Int32           readCol( bool bCol16Bit );
160     sal_Int32           readRow( bool bRow32Bit );
161     void                readAddress( Address& orAddress, bool bCol16Bit = true, bool bRow32Bit = false );
162     void                readRange( Range& orRange, bool bCol16Bit = true, bool bRow32Bit = false );
163     void                readRangeList( RangeList& orRanges, bool bCol16Bit = true, bool bRow32Bit = false );
164 
165     // ------------------------------------------------------------------------
166 
167     void                writeBooleanItem( const String& rName, sal_uInt8 nBool );
168     void                writeErrorCodeItem( const String& rName, sal_uInt8 nErrCode );
169 
170     void                writeFontPortions( const ::oox::xls::FontPortionModelList& rPortions );
171 
172     template< typename Type >
173     void                writeRectItem( const String& rName,
174                             Type nLeft, Type nTop, Type nWidth, Type nHeight,
175                             const NameListWrapper& rListWrp = NO_LIST,
176                             FormatType eFmtType = FORMATTYPE_DEC );
177 
178     // ------------------------------------------------------------------------
179 
180     ::rtl::OUString     dumpByteString(
181                             const String& rName,
182                             ::oox::xls::BiffStringFlags nFlags = ::oox::xls::BIFF_STR_DEFAULT,
183                             rtl_TextEncoding eDefaultTextEnc = RTL_TEXTENCODING_DONTKNOW );
184     ::rtl::OUString     dumpUniString(
185                             const String& rName,
186                             ::oox::xls::BiffStringFlags nFlags = ::oox::xls::BIFF_STR_DEFAULT );
187     ::rtl::OUString     dumpString(
188                             const String& rName,
189                             ::oox::xls::BiffStringFlags nByteFlags = ::oox::xls::BIFF_STR_DEFAULT,
190                             ::oox::xls::BiffStringFlags nUniFlags = ::oox::xls::BIFF_STR_DEFAULT,
191                             rtl_TextEncoding eDefaultTextEnc = RTL_TEXTENCODING_DONTKNOW );
192 
193     ::rtl::OUString     dumpSegmentedUniString( const String& rName );
194     void                dumpSegmentedUniStringArray( const String& rName );
195 
196     sal_uInt8           dumpBoolean( const String& rName = EMPTY_STRING );
197     sal_uInt8           dumpErrorCode( const String& rName = EMPTY_STRING );
198 
199     rtl_TextEncoding    dumpCodePage( const String& rName = EMPTY_STRING );
200     void                dumpFormulaResult( const String& rName = EMPTY_STRING );
201 
202     sal_Int32           dumpColIndex( const String& rName = EMPTY_STRING, bool bCol16Bit = true );
203     sal_Int32           dumpRowIndex( const String& rName = EMPTY_STRING, bool bRow32Bit = false );
204     sal_Int32           dumpColRange( const String& rName = EMPTY_STRING, bool bCol16Bit = true );
205     sal_Int32           dumpRowRange( const String& rName = EMPTY_STRING, bool bRow32Bit = false );
206 
207     Address             dumpAddress( const String& rName = EMPTY_STRING, bool bCol16Bit = true, bool bRow32Bit = false );
208     Range               dumpRange( const String& rName = EMPTY_STRING, bool bCol16Bit = true, bool bRow32Bit = false );
209     void                dumpRangeList( const String& rName = EMPTY_STRING, bool bCol16Bit = true, bool bRow32Bit = false );
210 
211     void                dumpConstArrayHeader( sal_uInt32& rnCols, sal_uInt32& rnRows );
212     ::rtl::OUString     dumpConstValue( sal_Unicode cStrQuote = OOX_DUMP_STRQUOTE );
213 
214     template< typename Type >
215     void                dumpRect( const String& rName,
216                             const NameListWrapper& rListWrp = NO_LIST,
217                             FormatType eFmtType = FORMATTYPE_DEC );
218     template< typename Type >
219     void                dumpRectWithGaps( const String& rName, sal_Int32 nGap,
220                             const NameListWrapper& rListWrp = NO_LIST,
221                             FormatType eFmtType = FORMATTYPE_DEC );
222 
223     sal_uInt16          dumpRepeatedRecId();
224     void                dumpFrHeader( bool bWithFlags, bool bWithRange );
225 
226     void                dumpDffClientRect();
227     void                dumpEmbeddedDff();
228     void                dumpControl();
229 
230 private:
231     typedef ::boost::shared_ptr< BiffSharedData >       BiffSharedDataRef;
232     typedef ::boost::shared_ptr< BiffDffStreamObject >  BiffDffStreamObjRef;
233     typedef ::boost::shared_ptr< BiffCtlsStreamObject > BiffCtlsStrmObjRef;
234 
235     BiffSharedDataRef   mxBiffData;
236     BiffInputStreamRef  mxBiffStrm;
237     BiffDffStreamObjRef mxDffObj;
238     BiffCtlsStrmObjRef  mxCtlsObj;
239     NameListRef         mxErrCodes;
240     NameListRef         mxConstType;
241     NameListRef         mxResultType;
242     sal_uInt16          mnLastRecId;
243     bool                mbMergeContRec;
244 };
245 
246 // ----------------------------------------------------------------------------
247 
248 template< typename Type >
249 void BiffObjectBase::writeRectItem( const String& rName,
250         Type nLeft, Type nTop, Type nWidth, Type nHeight,
251         const NameListWrapper& rListWrp, FormatType eFmtType )
252 {
253     MultiItemsGuard aMultiGuard( mxOut );
254     writeEmptyItem( rName );
255     writeValueItem( "x-pos", nLeft, eFmtType, rListWrp );
256     writeValueItem( "y-pos", nTop, eFmtType, rListWrp );
257     writeValueItem( "x-size", nWidth, eFmtType, rListWrp );
258     writeValueItem( "y-size", nHeight, eFmtType, rListWrp );
259 }
260 
261 template< typename Type >
262 void BiffObjectBase::dumpRect( const String& rName,
263         const NameListWrapper& rListWrp, FormatType eFmtType )
264 {
265     Type nLeft, nTop, nWidth, nHeight;
266     *mxBiffStrm >> nLeft >> nTop >> nWidth >> nHeight;
267     writeRectItem( rName, nLeft, nTop, nWidth, nHeight, rListWrp, eFmtType );
268 }
269 
270 template< typename Type >
271 void BiffObjectBase::dumpRectWithGaps( const String& rName, sal_Int32 nGap,
272         const NameListWrapper& rListWrp, FormatType eFmtType )
273 {
274     Type nLeft, nTop, nWidth, nHeight;
275     *mxBiffStrm >> nLeft;
276     mxBiffStrm->skip( nGap );
277     *mxBiffStrm >> nTop;
278     mxBiffStrm->skip( nGap );
279     *mxBiffStrm >> nWidth;
280     mxBiffStrm->skip( nGap );
281     *mxBiffStrm >> nHeight;
282     mxBiffStrm->skip( nGap );
283     writeRectItem( rName, nLeft, nTop, nWidth, nHeight, rListWrp, eFmtType );
284 }
285 
286 // ============================================================================
287 // ============================================================================
288 
289 class FormulaObject : public BiffObjectBase
290 {
291 public:
292     explicit            FormulaObject( const BiffObjectBase& rParent );
293     virtual             ~FormulaObject();
294 
295     sal_uInt16          readFormulaSize();
296     sal_uInt16          dumpFormulaSize( const String& rName = EMPTY_STRING );
297 
298     void                dumpCellFormula( const String& rName, sal_uInt16 nSize );
299     void                dumpCellFormula( const String& rName = EMPTY_STRING );
300     void                dumpNameFormula( const String& rName, sal_uInt16 nSize );
301     void                dumpNameFormula( const String& rName = EMPTY_STRING );
302 
303 protected:
304     virtual void        implDump();
305 
306 private:
307     void                constructFmlaObj();
308 
309     void                dumpFormula( const String& rName, sal_uInt16 nSize, bool bNameMode );
310     void                dumpFormula( const String& rName, bool bNameMode );
311 
312     TokenAddress        createTokenAddress( sal_uInt16 nCol, sal_uInt16 nRow, bool bRelC, bool bRelR, bool bNameMode ) const;
313     ::rtl::OUString     createRef( const ::rtl::OUString& rData ) const;
314     ::rtl::OUString     createName( sal_uInt16 nNameIdx ) const;
315     ::rtl::OUString     createPlaceHolder( size_t nIdx ) const;
316     ::rtl::OUString     createPlaceHolder() const;
317 
318     sal_uInt16          readFuncId();
319     ::rtl::OUString     writeFuncIdItem( sal_uInt16 nFuncId, const ::oox::xls::FunctionInfo** oppFuncInfo = 0 );
320 
321     sal_uInt16          dumpTokenCol( const String& rName, bool& rbRelC, bool& rbRelR );
322     sal_uInt16          dumpTokenRow( const String& rName, bool& rbRelC, bool& rbRelR );
323     TokenAddress        dumpTokenAddress( bool bNameMode );
324     TokenRange          dumpTokenRange( bool bNameMode );
325 
326     sal_Int16           readTokenRefIdx();
327     ::rtl::OUString     dumpTokenRefIdx();
328     ::rtl::OUString     dumpTokenRefTabIdxs();
329 
330     void                dumpIntToken();
331     void                dumpDoubleToken();
332     void                dumpStringToken();
333     void                dumpBoolToken();
334     void                dumpErrorToken();
335     void                dumpMissArgToken();
336 
337     void                dumpArrayToken( const ::rtl::OUString& rTokClass );
338     void                dumpNameToken( const ::rtl::OUString& rTokClass );
339     void                dumpNameXToken( const ::rtl::OUString& rTokClass );
340     void                dumpRefToken( const ::rtl::OUString& rTokClass, bool bNameMode );
341     void                dumpAreaToken( const ::rtl::OUString& rTokClass, bool bNameMode );
342     void                dumpRefErrToken( const ::rtl::OUString& rTokClass, bool bArea );
343     void                dumpRef3dToken( const ::rtl::OUString& rTokClass, bool bNameMode );
344     void                dumpArea3dToken( const ::rtl::OUString& rTokClass, bool bNameMode );
345     void                dumpRefErr3dToken( const ::rtl::OUString& rTokClass, bool bArea );
346     void                dumpMemFuncToken( const ::rtl::OUString& rTokClass );
347     void                dumpMemAreaToken( const ::rtl::OUString& rTokClass, bool bAddData );
348 
349     void                dumpExpToken( const String& rName );
350     void                dumpUnaryOpToken( const String& rLOp, const String& rROp );
351     void                dumpBinaryOpToken( const String& rOp );
352     void                dumpFuncToken( const ::rtl::OUString& rTokClass );
353     void                dumpFuncVarToken( const ::rtl::OUString& rTokClass );
354     void                dumpCmdToken( const ::rtl::OUString& rTokClass );
355 
356     void                dumpSheetToken();
357     void                dumpEndSheetToken();
358     bool                dumpAttrToken();
359 
360     bool                dumpNlrToken();
361     void                dumpNlrErrToken();
362     void                dumpNlrColRowToken( const ::rtl::OUString& rTokClass, bool bAddData );
363     void                dumpNlrRangeToken( const ::rtl::OUString& rTokClass, bool bAddData );
364     void                dumpNlrRangeErrToken();
365 
366     void                dumpAddTokenData();
367     void                dumpAddDataNlr( size_t nIdx );
368     void                dumpAddDataArray( size_t nIdx );
369     void                dumpAddDataMemArea( size_t nIdx );
370 
371 private:
372     enum AddDataType { ADDDATA_NLR, ADDDATA_ARRAY, ADDDATA_MEMAREA };
373 
374     typedef ::boost::shared_ptr< FormulaStack >                 FormulaStackRef;
375     typedef ::boost::shared_ptr< ::oox::xls::FunctionProvider > FuncProvRef;
376     typedef ::std::vector< AddDataType >                        AddDataTypeVec;
377 
378     NameListRef         mxTokens;
379     NameListRef         mxClasses;
380     NameListRef         mxRelFlags;
381     NameListRef         mxNlrTypes;
382     NameListRef         mxAttrTypes;
383     NameListRef         mxSpTypes;
384     sal_Int32           mnColCount;
385     sal_Int32           mnRowCount;
386 
387     FormulaStackRef     mxStack;
388     FuncProvRef         mxFuncProv;
389     AddDataTypeVec      maAddData;
390     ::rtl::OUString     maRefPrefix;
391     ::rtl::OUString     maName;
392     sal_uInt16          mnSize;
393     bool                mbNameMode;
394 };
395 
396 // ============================================================================
397 // ============================================================================
398 
399 class RecordStreamObject : public BiffObjectBase
400 {
401 protected:
402     inline explicit     RecordStreamObject() {}
403     virtual             ~RecordStreamObject();
404 
405     using               BiffObjectBase::construct;
406     void                construct( const ObjectBase& rParent, const BinaryInputStreamRef& rxStrm, ::oox::xls::BiffType eBiff, const ::rtl::OUString& rSysFileName );
407 
408     virtual bool        implIsValid() const;
409 
410     inline FormulaObject& getFormulaDumper() const { return *mxFmlaObj; }
411 
412 private:
413     typedef ::boost::shared_ptr< FormulaObject > FormulaObjectRef;
414     FormulaObjectRef    mxFmlaObj;
415 };
416 
417 // ============================================================================
418 
419 class WorkbookStreamObject : public RecordStreamObject
420 {
421 public:
422     explicit            WorkbookStreamObject( const ObjectBase& rParent, const BinaryInputStreamRef& rxStrm, const ::rtl::OUString& rSysFileName );
423     virtual             ~WorkbookStreamObject();
424 
425 protected:
426     virtual void        implDumpRecordBody();
427 
428 private:
429     void                initializePerSheet();
430 
431     ::rtl::OUString     createFontName( const ::rtl::OUString& rName, sal_uInt16 nHeight, bool bBold, bool bItalic ) const;
432 
433     sal_uInt16          dumpPatternIdx( const String& rName = EMPTY_STRING, bool b16Bit = true );
434     sal_uInt16          dumpColorIdx( const String& rName = EMPTY_STRING, bool b16Bit = true );
435     sal_uInt16          dumpFontIdx( const String& rName = EMPTY_STRING, bool b16Bit = true );
436     sal_uInt16          dumpFormatIdx( const String& rName = EMPTY_STRING );
437     sal_uInt16          dumpXfIdx( const String& rName = EMPTY_STRING, bool bBiff2Style = false );
438 
439     template< typename Type >
440     inline Type         dumpExtColorType() { return dumpDec< Type >( "color-type", "EXTCOLOR-TYPE" ); }
441     void                dumpExtColorValue( sal_uInt32 nColorType );
442     void                dumpExtColor( const String& rName = EMPTY_STRING );
443     void                dumpExtCfColor( const String& rName = EMPTY_STRING );
444     void                dumpExtGradientHead();
445 
446     sal_uInt8           dumpFilterColumnOperator( const String& rName );
447 
448     ::rtl::OUString     dumpPivotString( const String& rName, sal_uInt16 nStrLen );
449     ::rtl::OUString     dumpPivotString( const String& rName );
450 
451     sal_uInt16          dumpCellHeader( bool bBiff2Style = false );
452     void                dumpBoolErr();
453 
454     void                dumpCfRuleProp();
455     void                dumpXfExtProp();
456     void                dumpDxfProp();
457     void                dumpDxf12Prop();
458     void                dumpCfRule12Param( sal_uInt16 nSubType );
459 
460     void                dumpFontRec();
461     void                dumpFormatRec();
462     void                dumpXfRec();
463 
464     void                dumpObjRec();
465     void                dumpObjRecBiff3();
466     void                dumpObjRecBiff4();
467     void                dumpObjRecBiff5();
468     void                dumpObjRecBiff8();
469 
470     void                dumpObjRecLineData();
471     void                dumpObjRecFillData();
472     void                dumpObjRecRectData();
473     void                dumpObjRecTextDataBiff3( sal_uInt16& ornTextLen, sal_uInt16& ornFormatSize );
474     void                dumpObjRecTextDataBiff5( sal_uInt16& ornTextLen, sal_uInt16& ornFormatSize, sal_uInt16& ornLinkSize );
475     void                dumpObjRecSbsData();
476     void                dumpObjRecGboData();
477     void                dumpObjRecEdoData();
478     void                dumpObjRecRboData();
479     void                dumpObjRecCblsData();
480     void                dumpObjRecLbsData();
481 
482     void                dumpObjRecPadding();
483     void                dumpObjRecString( const String& rName, sal_uInt16 nTextLen, bool bRepeatLen );
484     void                dumpObjRecTextFmt( sal_uInt16 nFormatSize );
485     void                dumpObjRecFmlaRaw();
486     void                dumpObjRecFmla( const String& rName, sal_uInt16 nFmlaSize );
487     void                dumpObjRecPictFmla( sal_uInt16 nFmlaSize );
488 
489     typedef ::std::pair< sal_uInt8, ::rtl::OUString > ChFrExtPropInfo;
490 
491     void                dumpChFrExtProps();
492     ChFrExtPropInfo     dumpChFrExtPropHeader();
493 
494 private:
495     NameListRef         mxColors;
496     NameListRef         mxBorderStyles;
497     NameListRef         mxFillPatterns;
498     NameListRef         mxFontNames;
499     NameListRef         mxFormats;
500     sal_uInt16          mnFormatIdx;
501     sal_uInt16          mnPTRowFields;
502     sal_uInt16          mnPTColFields;
503     sal_uInt16          mnPTRowColItemsIdx;
504     bool                mbHasCodePage;
505     bool                mbHasDff;
506 };
507 
508 // ============================================================================
509 
510 class PivotCacheStreamObject : public RecordStreamObject
511 {
512 public:
513     explicit            PivotCacheStreamObject(
514                             const ObjectBase& rParent,
515                             const BinaryInputStreamRef& rxStrm,
516                             ::oox::xls::BiffType eBiff,
517                             const ::rtl::OUString& rSysFileName );
518 
519 protected:
520     virtual void        implDumpRecordBody();
521 };
522 
523 // ============================================================================
524 // ============================================================================
525 
526 class RootStorageObject : public OleStorageObject
527 {
528 public:
529     explicit            RootStorageObject( const DumperBase& rParent );
530 
531 protected:
532     virtual void        implDumpStream(
533                             const ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream >& rxStrm,
534                             const ::rtl::OUString& rStrgPath,
535                             const ::rtl::OUString& rStrmName,
536                             const ::rtl::OUString& rSysFileName );
537 
538     virtual void        implDumpStorage(
539                             const StorageRef& rxStrg,
540                             const ::rtl::OUString& rStrgPath,
541                             const ::rtl::OUString& rSysPath );
542 
543     virtual void        implDumpBaseStream(
544                             const BinaryInputStreamRef& rxStrm,
545                             const ::rtl::OUString& rSysFileName );
546 };
547 
548 // ============================================================================
549 // ============================================================================
550 
551 class Dumper : public DumperBase
552 {
553 public:
554     explicit            Dumper( const ::oox::core::FilterBase& rFilter );
555 
556     explicit            Dumper(
557                             const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XComponentContext >& rxContext,
558                             const ::com::sun::star::uno::Reference< ::com::sun::star::io::XInputStream >& rxInStrm,
559                             const ::rtl::OUString& rSysFileName );
560 
561 protected:
562     virtual void        implDump();
563 };
564 
565 // ============================================================================
566 // ============================================================================
567 
568 } // namespace biff
569 } // namespace dump
570 } // namespace oox
571 
572 #endif
573 #endif
574