xref: /aoo4110/main/oox/source/dump/xlsbdumper.cxx (revision b1cdbd2c)
1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski #include "oox/dump/xlsbdumper.hxx"
25*b1cdbd2cSJim Jagielski 
26*b1cdbd2cSJim Jagielski #include <com/sun/star/io/XTextInputStream.hpp>
27*b1cdbd2cSJim Jagielski #include "oox/core/filterbase.hxx"
28*b1cdbd2cSJim Jagielski #include "oox/dump/biffdumper.hxx"
29*b1cdbd2cSJim Jagielski #include "oox/dump/oledumper.hxx"
30*b1cdbd2cSJim Jagielski #include "oox/dump/pptxdumper.hxx"
31*b1cdbd2cSJim Jagielski #include "oox/helper/zipstorage.hxx"
32*b1cdbd2cSJim Jagielski #include "oox/ole/olestorage.hxx"
33*b1cdbd2cSJim Jagielski #include "oox/xls/biffhelper.hxx"
34*b1cdbd2cSJim Jagielski #include "oox/xls/formulabase.hxx"
35*b1cdbd2cSJim Jagielski #include "oox/xls/richstring.hxx"
36*b1cdbd2cSJim Jagielski 
37*b1cdbd2cSJim Jagielski #if OOX_INCLUDE_DUMPER
38*b1cdbd2cSJim Jagielski 
39*b1cdbd2cSJim Jagielski namespace oox {
40*b1cdbd2cSJim Jagielski namespace dump {
41*b1cdbd2cSJim Jagielski namespace xlsb {
42*b1cdbd2cSJim Jagielski 
43*b1cdbd2cSJim Jagielski // ============================================================================
44*b1cdbd2cSJim Jagielski 
45*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::io;
46*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::lang;
47*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::uno;
48*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::util;
49*b1cdbd2cSJim Jagielski using namespace ::oox::xls;
50*b1cdbd2cSJim Jagielski 
51*b1cdbd2cSJim Jagielski using ::comphelper::MediaDescriptor;
52*b1cdbd2cSJim Jagielski using ::oox::core::FilterBase;
53*b1cdbd2cSJim Jagielski using ::rtl::OUString;
54*b1cdbd2cSJim Jagielski using ::rtl::OUStringBuffer;
55*b1cdbd2cSJim Jagielski 
56*b1cdbd2cSJim Jagielski // ============================================================================
57*b1cdbd2cSJim Jagielski 
58*b1cdbd2cSJim Jagielski namespace {
59*b1cdbd2cSJim Jagielski 
60*b1cdbd2cSJim Jagielski const sal_uInt8 BIFF12_STRINGFLAG_FONTS         = 0x01;
61*b1cdbd2cSJim Jagielski const sal_uInt8 BIFF12_STRINGFLAG_PHONETICS     = 0x02;
62*b1cdbd2cSJim Jagielski 
63*b1cdbd2cSJim Jagielski const sal_uInt16 BIFF12_OLEOBJECT_LINKED        = 0x0001;
64*b1cdbd2cSJim Jagielski 
65*b1cdbd2cSJim Jagielski } // namespace
66*b1cdbd2cSJim Jagielski 
67*b1cdbd2cSJim Jagielski // ============================================================================
68*b1cdbd2cSJim Jagielski 
RecordObjectBase()69*b1cdbd2cSJim Jagielski RecordObjectBase::RecordObjectBase()
70*b1cdbd2cSJim Jagielski {
71*b1cdbd2cSJim Jagielski }
72*b1cdbd2cSJim Jagielski 
~RecordObjectBase()73*b1cdbd2cSJim Jagielski RecordObjectBase::~RecordObjectBase()
74*b1cdbd2cSJim Jagielski {
75*b1cdbd2cSJim Jagielski }
76*b1cdbd2cSJim Jagielski 
construct(const ObjectBase & rParent,const BinaryInputStreamRef & rxStrm,const OUString & rSysFileName)77*b1cdbd2cSJim Jagielski void RecordObjectBase::construct( const ObjectBase& rParent, const BinaryInputStreamRef& rxStrm, const OUString& rSysFileName )
78*b1cdbd2cSJim Jagielski {
79*b1cdbd2cSJim Jagielski     mxBiffStrm.reset( new SequenceInputStream( getRecordDataSequence() ) );
80*b1cdbd2cSJim Jagielski     SequenceRecordObjectBase::construct( rParent, rxStrm, rSysFileName, mxBiffStrm, "RECORD-NAMES", "SIMPLE-RECORDS" );
81*b1cdbd2cSJim Jagielski     if( SequenceRecordObjectBase::implIsValid() )
82*b1cdbd2cSJim Jagielski         mxErrCodes = cfg().getNameList( "ERRORCODES" );
83*b1cdbd2cSJim Jagielski }
84*b1cdbd2cSJim Jagielski 
construct(const RecordObjectBase & rParent)85*b1cdbd2cSJim Jagielski void RecordObjectBase::construct( const RecordObjectBase& rParent )
86*b1cdbd2cSJim Jagielski {
87*b1cdbd2cSJim Jagielski     *this = rParent;
88*b1cdbd2cSJim Jagielski }
89*b1cdbd2cSJim Jagielski 
implReadRecordHeader(BinaryInputStream & rBaseStrm,sal_Int64 & ornRecId,sal_Int64 & ornRecSize)90*b1cdbd2cSJim Jagielski bool RecordObjectBase::implReadRecordHeader( BinaryInputStream& rBaseStrm, sal_Int64& ornRecId, sal_Int64& ornRecSize )
91*b1cdbd2cSJim Jagielski {
92*b1cdbd2cSJim Jagielski     sal_Int32 nRecId = 0, nRecSize = 0;
93*b1cdbd2cSJim Jagielski     bool bValid = readCompressedInt( rBaseStrm, nRecId ) && (nRecId >= 0) && readCompressedInt( rBaseStrm, nRecSize ) && (nRecSize >= 0);
94*b1cdbd2cSJim Jagielski     ornRecId = nRecId;
95*b1cdbd2cSJim Jagielski     ornRecSize = nRecSize;
96*b1cdbd2cSJim Jagielski     return bValid;
97*b1cdbd2cSJim Jagielski }
98*b1cdbd2cSJim Jagielski 
getErrorName(sal_uInt8 nErrCode) const99*b1cdbd2cSJim Jagielski OUString RecordObjectBase::getErrorName( sal_uInt8 nErrCode ) const
100*b1cdbd2cSJim Jagielski {
101*b1cdbd2cSJim Jagielski     return cfg().getName( mxErrCodes, nErrCode );
102*b1cdbd2cSJim Jagielski }
103*b1cdbd2cSJim Jagielski 
104*b1cdbd2cSJim Jagielski // ------------------------------------------------------------------------
105*b1cdbd2cSJim Jagielski 
readAddress(Address & orAddress)106*b1cdbd2cSJim Jagielski void RecordObjectBase::readAddress( Address& orAddress )
107*b1cdbd2cSJim Jagielski {
108*b1cdbd2cSJim Jagielski     *mxStrm >> orAddress.mnRow >> orAddress.mnCol;
109*b1cdbd2cSJim Jagielski }
110*b1cdbd2cSJim Jagielski 
readRange(Range & orRange)111*b1cdbd2cSJim Jagielski void RecordObjectBase::readRange( Range& orRange )
112*b1cdbd2cSJim Jagielski {
113*b1cdbd2cSJim Jagielski     *mxStrm >> orRange.maFirst.mnRow >> orRange.maLast.mnRow >> orRange.maFirst.mnCol >> orRange.maLast.mnCol;
114*b1cdbd2cSJim Jagielski }
115*b1cdbd2cSJim Jagielski 
readRangeList(RangeList & orRanges)116*b1cdbd2cSJim Jagielski void RecordObjectBase::readRangeList( RangeList& orRanges )
117*b1cdbd2cSJim Jagielski {
118*b1cdbd2cSJim Jagielski     sal_Int32 nCount;
119*b1cdbd2cSJim Jagielski     *mxStrm >> nCount;
120*b1cdbd2cSJim Jagielski     if( nCount >= 0 )
121*b1cdbd2cSJim Jagielski     {
122*b1cdbd2cSJim Jagielski         orRanges.resize( getLimitedValue< size_t, sal_Int32 >( nCount, 0, SAL_MAX_UINT16 ) );
123*b1cdbd2cSJim Jagielski         for( RangeList::iterator aIt = orRanges.begin(), aEnd = orRanges.end(); !mxStrm->isEof() && (aIt != aEnd); ++aIt )
124*b1cdbd2cSJim Jagielski             readRange( *aIt );
125*b1cdbd2cSJim Jagielski     }
126*b1cdbd2cSJim Jagielski     else
127*b1cdbd2cSJim Jagielski         orRanges.clear();
128*b1cdbd2cSJim Jagielski }
129*b1cdbd2cSJim Jagielski 
130*b1cdbd2cSJim Jagielski // ----------------------------------------------------------------------------
131*b1cdbd2cSJim Jagielski 
writeBooleanItem(const String & rName,sal_uInt8 nBool)132*b1cdbd2cSJim Jagielski void RecordObjectBase::writeBooleanItem( const String& rName, sal_uInt8 nBool )
133*b1cdbd2cSJim Jagielski {
134*b1cdbd2cSJim Jagielski     writeDecItem( rName, nBool, "BOOLEAN" );
135*b1cdbd2cSJim Jagielski }
136*b1cdbd2cSJim Jagielski 
writeErrorCodeItem(const String & rName,sal_uInt8 nErrCode)137*b1cdbd2cSJim Jagielski void RecordObjectBase::writeErrorCodeItem( const String& rName, sal_uInt8 nErrCode )
138*b1cdbd2cSJim Jagielski {
139*b1cdbd2cSJim Jagielski     writeHexItem( rName, nErrCode, mxErrCodes );
140*b1cdbd2cSJim Jagielski }
141*b1cdbd2cSJim Jagielski 
writeFontPortions(const FontPortionModelList & rPortions)142*b1cdbd2cSJim Jagielski void RecordObjectBase::writeFontPortions( const FontPortionModelList& rPortions )
143*b1cdbd2cSJim Jagielski {
144*b1cdbd2cSJim Jagielski     if( !rPortions.empty() )
145*b1cdbd2cSJim Jagielski     {
146*b1cdbd2cSJim Jagielski         writeDecItem( "font-count", static_cast< sal_uInt32 >( rPortions.size() ) );
147*b1cdbd2cSJim Jagielski         IndentGuard aIndGuard( mxOut );
148*b1cdbd2cSJim Jagielski         TableGuard aTabGuard( mxOut, 14 );
149*b1cdbd2cSJim Jagielski         for( FontPortionModelList::const_iterator aIt = rPortions.begin(), aEnd = rPortions.end(); aIt != aEnd; ++aIt )
150*b1cdbd2cSJim Jagielski         {
151*b1cdbd2cSJim Jagielski             MultiItemsGuard aMultiGuard( mxOut );
152*b1cdbd2cSJim Jagielski             writeDecItem( "char-pos", aIt->mnPos );
153*b1cdbd2cSJim Jagielski             writeDecItem( "font-id", aIt->mnFontId, "FONTNAMES" );
154*b1cdbd2cSJim Jagielski         }
155*b1cdbd2cSJim Jagielski     }
156*b1cdbd2cSJim Jagielski }
157*b1cdbd2cSJim Jagielski 
writePhoneticPortions(const PhoneticPortionModelList & rPortions)158*b1cdbd2cSJim Jagielski void RecordObjectBase::writePhoneticPortions( const PhoneticPortionModelList& rPortions )
159*b1cdbd2cSJim Jagielski {
160*b1cdbd2cSJim Jagielski     if( !rPortions.empty() )
161*b1cdbd2cSJim Jagielski     {
162*b1cdbd2cSJim Jagielski         writeDecItem( "portion-count", static_cast< sal_uInt32 >( rPortions.size() ) );
163*b1cdbd2cSJim Jagielski         IndentGuard aIndGuard( mxOut );
164*b1cdbd2cSJim Jagielski         TableGuard aTabGuard( mxOut, 14, 21 );
165*b1cdbd2cSJim Jagielski         for( PhoneticPortionModelList::const_iterator aIt = rPortions.begin(), aEnd = rPortions.end(); aIt != aEnd; ++aIt )
166*b1cdbd2cSJim Jagielski         {
167*b1cdbd2cSJim Jagielski             MultiItemsGuard aMultiGuard( mxOut );
168*b1cdbd2cSJim Jagielski             writeDecItem( "char-pos", aIt->mnPos );
169*b1cdbd2cSJim Jagielski             writeDecItem( "base-text-start", aIt->mnBasePos );
170*b1cdbd2cSJim Jagielski             writeDecItem( "base-text-length", aIt->mnBaseLen );
171*b1cdbd2cSJim Jagielski         }
172*b1cdbd2cSJim Jagielski     }
173*b1cdbd2cSJim Jagielski }
174*b1cdbd2cSJim Jagielski 
175*b1cdbd2cSJim Jagielski // ----------------------------------------------------------------------------
176*b1cdbd2cSJim Jagielski 
dumpBoolean(const String & rName)177*b1cdbd2cSJim Jagielski sal_uInt8 RecordObjectBase::dumpBoolean( const String& rName )
178*b1cdbd2cSJim Jagielski {
179*b1cdbd2cSJim Jagielski     sal_uInt8 nBool;
180*b1cdbd2cSJim Jagielski     *mxStrm >> nBool;
181*b1cdbd2cSJim Jagielski     writeBooleanItem( rName( "boolean" ), nBool );
182*b1cdbd2cSJim Jagielski     return nBool;
183*b1cdbd2cSJim Jagielski }
184*b1cdbd2cSJim Jagielski 
dumpErrorCode(const String & rName)185*b1cdbd2cSJim Jagielski sal_uInt8 RecordObjectBase::dumpErrorCode( const String& rName )
186*b1cdbd2cSJim Jagielski {
187*b1cdbd2cSJim Jagielski     sal_uInt8 nErrCode;
188*b1cdbd2cSJim Jagielski     *mxStrm >> nErrCode;
189*b1cdbd2cSJim Jagielski     writeErrorCodeItem( rName( "error-code" ), nErrCode );
190*b1cdbd2cSJim Jagielski     return nErrCode;
191*b1cdbd2cSJim Jagielski }
192*b1cdbd2cSJim Jagielski 
dumpString(const String & rName,bool bRich,bool b32BitLen)193*b1cdbd2cSJim Jagielski OUString RecordObjectBase::dumpString( const String& rName, bool bRich, bool b32BitLen )
194*b1cdbd2cSJim Jagielski {
195*b1cdbd2cSJim Jagielski     sal_uInt8 nFlags = bRich ? dumpHex< sal_uInt8 >( "flags", "STRING-FLAGS" ) : 0;
196*b1cdbd2cSJim Jagielski 
197*b1cdbd2cSJim Jagielski     OUString aString = BiffHelper::readString( *mxBiffStrm, b32BitLen );
198*b1cdbd2cSJim Jagielski     writeStringItem( rName( "text" ), aString );
199*b1cdbd2cSJim Jagielski 
200*b1cdbd2cSJim Jagielski     // --- formatting ---
201*b1cdbd2cSJim Jagielski     if( getFlag( nFlags, BIFF12_STRINGFLAG_FONTS ) )
202*b1cdbd2cSJim Jagielski     {
203*b1cdbd2cSJim Jagielski         IndentGuard aIndGuard( mxOut );
204*b1cdbd2cSJim Jagielski         FontPortionModelList aPortions;
205*b1cdbd2cSJim Jagielski         aPortions.importPortions( *mxBiffStrm );
206*b1cdbd2cSJim Jagielski         writeFontPortions( aPortions );
207*b1cdbd2cSJim Jagielski     }
208*b1cdbd2cSJim Jagielski 
209*b1cdbd2cSJim Jagielski     // --- phonetic text ---
210*b1cdbd2cSJim Jagielski     if( getFlag( nFlags, BIFF12_STRINGFLAG_PHONETICS ) )
211*b1cdbd2cSJim Jagielski     {
212*b1cdbd2cSJim Jagielski         IndentGuard aIndGuard( mxOut );
213*b1cdbd2cSJim Jagielski         dumpString( "phonetic-text" );
214*b1cdbd2cSJim Jagielski         PhoneticPortionModelList aPortions;
215*b1cdbd2cSJim Jagielski         aPortions.importPortions( *mxBiffStrm );
216*b1cdbd2cSJim Jagielski         writePhoneticPortions( aPortions );
217*b1cdbd2cSJim Jagielski         dumpDec< sal_uInt16 >( "font-id", "FONTNAMES" );
218*b1cdbd2cSJim Jagielski         dumpHex< sal_uInt16 >( "flags", "PHONETIC-FLAGS" );
219*b1cdbd2cSJim Jagielski     }
220*b1cdbd2cSJim Jagielski 
221*b1cdbd2cSJim Jagielski     return aString;
222*b1cdbd2cSJim Jagielski }
223*b1cdbd2cSJim Jagielski 
dumpColor(const String & rName)224*b1cdbd2cSJim Jagielski void RecordObjectBase::dumpColor( const String& rName )
225*b1cdbd2cSJim Jagielski {
226*b1cdbd2cSJim Jagielski     MultiItemsGuard aMultiGuard( mxOut );
227*b1cdbd2cSJim Jagielski     writeEmptyItem( rName( "color" ) );
228*b1cdbd2cSJim Jagielski     switch( extractValue< sal_uInt8 >( dumpDec< sal_uInt8 >( "flags", "COLOR-FLAGS" ), 1, 7 ) )
229*b1cdbd2cSJim Jagielski     {
230*b1cdbd2cSJim Jagielski         case 0:     dumpUnused( 1 );                                    break;
231*b1cdbd2cSJim Jagielski         case 1:     dumpDec< sal_uInt8 >( "index", "PALETTE-COLORS" );  break;
232*b1cdbd2cSJim Jagielski         case 2:     dumpUnused( 1 );                                    break;
233*b1cdbd2cSJim Jagielski         case 3:     dumpDec< sal_uInt8 >( "theme-id" );                 break;
234*b1cdbd2cSJim Jagielski         default:    dumpUnknown( 1 );
235*b1cdbd2cSJim Jagielski     }
236*b1cdbd2cSJim Jagielski     dumpDec< sal_Int16 >( "tint", "CONV-TINT" );
237*b1cdbd2cSJim Jagielski     dumpColorABGR();
238*b1cdbd2cSJim Jagielski }
239*b1cdbd2cSJim Jagielski 
dumpPivotDateTime(const String & rName)240*b1cdbd2cSJim Jagielski DateTime RecordObjectBase::dumpPivotDateTime( const String& rName )
241*b1cdbd2cSJim Jagielski {
242*b1cdbd2cSJim Jagielski     DateTime aDateTime;
243*b1cdbd2cSJim Jagielski     aDateTime.Year = mxStrm->readuInt16();
244*b1cdbd2cSJim Jagielski     aDateTime.Month = mxStrm->readuInt16();
245*b1cdbd2cSJim Jagielski     aDateTime.Day = mxStrm->readuInt8();
246*b1cdbd2cSJim Jagielski     aDateTime.Hours = mxStrm->readuInt8();
247*b1cdbd2cSJim Jagielski     aDateTime.Minutes = mxStrm->readuInt8();
248*b1cdbd2cSJim Jagielski     aDateTime.Seconds = mxStrm->readuInt8();
249*b1cdbd2cSJim Jagielski     writeDateTimeItem( rName, aDateTime );
250*b1cdbd2cSJim Jagielski     return aDateTime;
251*b1cdbd2cSJim Jagielski }
252*b1cdbd2cSJim Jagielski 
dumpColIndex(const String & rName)253*b1cdbd2cSJim Jagielski sal_Int32 RecordObjectBase::dumpColIndex( const String& rName )
254*b1cdbd2cSJim Jagielski {
255*b1cdbd2cSJim Jagielski     sal_Int32 nCol;
256*b1cdbd2cSJim Jagielski     *mxStrm >> nCol;
257*b1cdbd2cSJim Jagielski     writeColIndexItem( rName( "col-idx" ), nCol );
258*b1cdbd2cSJim Jagielski     return nCol;
259*b1cdbd2cSJim Jagielski }
260*b1cdbd2cSJim Jagielski 
dumpRowIndex(const String & rName)261*b1cdbd2cSJim Jagielski sal_Int32 RecordObjectBase::dumpRowIndex( const String& rName )
262*b1cdbd2cSJim Jagielski {
263*b1cdbd2cSJim Jagielski     sal_Int32 nRow;
264*b1cdbd2cSJim Jagielski     *mxStrm >> nRow;
265*b1cdbd2cSJim Jagielski     writeRowIndexItem( rName( "row-idx" ), nRow );
266*b1cdbd2cSJim Jagielski     return nRow;
267*b1cdbd2cSJim Jagielski }
268*b1cdbd2cSJim Jagielski 
dumpColRange(const String & rName)269*b1cdbd2cSJim Jagielski sal_Int32 RecordObjectBase::dumpColRange( const String& rName )
270*b1cdbd2cSJim Jagielski {
271*b1cdbd2cSJim Jagielski     sal_Int32 nCol1, nCol2;
272*b1cdbd2cSJim Jagielski     *mxStrm >> nCol1 >> nCol2;
273*b1cdbd2cSJim Jagielski     writeColRangeItem( rName( "col-range" ), nCol1, nCol2 );
274*b1cdbd2cSJim Jagielski     return nCol2 - nCol1 + 1;
275*b1cdbd2cSJim Jagielski }
276*b1cdbd2cSJim Jagielski 
dumpRowRange(const String & rName)277*b1cdbd2cSJim Jagielski sal_Int32 RecordObjectBase::dumpRowRange( const String& rName )
278*b1cdbd2cSJim Jagielski {
279*b1cdbd2cSJim Jagielski     sal_Int32 nRow1, nRow2;
280*b1cdbd2cSJim Jagielski     *mxStrm >> nRow1 >> nRow2;
281*b1cdbd2cSJim Jagielski     writeRowRangeItem( rName( "row-range" ), nRow1, nRow2 );
282*b1cdbd2cSJim Jagielski     return nRow2 - nRow1 + 1;
283*b1cdbd2cSJim Jagielski }
284*b1cdbd2cSJim Jagielski 
dumpAddress(const String & rName)285*b1cdbd2cSJim Jagielski Address RecordObjectBase::dumpAddress( const String& rName )
286*b1cdbd2cSJim Jagielski {
287*b1cdbd2cSJim Jagielski     Address aPos;
288*b1cdbd2cSJim Jagielski     readAddress( aPos );
289*b1cdbd2cSJim Jagielski     writeAddressItem( rName( "addr" ), aPos );
290*b1cdbd2cSJim Jagielski     return aPos;
291*b1cdbd2cSJim Jagielski }
292*b1cdbd2cSJim Jagielski 
dumpRange(const String & rName)293*b1cdbd2cSJim Jagielski Range RecordObjectBase::dumpRange( const String& rName )
294*b1cdbd2cSJim Jagielski {
295*b1cdbd2cSJim Jagielski     Range aRange;
296*b1cdbd2cSJim Jagielski     readRange( aRange );
297*b1cdbd2cSJim Jagielski     writeRangeItem( rName( "range" ), aRange );
298*b1cdbd2cSJim Jagielski     return aRange;
299*b1cdbd2cSJim Jagielski }
300*b1cdbd2cSJim Jagielski 
dumpRangeList(const String & rName)301*b1cdbd2cSJim Jagielski void RecordObjectBase::dumpRangeList( const String& rName )
302*b1cdbd2cSJim Jagielski {
303*b1cdbd2cSJim Jagielski     RangeList aRanges;
304*b1cdbd2cSJim Jagielski     readRangeList( aRanges );
305*b1cdbd2cSJim Jagielski     writeRangeListItem( rName( "range-list" ), aRanges );
306*b1cdbd2cSJim Jagielski }
307*b1cdbd2cSJim Jagielski 
308*b1cdbd2cSJim Jagielski // private --------------------------------------------------------------------
309*b1cdbd2cSJim Jagielski 
readCompressedInt(BinaryInputStream & rStrm,sal_Int32 & ornValue)310*b1cdbd2cSJim Jagielski bool RecordObjectBase::readCompressedInt( BinaryInputStream& rStrm, sal_Int32& ornValue )
311*b1cdbd2cSJim Jagielski {
312*b1cdbd2cSJim Jagielski     ornValue = 0;
313*b1cdbd2cSJim Jagielski     sal_uInt8 nByte;
314*b1cdbd2cSJim Jagielski     rStrm >> nByte;
315*b1cdbd2cSJim Jagielski     ornValue = nByte & 0x7F;
316*b1cdbd2cSJim Jagielski     if( (nByte & 0x80) != 0 )
317*b1cdbd2cSJim Jagielski     {
318*b1cdbd2cSJim Jagielski         rStrm >> nByte;
319*b1cdbd2cSJim Jagielski         ornValue |= sal_Int32( nByte & 0x7F ) << 7;
320*b1cdbd2cSJim Jagielski         if( (nByte & 0x80) != 0 )
321*b1cdbd2cSJim Jagielski         {
322*b1cdbd2cSJim Jagielski             rStrm >> nByte;
323*b1cdbd2cSJim Jagielski             ornValue |= sal_Int32( nByte & 0x7F ) << 14;
324*b1cdbd2cSJim Jagielski             if( (nByte & 0x80) != 0 )
325*b1cdbd2cSJim Jagielski             {
326*b1cdbd2cSJim Jagielski                 rStrm >> nByte;
327*b1cdbd2cSJim Jagielski                 ornValue |= sal_Int32( nByte & 0x7F ) << 21;
328*b1cdbd2cSJim Jagielski             }
329*b1cdbd2cSJim Jagielski         }
330*b1cdbd2cSJim Jagielski     }
331*b1cdbd2cSJim Jagielski     return !rStrm.isEof();
332*b1cdbd2cSJim Jagielski }
333*b1cdbd2cSJim Jagielski 
334*b1cdbd2cSJim Jagielski // ============================================================================
335*b1cdbd2cSJim Jagielski 
FormulaObject(const RecordObjectBase & rParent)336*b1cdbd2cSJim Jagielski FormulaObject::FormulaObject( const RecordObjectBase& rParent ) :
337*b1cdbd2cSJim Jagielski     mnSize( 0 )
338*b1cdbd2cSJim Jagielski {
339*b1cdbd2cSJim Jagielski     RecordObjectBase::construct( rParent );
340*b1cdbd2cSJim Jagielski     constructFmlaObj();
341*b1cdbd2cSJim Jagielski }
342*b1cdbd2cSJim Jagielski 
~FormulaObject()343*b1cdbd2cSJim Jagielski FormulaObject::~FormulaObject()
344*b1cdbd2cSJim Jagielski {
345*b1cdbd2cSJim Jagielski }
346*b1cdbd2cSJim Jagielski 
dumpCellFormula(const String & rName)347*b1cdbd2cSJim Jagielski void FormulaObject::dumpCellFormula( const String& rName )
348*b1cdbd2cSJim Jagielski {
349*b1cdbd2cSJim Jagielski     dumpFormula( rName, false );
350*b1cdbd2cSJim Jagielski }
351*b1cdbd2cSJim Jagielski 
dumpNameFormula(const String & rName)352*b1cdbd2cSJim Jagielski void FormulaObject::dumpNameFormula( const String& rName )
353*b1cdbd2cSJim Jagielski {
354*b1cdbd2cSJim Jagielski     dumpFormula( rName, true );
355*b1cdbd2cSJim Jagielski }
356*b1cdbd2cSJim Jagielski 
implDump()357*b1cdbd2cSJim Jagielski void FormulaObject::implDump()
358*b1cdbd2cSJim Jagielski {
359*b1cdbd2cSJim Jagielski     {
360*b1cdbd2cSJim Jagielski         MultiItemsGuard aMultiGuard( mxOut );
361*b1cdbd2cSJim Jagielski         writeEmptyItem( maName );
362*b1cdbd2cSJim Jagielski         writeDecItem( "formula-size", mnSize );
363*b1cdbd2cSJim Jagielski     }
364*b1cdbd2cSJim Jagielski     if( mnSize < 0 ) return;
365*b1cdbd2cSJim Jagielski 
366*b1cdbd2cSJim Jagielski     sal_Int64 nStartPos = mxStrm->tell();
367*b1cdbd2cSJim Jagielski     sal_Int64 nEndPos = ::std::min< sal_Int64 >( nStartPos + mnSize, mxStrm->size() );
368*b1cdbd2cSJim Jagielski 
369*b1cdbd2cSJim Jagielski     bool bValid = mxTokens.get();
370*b1cdbd2cSJim Jagielski     mxStack.reset( new FormulaStack );
371*b1cdbd2cSJim Jagielski     maAddData.clear();
372*b1cdbd2cSJim Jagielski     IndentGuard aIndGuard( mxOut );
373*b1cdbd2cSJim Jagielski     {
374*b1cdbd2cSJim Jagielski         TableGuard aTabGuard( mxOut, 8, 18 );
375*b1cdbd2cSJim Jagielski         while( bValid && (mxStrm->tell() < nEndPos) )
376*b1cdbd2cSJim Jagielski         {
377*b1cdbd2cSJim Jagielski             MultiItemsGuard aMultiGuard( mxOut );
378*b1cdbd2cSJim Jagielski             writeHexItem( EMPTY_STRING, static_cast< sal_uInt16 >( mxStrm->tell() - nStartPos ) );
379*b1cdbd2cSJim Jagielski             sal_uInt8 nTokenId = dumpHex< sal_uInt8 >( EMPTY_STRING, mxTokens );
380*b1cdbd2cSJim Jagielski             bValid = mxTokens->hasName( nTokenId );
381*b1cdbd2cSJim Jagielski             if( bValid )
382*b1cdbd2cSJim Jagielski             {
383*b1cdbd2cSJim Jagielski                 sal_uInt8 nTokClass = nTokenId & BIFF_TOKCLASS_MASK;
384*b1cdbd2cSJim Jagielski                 sal_uInt8 nBaseId = nTokenId & BIFF_TOKID_MASK;
385*b1cdbd2cSJim Jagielski                 if( nTokClass == BIFF_TOKCLASS_NONE )
386*b1cdbd2cSJim Jagielski                 {
387*b1cdbd2cSJim Jagielski                     switch( nBaseId )
388*b1cdbd2cSJim Jagielski                     {
389*b1cdbd2cSJim Jagielski                         case BIFF_TOKID_EXP:        dumpExpToken( "EXP" );          break;
390*b1cdbd2cSJim Jagielski                         case BIFF_TOKID_ADD:        dumpBinaryOpToken( "+" );       break;
391*b1cdbd2cSJim Jagielski                         case BIFF_TOKID_SUB:        dumpBinaryOpToken( "-" );       break;
392*b1cdbd2cSJim Jagielski                         case BIFF_TOKID_MUL:        dumpBinaryOpToken( "*" );       break;
393*b1cdbd2cSJim Jagielski                         case BIFF_TOKID_DIV:        dumpBinaryOpToken( "/" );       break;
394*b1cdbd2cSJim Jagielski                         case BIFF_TOKID_POWER:      dumpBinaryOpToken( "^" );       break;
395*b1cdbd2cSJim Jagielski                         case BIFF_TOKID_CONCAT:     dumpBinaryOpToken( "&" );       break;
396*b1cdbd2cSJim Jagielski                         case BIFF_TOKID_LT:         dumpBinaryOpToken( "<" );       break;
397*b1cdbd2cSJim Jagielski                         case BIFF_TOKID_LE:         dumpBinaryOpToken( "<=" );      break;
398*b1cdbd2cSJim Jagielski                         case BIFF_TOKID_EQ:         dumpBinaryOpToken( "=" );       break;
399*b1cdbd2cSJim Jagielski                         case BIFF_TOKID_GE:         dumpBinaryOpToken( ">=" );      break;
400*b1cdbd2cSJim Jagielski                         case BIFF_TOKID_GT:         dumpBinaryOpToken( "<" );       break;
401*b1cdbd2cSJim Jagielski                         case BIFF_TOKID_NE:         dumpBinaryOpToken( "<>" );      break;
402*b1cdbd2cSJim Jagielski                         case BIFF_TOKID_ISECT:      dumpBinaryOpToken( " " );       break;
403*b1cdbd2cSJim Jagielski                         case BIFF_TOKID_LIST:       dumpBinaryOpToken( "," );       break;
404*b1cdbd2cSJim Jagielski                         case BIFF_TOKID_RANGE:      dumpBinaryOpToken( ":" );       break;
405*b1cdbd2cSJim Jagielski                         case BIFF_TOKID_UPLUS:      dumpUnaryOpToken( "+", "" );    break;
406*b1cdbd2cSJim Jagielski                         case BIFF_TOKID_UMINUS:     dumpUnaryOpToken( "-", "" );    break;
407*b1cdbd2cSJim Jagielski                         case BIFF_TOKID_PERCENT:    dumpUnaryOpToken( "", "%" );    break;
408*b1cdbd2cSJim Jagielski                         case BIFF_TOKID_PAREN:      dumpUnaryOpToken( "(", ")" );   break;
409*b1cdbd2cSJim Jagielski                         case BIFF_TOKID_MISSARG:    dumpMissArgToken();             break;
410*b1cdbd2cSJim Jagielski                         case BIFF_TOKID_STR:        dumpStringToken();              break;
411*b1cdbd2cSJim Jagielski                         case BIFF_TOKID_NLR:        bValid = dumpTableToken();      break;
412*b1cdbd2cSJim Jagielski                         case BIFF_TOKID_ATTR:       bValid = dumpAttrToken();       break;
413*b1cdbd2cSJim Jagielski                         case BIFF_TOKID_ERR:        dumpErrorToken();               break;
414*b1cdbd2cSJim Jagielski                         case BIFF_TOKID_BOOL:       dumpBoolToken();                break;
415*b1cdbd2cSJim Jagielski                         case BIFF_TOKID_INT:        dumpIntToken();                 break;
416*b1cdbd2cSJim Jagielski                         case BIFF_TOKID_NUM:        dumpDoubleToken();              break;
417*b1cdbd2cSJim Jagielski                         default:                    bValid = false;
418*b1cdbd2cSJim Jagielski                     }
419*b1cdbd2cSJim Jagielski                 }
420*b1cdbd2cSJim Jagielski                 else
421*b1cdbd2cSJim Jagielski                 {
422*b1cdbd2cSJim Jagielski                     OUString aTokClass = cfg().getName( mxClasses, nTokClass );
423*b1cdbd2cSJim Jagielski                     switch( nBaseId )
424*b1cdbd2cSJim Jagielski                     {
425*b1cdbd2cSJim Jagielski                         case BIFF_TOKID_ARRAY:      dumpArrayToken( aTokClass );                break;
426*b1cdbd2cSJim Jagielski                         case BIFF_TOKID_FUNC:       dumpFuncToken( aTokClass );                 break;
427*b1cdbd2cSJim Jagielski                         case BIFF_TOKID_FUNCVAR:    dumpFuncVarToken( aTokClass );              break;
428*b1cdbd2cSJim Jagielski                         case BIFF_TOKID_NAME:       dumpNameToken( aTokClass );                 break;
429*b1cdbd2cSJim Jagielski                         case BIFF_TOKID_REF:        dumpRefToken( aTokClass, false );           break;
430*b1cdbd2cSJim Jagielski                         case BIFF_TOKID_AREA:       dumpAreaToken( aTokClass, false );          break;
431*b1cdbd2cSJim Jagielski                         case BIFF_TOKID_MEMAREA:    dumpMemAreaToken( aTokClass, true );        break;
432*b1cdbd2cSJim Jagielski                         case BIFF_TOKID_MEMERR:     dumpMemAreaToken( aTokClass, false );       break;
433*b1cdbd2cSJim Jagielski                         case BIFF_TOKID_MEMNOMEM:   dumpMemAreaToken( aTokClass, false );       break;
434*b1cdbd2cSJim Jagielski                         case BIFF_TOKID_MEMFUNC:    dumpMemFuncToken( aTokClass );              break;
435*b1cdbd2cSJim Jagielski                         case BIFF_TOKID_REFERR:     dumpRefErrToken( aTokClass, false );        break;
436*b1cdbd2cSJim Jagielski                         case BIFF_TOKID_AREAERR:    dumpRefErrToken( aTokClass, true );         break;
437*b1cdbd2cSJim Jagielski                         case BIFF_TOKID_REFN:       dumpRefToken( aTokClass, true );            break;
438*b1cdbd2cSJim Jagielski                         case BIFF_TOKID_AREAN:      dumpAreaToken( aTokClass, true );           break;
439*b1cdbd2cSJim Jagielski                         case BIFF_TOKID_MEMAREAN:   dumpMemFuncToken( aTokClass );              break;
440*b1cdbd2cSJim Jagielski                         case BIFF_TOKID_MEMNOMEMN:  dumpMemFuncToken( aTokClass );              break;
441*b1cdbd2cSJim Jagielski                         case BIFF_TOKID_NAMEX:      dumpNameXToken( aTokClass );                break;
442*b1cdbd2cSJim Jagielski                         case BIFF_TOKID_REF3D:      dumpRef3dToken( aTokClass, mbNameMode );    break;
443*b1cdbd2cSJim Jagielski                         case BIFF_TOKID_AREA3D:     dumpArea3dToken( aTokClass, mbNameMode );   break;
444*b1cdbd2cSJim Jagielski                         case BIFF_TOKID_REFERR3D:   dumpRefErr3dToken( aTokClass, false );      break;
445*b1cdbd2cSJim Jagielski                         case BIFF_TOKID_AREAERR3D:  dumpRefErr3dToken( aTokClass, true );       break;
446*b1cdbd2cSJim Jagielski                         default:                    bValid = false;
447*b1cdbd2cSJim Jagielski                     }
448*b1cdbd2cSJim Jagielski                 }
449*b1cdbd2cSJim Jagielski             }
450*b1cdbd2cSJim Jagielski         }
451*b1cdbd2cSJim Jagielski     }
452*b1cdbd2cSJim Jagielski 
453*b1cdbd2cSJim Jagielski     if( nEndPos == mxStrm->tell() )
454*b1cdbd2cSJim Jagielski     {
455*b1cdbd2cSJim Jagielski         dumpAddTokenData();
456*b1cdbd2cSJim Jagielski         if( mnSize > 0 )
457*b1cdbd2cSJim Jagielski         {
458*b1cdbd2cSJim Jagielski             writeInfoItem( "formula", mxStack->getFormulaString() );
459*b1cdbd2cSJim Jagielski             writeInfoItem( "classes", mxStack->getClassesString() );
460*b1cdbd2cSJim Jagielski         }
461*b1cdbd2cSJim Jagielski     }
462*b1cdbd2cSJim Jagielski     else
463*b1cdbd2cSJim Jagielski     {
464*b1cdbd2cSJim Jagielski         dumpBinary( OOX_DUMP_ERRASCII( "formula-error" ), static_cast< sal_Int32 >( nEndPos - mxStrm->tell() ), false );
465*b1cdbd2cSJim Jagielski         sal_Int32 nAddDataSize = dumpDec< sal_Int32 >( "add-data-size" );
466*b1cdbd2cSJim Jagielski         dumpBinary( "add-data", nAddDataSize, false );
467*b1cdbd2cSJim Jagielski     }
468*b1cdbd2cSJim Jagielski 
469*b1cdbd2cSJim Jagielski     mnSize = 0;
470*b1cdbd2cSJim Jagielski }
471*b1cdbd2cSJim Jagielski 
dumpFormula(const String & rName,bool bNameMode)472*b1cdbd2cSJim Jagielski void FormulaObject::dumpFormula( const String& rName, bool bNameMode )
473*b1cdbd2cSJim Jagielski {
474*b1cdbd2cSJim Jagielski     maName = rName( "formula" );
475*b1cdbd2cSJim Jagielski     *mxStrm >> mnSize;
476*b1cdbd2cSJim Jagielski     mbNameMode = bNameMode;
477*b1cdbd2cSJim Jagielski     dump();
478*b1cdbd2cSJim Jagielski }
479*b1cdbd2cSJim Jagielski 
480*b1cdbd2cSJim Jagielski // private --------------------------------------------------------------------
481*b1cdbd2cSJim Jagielski 
constructFmlaObj()482*b1cdbd2cSJim Jagielski void FormulaObject::constructFmlaObj()
483*b1cdbd2cSJim Jagielski {
484*b1cdbd2cSJim Jagielski     if( RecordObjectBase::implIsValid() )
485*b1cdbd2cSJim Jagielski     {
486*b1cdbd2cSJim Jagielski         mxFuncProv.reset( new FunctionProvider( FILTER_OOXML, BIFF_UNKNOWN, true ) );
487*b1cdbd2cSJim Jagielski 
488*b1cdbd2cSJim Jagielski         Config& rCfg = cfg();
489*b1cdbd2cSJim Jagielski         mxClasses   = rCfg.getNameList( "TOKENCLASSES" );
490*b1cdbd2cSJim Jagielski         mxRelFlags  = rCfg.getNameList( "REFRELFLAGS" );
491*b1cdbd2cSJim Jagielski         mxAttrTypes = rCfg.getNameList( "ATTRTYPES" );
492*b1cdbd2cSJim Jagielski         mxSpTypes   = rCfg.getNameList( "ATTRSPACETYPES" );
493*b1cdbd2cSJim Jagielski 
494*b1cdbd2cSJim Jagielski         // create classified token names
495*b1cdbd2cSJim Jagielski         mxTokens = rCfg.createNameList< ConstList >( "TOKENS" );
496*b1cdbd2cSJim Jagielski         mxTokens->includeList( rCfg.getNameList( "BASETOKENS" ) );
497*b1cdbd2cSJim Jagielski 
498*b1cdbd2cSJim Jagielski         NameListRef xClassTokens = rCfg.getNameList( "CLASSTOKENS" );
499*b1cdbd2cSJim Jagielski         if( mxClasses.get() && xClassTokens.get() )
500*b1cdbd2cSJim Jagielski             for( NameListBase::const_iterator aCIt = mxClasses->begin(), aCEnd = mxClasses->end(); aCIt != aCEnd; ++aCIt )
501*b1cdbd2cSJim Jagielski                 for( NameListBase::const_iterator aTIt = xClassTokens->begin(), aTEnd = xClassTokens->end(); aTIt != aTEnd; ++aTIt )
502*b1cdbd2cSJim Jagielski                     mxTokens->setName( aCIt->first | aTIt->first, aTIt->second + aCIt->second );
503*b1cdbd2cSJim Jagielski 
504*b1cdbd2cSJim Jagielski         mnColCount = 16384;
505*b1cdbd2cSJim Jagielski         mnRowCount = 1024 * 1024;
506*b1cdbd2cSJim Jagielski     }
507*b1cdbd2cSJim Jagielski }
508*b1cdbd2cSJim Jagielski 
509*b1cdbd2cSJim Jagielski // ----------------------------------------------------------------------------
510*b1cdbd2cSJim Jagielski 
511*b1cdbd2cSJim Jagielski namespace {
512*b1cdbd2cSJim Jagielski 
lclCreateName(const OUString & rRef,sal_Int32 nNameId)513*b1cdbd2cSJim Jagielski OUString lclCreateName( const OUString& rRef, sal_Int32 nNameId )
514*b1cdbd2cSJim Jagielski {
515*b1cdbd2cSJim Jagielski     OUStringBuffer aName( rRef );
516*b1cdbd2cSJim Jagielski     StringHelper::appendIndexedText( aName, CREATE_OUSTRING( "NAME" ), nNameId );
517*b1cdbd2cSJim Jagielski     return aName.makeStringAndClear();
518*b1cdbd2cSJim Jagielski }
519*b1cdbd2cSJim Jagielski 
520*b1cdbd2cSJim Jagielski } // namespace
521*b1cdbd2cSJim Jagielski 
522*b1cdbd2cSJim Jagielski // ----------------------------------------------------------------------------
523*b1cdbd2cSJim Jagielski 
createTokenAddress(sal_Int32 nCol,sal_Int32 nRow,bool bRelC,bool bRelR,bool bNameMode) const524*b1cdbd2cSJim Jagielski TokenAddress FormulaObject::createTokenAddress( sal_Int32 nCol, sal_Int32 nRow, bool bRelC, bool bRelR, bool bNameMode ) const
525*b1cdbd2cSJim Jagielski {
526*b1cdbd2cSJim Jagielski     TokenAddress aPos;
527*b1cdbd2cSJim Jagielski     aPos.mnCol = nCol;
528*b1cdbd2cSJim Jagielski     if( bRelC && bNameMode && (nCol >= mnColCount / 2) ) aPos.mnCol -= mnColCount;
529*b1cdbd2cSJim Jagielski     aPos.mbRelCol = bRelC;
530*b1cdbd2cSJim Jagielski     aPos.mnRow = nRow;
531*b1cdbd2cSJim Jagielski     if( bRelR && bNameMode && (nRow >= mnRowCount / 2) ) aPos.mnRow -= mnRowCount;
532*b1cdbd2cSJim Jagielski     aPos.mbRelRow = bRelR;
533*b1cdbd2cSJim Jagielski     return aPos;
534*b1cdbd2cSJim Jagielski }
535*b1cdbd2cSJim Jagielski 
createRef(const OUString & rData) const536*b1cdbd2cSJim Jagielski OUString FormulaObject::createRef( const OUString& rData ) const
537*b1cdbd2cSJim Jagielski {
538*b1cdbd2cSJim Jagielski     return maRefPrefix + rData;
539*b1cdbd2cSJim Jagielski }
540*b1cdbd2cSJim Jagielski 
createName(sal_Int32 nNameId) const541*b1cdbd2cSJim Jagielski OUString FormulaObject::createName( sal_Int32 nNameId ) const
542*b1cdbd2cSJim Jagielski {
543*b1cdbd2cSJim Jagielski     return lclCreateName( maRefPrefix, nNameId );
544*b1cdbd2cSJim Jagielski }
545*b1cdbd2cSJim Jagielski 
createPlaceHolder(size_t nIdx) const546*b1cdbd2cSJim Jagielski OUString FormulaObject::createPlaceHolder( size_t nIdx ) const
547*b1cdbd2cSJim Jagielski {
548*b1cdbd2cSJim Jagielski     OUStringBuffer aStr;
549*b1cdbd2cSJim Jagielski     StringHelper::appendDec( aStr, static_cast< sal_uInt32 >( nIdx ) );
550*b1cdbd2cSJim Jagielski     StringHelper::enclose( aStr, OOX_DUMP_PLACEHOLDER );
551*b1cdbd2cSJim Jagielski     return aStr.makeStringAndClear();
552*b1cdbd2cSJim Jagielski }
553*b1cdbd2cSJim Jagielski 
createPlaceHolder() const554*b1cdbd2cSJim Jagielski OUString FormulaObject::createPlaceHolder() const
555*b1cdbd2cSJim Jagielski {
556*b1cdbd2cSJim Jagielski     return createPlaceHolder( maAddData.size() );
557*b1cdbd2cSJim Jagielski }
558*b1cdbd2cSJim Jagielski 
writeFuncIdItem(sal_uInt16 nFuncId,const FunctionInfo ** oppFuncInfo)559*b1cdbd2cSJim Jagielski OUString FormulaObject::writeFuncIdItem( sal_uInt16 nFuncId, const FunctionInfo** oppFuncInfo )
560*b1cdbd2cSJim Jagielski {
561*b1cdbd2cSJim Jagielski     ItemGuard aItem( mxOut, "func-id" );
562*b1cdbd2cSJim Jagielski     writeHexItem( EMPTY_STRING, nFuncId, "FUNCID" );
563*b1cdbd2cSJim Jagielski     OUStringBuffer aBuffer;
564*b1cdbd2cSJim Jagielski     const FunctionInfo* pFuncInfo = mxFuncProv->getFuncInfoFromBiff12FuncId( nFuncId );
565*b1cdbd2cSJim Jagielski     if( pFuncInfo )
566*b1cdbd2cSJim Jagielski         aBuffer.append( pFuncInfo->maOoxFuncName );
567*b1cdbd2cSJim Jagielski     else
568*b1cdbd2cSJim Jagielski     {
569*b1cdbd2cSJim Jagielski         bool bCmd = getFlag( nFuncId, BIFF_TOK_FUNCVAR_CMD );
570*b1cdbd2cSJim Jagielski         aBuffer.appendAscii( bCmd ? "CMD" : "FUNC" );
571*b1cdbd2cSJim Jagielski         StringHelper::appendIndex( aBuffer, nFuncId & BIFF_TOK_FUNCVAR_FUNCIDMASK );
572*b1cdbd2cSJim Jagielski     }
573*b1cdbd2cSJim Jagielski     OUString aFuncName = aBuffer.makeStringAndClear();
574*b1cdbd2cSJim Jagielski     aItem.cont();
575*b1cdbd2cSJim Jagielski     mxOut->writeChar( OOX_DUMP_STRQUOTE );
576*b1cdbd2cSJim Jagielski     mxOut->writeString( aFuncName );
577*b1cdbd2cSJim Jagielski     mxOut->writeChar( OOX_DUMP_STRQUOTE );
578*b1cdbd2cSJim Jagielski     if( oppFuncInfo ) *oppFuncInfo = pFuncInfo;
579*b1cdbd2cSJim Jagielski     return aFuncName;
580*b1cdbd2cSJim Jagielski }
581*b1cdbd2cSJim Jagielski 
dumpTokenCol(const String & rName,bool & rbRelC,bool & rbRelR)582*b1cdbd2cSJim Jagielski sal_Int32 FormulaObject::dumpTokenCol( const String& rName, bool& rbRelC, bool& rbRelR )
583*b1cdbd2cSJim Jagielski {
584*b1cdbd2cSJim Jagielski     sal_uInt16 nCol = dumpHex< sal_uInt16 >( rName, mxRelFlags );
585*b1cdbd2cSJim Jagielski     rbRelC = getFlag( nCol, BIFF12_TOK_REF_COLREL );
586*b1cdbd2cSJim Jagielski     rbRelR = getFlag( nCol, BIFF12_TOK_REF_ROWREL );
587*b1cdbd2cSJim Jagielski     nCol &= BIFF12_TOK_REF_COLMASK;
588*b1cdbd2cSJim Jagielski     return nCol;
589*b1cdbd2cSJim Jagielski }
590*b1cdbd2cSJim Jagielski 
dumpTokenRow(const String & rName)591*b1cdbd2cSJim Jagielski sal_Int32 FormulaObject::dumpTokenRow( const String& rName )
592*b1cdbd2cSJim Jagielski {
593*b1cdbd2cSJim Jagielski     return dumpDec< sal_Int32 >( rName );
594*b1cdbd2cSJim Jagielski }
595*b1cdbd2cSJim Jagielski 
dumpTokenAddress(bool bNameMode)596*b1cdbd2cSJim Jagielski TokenAddress FormulaObject::dumpTokenAddress( bool bNameMode )
597*b1cdbd2cSJim Jagielski {
598*b1cdbd2cSJim Jagielski     bool bRelC = false;
599*b1cdbd2cSJim Jagielski     bool bRelR = false;
600*b1cdbd2cSJim Jagielski     sal_Int32 nRow = dumpTokenRow( "row" );
601*b1cdbd2cSJim Jagielski     sal_Int32 nCol = dumpTokenCol( "col", bRelC, bRelR );
602*b1cdbd2cSJim Jagielski     return createTokenAddress( nCol, nRow, bRelC, bRelR, bNameMode );
603*b1cdbd2cSJim Jagielski }
604*b1cdbd2cSJim Jagielski 
dumpTokenRange(bool bNameMode)605*b1cdbd2cSJim Jagielski TokenRange FormulaObject::dumpTokenRange( bool bNameMode )
606*b1cdbd2cSJim Jagielski {
607*b1cdbd2cSJim Jagielski     bool bRelC1 = false;
608*b1cdbd2cSJim Jagielski     bool bRelR1 = false;
609*b1cdbd2cSJim Jagielski     bool bRelC2 = false;
610*b1cdbd2cSJim Jagielski     bool bRelR2 = false;
611*b1cdbd2cSJim Jagielski     sal_Int32 nRow1 = dumpTokenRow( "row1" );
612*b1cdbd2cSJim Jagielski     sal_Int32 nRow2 = dumpTokenRow( "row2" );
613*b1cdbd2cSJim Jagielski     sal_Int32 nCol1 = dumpTokenCol( "col1", bRelC1, bRelR1 );
614*b1cdbd2cSJim Jagielski     sal_Int32 nCol2 = dumpTokenCol( "col2", bRelC2, bRelR2 );
615*b1cdbd2cSJim Jagielski     TokenRange aRange;
616*b1cdbd2cSJim Jagielski     aRange.maFirst = createTokenAddress( nCol1, nRow1, bRelC1, bRelR1, bNameMode );
617*b1cdbd2cSJim Jagielski     aRange.maLast  = createTokenAddress( nCol2, nRow2, bRelC2, bRelR2, bNameMode );
618*b1cdbd2cSJim Jagielski     return aRange;
619*b1cdbd2cSJim Jagielski }
620*b1cdbd2cSJim Jagielski 
readTokenRefId()621*b1cdbd2cSJim Jagielski sal_Int16 FormulaObject::readTokenRefId()
622*b1cdbd2cSJim Jagielski {
623*b1cdbd2cSJim Jagielski     return dumpDec< sal_Int16 >( "ref-id" );
624*b1cdbd2cSJim Jagielski }
625*b1cdbd2cSJim Jagielski 
dumpTokenRefId()626*b1cdbd2cSJim Jagielski OUString FormulaObject::dumpTokenRefId()
627*b1cdbd2cSJim Jagielski {
628*b1cdbd2cSJim Jagielski     OUStringBuffer aRef( CREATE_OUSTRING( "REF" ) );
629*b1cdbd2cSJim Jagielski     StringHelper::appendIndex( aRef, readTokenRefId() );
630*b1cdbd2cSJim Jagielski     aRef.append( OOX_DUMP_TABSEP );
631*b1cdbd2cSJim Jagielski     return aRef.makeStringAndClear();
632*b1cdbd2cSJim Jagielski }
633*b1cdbd2cSJim Jagielski 
dumpIntToken()634*b1cdbd2cSJim Jagielski void FormulaObject::dumpIntToken()
635*b1cdbd2cSJim Jagielski {
636*b1cdbd2cSJim Jagielski     dumpDec< sal_uInt16 >( "value" );
637*b1cdbd2cSJim Jagielski     mxStack->pushOperand( mxOut->getLastItemValue() );
638*b1cdbd2cSJim Jagielski }
639*b1cdbd2cSJim Jagielski 
dumpDoubleToken()640*b1cdbd2cSJim Jagielski void FormulaObject::dumpDoubleToken()
641*b1cdbd2cSJim Jagielski {
642*b1cdbd2cSJim Jagielski     dumpDec< double >( "value" );
643*b1cdbd2cSJim Jagielski     mxStack->pushOperand( mxOut->getLastItemValue() );
644*b1cdbd2cSJim Jagielski }
645*b1cdbd2cSJim Jagielski 
dumpStringToken()646*b1cdbd2cSJim Jagielski void FormulaObject::dumpStringToken()
647*b1cdbd2cSJim Jagielski {
648*b1cdbd2cSJim Jagielski     OUStringBuffer aBuffer( dumpString( "value", false, false ) );
649*b1cdbd2cSJim Jagielski     StringHelper::enclose( aBuffer, OOX_DUMP_FMLASTRQUOTE );
650*b1cdbd2cSJim Jagielski     mxStack->pushOperand( aBuffer.makeStringAndClear() );
651*b1cdbd2cSJim Jagielski }
652*b1cdbd2cSJim Jagielski 
dumpBoolToken()653*b1cdbd2cSJim Jagielski void FormulaObject::dumpBoolToken()
654*b1cdbd2cSJim Jagielski {
655*b1cdbd2cSJim Jagielski     dumpBoolean( "value" );
656*b1cdbd2cSJim Jagielski     mxStack->pushOperand( mxOut->getLastItemValue() );
657*b1cdbd2cSJim Jagielski }
658*b1cdbd2cSJim Jagielski 
dumpErrorToken()659*b1cdbd2cSJim Jagielski void FormulaObject::dumpErrorToken()
660*b1cdbd2cSJim Jagielski {
661*b1cdbd2cSJim Jagielski     dumpErrorCode( "value" );
662*b1cdbd2cSJim Jagielski     mxStack->pushOperand( mxOut->getLastItemValue() );
663*b1cdbd2cSJim Jagielski }
664*b1cdbd2cSJim Jagielski 
dumpMissArgToken()665*b1cdbd2cSJim Jagielski void FormulaObject::dumpMissArgToken()
666*b1cdbd2cSJim Jagielski {
667*b1cdbd2cSJim Jagielski     mxStack->pushOperand( OUString( OOX_DUMP_EMPTYVALUE ) );
668*b1cdbd2cSJim Jagielski }
669*b1cdbd2cSJim Jagielski 
dumpArrayToken(const OUString & rTokClass)670*b1cdbd2cSJim Jagielski void FormulaObject::dumpArrayToken( const OUString& rTokClass )
671*b1cdbd2cSJim Jagielski {
672*b1cdbd2cSJim Jagielski     dumpUnused( 14 );
673*b1cdbd2cSJim Jagielski     mxStack->pushOperand( createPlaceHolder(), rTokClass );
674*b1cdbd2cSJim Jagielski     maAddData.push_back( ADDDATA_ARRAY );
675*b1cdbd2cSJim Jagielski }
676*b1cdbd2cSJim Jagielski 
dumpNameToken(const OUString & rTokClass)677*b1cdbd2cSJim Jagielski void FormulaObject::dumpNameToken( const OUString& rTokClass )
678*b1cdbd2cSJim Jagielski {
679*b1cdbd2cSJim Jagielski     sal_Int32 nNameId = dumpDec< sal_Int32 >( "name-id" );
680*b1cdbd2cSJim Jagielski     mxStack->pushOperand( createName( nNameId ), rTokClass );
681*b1cdbd2cSJim Jagielski }
682*b1cdbd2cSJim Jagielski 
dumpNameXToken(const OUString & rTokClass)683*b1cdbd2cSJim Jagielski void FormulaObject::dumpNameXToken( const OUString& rTokClass )
684*b1cdbd2cSJim Jagielski {
685*b1cdbd2cSJim Jagielski     OUString aRef = dumpTokenRefId();
686*b1cdbd2cSJim Jagielski     sal_Int32 nNameId = dumpDec< sal_Int32 >( "name-id" );
687*b1cdbd2cSJim Jagielski     mxStack->pushOperand( lclCreateName( aRef, nNameId ), rTokClass );
688*b1cdbd2cSJim Jagielski }
689*b1cdbd2cSJim Jagielski 
dumpRefToken(const OUString & rTokClass,bool bNameMode)690*b1cdbd2cSJim Jagielski void FormulaObject::dumpRefToken( const OUString& rTokClass, bool bNameMode )
691*b1cdbd2cSJim Jagielski {
692*b1cdbd2cSJim Jagielski     TokenAddress aPos = dumpTokenAddress( bNameMode );
693*b1cdbd2cSJim Jagielski     writeTokenAddressItem( "addr", aPos, bNameMode );
694*b1cdbd2cSJim Jagielski     mxStack->pushOperand( createRef( mxOut->getLastItemValue() ), rTokClass );
695*b1cdbd2cSJim Jagielski }
696*b1cdbd2cSJim Jagielski 
dumpAreaToken(const OUString & rTokClass,bool bNameMode)697*b1cdbd2cSJim Jagielski void FormulaObject::dumpAreaToken( const OUString& rTokClass, bool bNameMode )
698*b1cdbd2cSJim Jagielski {
699*b1cdbd2cSJim Jagielski     TokenRange aRange = dumpTokenRange( bNameMode );
700*b1cdbd2cSJim Jagielski     writeTokenRangeItem( "range", aRange, bNameMode );
701*b1cdbd2cSJim Jagielski     mxStack->pushOperand( createRef( mxOut->getLastItemValue() ), rTokClass );
702*b1cdbd2cSJim Jagielski }
703*b1cdbd2cSJim Jagielski 
dumpRefErrToken(const OUString & rTokClass,bool bArea)704*b1cdbd2cSJim Jagielski void FormulaObject::dumpRefErrToken( const OUString& rTokClass, bool bArea )
705*b1cdbd2cSJim Jagielski {
706*b1cdbd2cSJim Jagielski     dumpUnused( 4 * (bArea ? 2 : 1) );
707*b1cdbd2cSJim Jagielski     mxStack->pushOperand( createRef( getErrorName( BIFF_ERR_REF ) ), rTokClass );
708*b1cdbd2cSJim Jagielski }
709*b1cdbd2cSJim Jagielski 
dumpRef3dToken(const OUString & rTokClass,bool bNameMode)710*b1cdbd2cSJim Jagielski void FormulaObject::dumpRef3dToken( const OUString& rTokClass, bool bNameMode )
711*b1cdbd2cSJim Jagielski {
712*b1cdbd2cSJim Jagielski     OUString aRef = dumpTokenRefId();
713*b1cdbd2cSJim Jagielski     TokenAddress aPos = dumpTokenAddress( bNameMode );
714*b1cdbd2cSJim Jagielski     writeTokenAddress3dItem( "addr", aRef, aPos, bNameMode );
715*b1cdbd2cSJim Jagielski     mxStack->pushOperand( mxOut->getLastItemValue(), rTokClass );
716*b1cdbd2cSJim Jagielski }
717*b1cdbd2cSJim Jagielski 
dumpArea3dToken(const OUString & rTokClass,bool bNameMode)718*b1cdbd2cSJim Jagielski void FormulaObject::dumpArea3dToken( const OUString& rTokClass, bool bNameMode )
719*b1cdbd2cSJim Jagielski {
720*b1cdbd2cSJim Jagielski     OUString aRef = dumpTokenRefId();
721*b1cdbd2cSJim Jagielski     TokenRange aRange = dumpTokenRange( bNameMode );
722*b1cdbd2cSJim Jagielski     writeTokenRange3dItem( "range", aRef, aRange, bNameMode );
723*b1cdbd2cSJim Jagielski     mxStack->pushOperand( mxOut->getLastItemValue(), rTokClass );
724*b1cdbd2cSJim Jagielski }
725*b1cdbd2cSJim Jagielski 
dumpRefErr3dToken(const OUString & rTokClass,bool bArea)726*b1cdbd2cSJim Jagielski void FormulaObject::dumpRefErr3dToken( const OUString& rTokClass, bool bArea )
727*b1cdbd2cSJim Jagielski {
728*b1cdbd2cSJim Jagielski     OUString aRef = dumpTokenRefId();
729*b1cdbd2cSJim Jagielski     dumpUnused( 4 * (bArea ? 2 : 1) );
730*b1cdbd2cSJim Jagielski     mxStack->pushOperand( aRef + getErrorName( BIFF_ERR_REF ), rTokClass );
731*b1cdbd2cSJim Jagielski }
732*b1cdbd2cSJim Jagielski 
dumpMemFuncToken(const OUString &)733*b1cdbd2cSJim Jagielski void FormulaObject::dumpMemFuncToken( const OUString& /*rTokClass*/ )
734*b1cdbd2cSJim Jagielski {
735*b1cdbd2cSJim Jagielski     dumpDec< sal_uInt16 >( "size" );
736*b1cdbd2cSJim Jagielski }
737*b1cdbd2cSJim Jagielski 
dumpMemAreaToken(const OUString & rTokClass,bool bAddData)738*b1cdbd2cSJim Jagielski void FormulaObject::dumpMemAreaToken( const OUString& rTokClass, bool bAddData )
739*b1cdbd2cSJim Jagielski {
740*b1cdbd2cSJim Jagielski     dumpUnused( 4 );
741*b1cdbd2cSJim Jagielski     dumpMemFuncToken( rTokClass );
742*b1cdbd2cSJim Jagielski     if( bAddData )
743*b1cdbd2cSJim Jagielski         maAddData.push_back( ADDDATA_MEMAREA );
744*b1cdbd2cSJim Jagielski }
745*b1cdbd2cSJim Jagielski 
dumpExpToken(const String & rName)746*b1cdbd2cSJim Jagielski void FormulaObject::dumpExpToken( const String& rName )
747*b1cdbd2cSJim Jagielski {
748*b1cdbd2cSJim Jagielski     Address aPos;
749*b1cdbd2cSJim Jagielski     dumpRowIndex( "base-row" );
750*b1cdbd2cSJim Jagielski     OUStringBuffer aOp( rName );
751*b1cdbd2cSJim Jagielski     StringHelper::appendIndex( aOp, createPlaceHolder() + mxOut->getLastItemValue() );
752*b1cdbd2cSJim Jagielski     mxStack->pushOperand( aOp.makeStringAndClear() );
753*b1cdbd2cSJim Jagielski     maAddData.push_back( ADDDATA_EXP );
754*b1cdbd2cSJim Jagielski }
755*b1cdbd2cSJim Jagielski 
dumpUnaryOpToken(const String & rLOp,const String & rROp)756*b1cdbd2cSJim Jagielski void FormulaObject::dumpUnaryOpToken( const String& rLOp, const String& rROp )
757*b1cdbd2cSJim Jagielski {
758*b1cdbd2cSJim Jagielski     mxStack->pushUnaryOp( rLOp, rROp );
759*b1cdbd2cSJim Jagielski }
760*b1cdbd2cSJim Jagielski 
dumpBinaryOpToken(const String & rOp)761*b1cdbd2cSJim Jagielski void FormulaObject::dumpBinaryOpToken( const String& rOp )
762*b1cdbd2cSJim Jagielski {
763*b1cdbd2cSJim Jagielski     mxStack->pushBinaryOp( rOp );
764*b1cdbd2cSJim Jagielski }
765*b1cdbd2cSJim Jagielski 
dumpFuncToken(const OUString & rTokClass)766*b1cdbd2cSJim Jagielski void FormulaObject::dumpFuncToken( const OUString& rTokClass )
767*b1cdbd2cSJim Jagielski {
768*b1cdbd2cSJim Jagielski     sal_uInt16 nFuncId;
769*b1cdbd2cSJim Jagielski     *mxStrm >> nFuncId;
770*b1cdbd2cSJim Jagielski     const FunctionInfo* pFuncInfo = 0;
771*b1cdbd2cSJim Jagielski     OUString aFuncName = writeFuncIdItem( nFuncId, &pFuncInfo );
772*b1cdbd2cSJim Jagielski     if( pFuncInfo && (pFuncInfo->mnMinParamCount == pFuncInfo->mnMaxParamCount) )
773*b1cdbd2cSJim Jagielski         mxStack->pushFuncOp( aFuncName, rTokClass, pFuncInfo->mnMinParamCount );
774*b1cdbd2cSJim Jagielski     else
775*b1cdbd2cSJim Jagielski         mxStack->setError();
776*b1cdbd2cSJim Jagielski }
777*b1cdbd2cSJim Jagielski 
dumpFuncVarToken(const OUString & rTokClass)778*b1cdbd2cSJim Jagielski void FormulaObject::dumpFuncVarToken( const OUString& rTokClass )
779*b1cdbd2cSJim Jagielski {
780*b1cdbd2cSJim Jagielski     sal_uInt8 nParamCount;
781*b1cdbd2cSJim Jagielski     sal_uInt16 nFuncId;
782*b1cdbd2cSJim Jagielski     *mxStrm >> nParamCount >> nFuncId;
783*b1cdbd2cSJim Jagielski     bool bCmd = getFlag( nFuncId, BIFF_TOK_FUNCVAR_CMD );
784*b1cdbd2cSJim Jagielski     if( bCmd )
785*b1cdbd2cSJim Jagielski         writeHexItem( "param-count", nParamCount, "PARAMCOUNT-CMD" );
786*b1cdbd2cSJim Jagielski     else
787*b1cdbd2cSJim Jagielski         writeDecItem( "param-count", nParamCount );
788*b1cdbd2cSJim Jagielski     OUString aFuncName = writeFuncIdItem( nFuncId );
789*b1cdbd2cSJim Jagielski     if( bCmd && getFlag( nParamCount, BIFF_TOK_FUNCVAR_CMDPROMPT ) )
790*b1cdbd2cSJim Jagielski     {
791*b1cdbd2cSJim Jagielski         aFuncName += OUString( OOX_DUMP_CMDPROMPT );
792*b1cdbd2cSJim Jagielski         nParamCount &= BIFF_TOK_FUNCVAR_COUNTMASK;
793*b1cdbd2cSJim Jagielski     }
794*b1cdbd2cSJim Jagielski     mxStack->pushFuncOp( aFuncName, rTokClass, nParamCount );
795*b1cdbd2cSJim Jagielski }
796*b1cdbd2cSJim Jagielski 
dumpTableToken()797*b1cdbd2cSJim Jagielski bool FormulaObject::dumpTableToken()
798*b1cdbd2cSJim Jagielski {
799*b1cdbd2cSJim Jagielski     dumpUnused( 3 );
800*b1cdbd2cSJim Jagielski     sal_uInt16 nFlags = dumpHex< sal_uInt16 >( "flags", "TABLEFLAGS" );
801*b1cdbd2cSJim Jagielski     sal_uInt16 nTabId = dumpDec< sal_uInt16 >( "table-id" );
802*b1cdbd2cSJim Jagielski     dumpUnused( 2 );
803*b1cdbd2cSJim Jagielski     {
804*b1cdbd2cSJim Jagielski         sal_uInt16 nCol1, nCol2;
805*b1cdbd2cSJim Jagielski         *mxStrm >> nCol1 >> nCol2;
806*b1cdbd2cSJim Jagielski         ItemGuard aItem( mxOut, "cols" );
807*b1cdbd2cSJim Jagielski         mxOut->writeDec( nCol1 );
808*b1cdbd2cSJim Jagielski         if( nCol1 != nCol2 )
809*b1cdbd2cSJim Jagielski         {
810*b1cdbd2cSJim Jagielski             mxOut->writeChar( OOX_DUMP_RANGESEP );
811*b1cdbd2cSJim Jagielski             mxOut->writeDec( nCol2 );
812*b1cdbd2cSJim Jagielski         }
813*b1cdbd2cSJim Jagielski     }
814*b1cdbd2cSJim Jagielski     OUStringBuffer aColRange;
815*b1cdbd2cSJim Jagielski     StringHelper::appendIndex( aColRange, mxOut->getLastItemValue() );
816*b1cdbd2cSJim Jagielski     OUStringBuffer aParams;
817*b1cdbd2cSJim Jagielski     size_t nParams = 0;
818*b1cdbd2cSJim Jagielski     if( getFlag( nFlags, BIFF12_TOK_TABLE_ALL ) && ++nParams )
819*b1cdbd2cSJim Jagielski         StringHelper::appendToken( aParams, CREATE_OUSTRING( "[#All]" ) );
820*b1cdbd2cSJim Jagielski     if( getFlag( nFlags, BIFF12_TOK_TABLE_HEADERS ) && ++nParams )
821*b1cdbd2cSJim Jagielski         StringHelper::appendToken( aParams, CREATE_OUSTRING( "[#Headers]" ) );
822*b1cdbd2cSJim Jagielski     if( getFlag( nFlags, BIFF12_TOK_TABLE_DATA ) && ++nParams )
823*b1cdbd2cSJim Jagielski         StringHelper::appendToken( aParams, CREATE_OUSTRING( "[#Data]" ) );
824*b1cdbd2cSJim Jagielski     if( getFlag( nFlags, BIFF12_TOK_TABLE_TOTALS ) && ++nParams )
825*b1cdbd2cSJim Jagielski         StringHelper::appendToken( aParams, CREATE_OUSTRING( "[#Totals]" ) );
826*b1cdbd2cSJim Jagielski     if( getFlag( nFlags, BIFF12_TOK_TABLE_THISROW ) && ++nParams )
827*b1cdbd2cSJim Jagielski         StringHelper::appendToken( aParams, CREATE_OUSTRING( "[#This Row]" ) );
828*b1cdbd2cSJim Jagielski     if( (getFlag( nFlags, BIFF12_TOK_TABLE_COLUMN ) || getFlag( nFlags, BIFF12_TOK_TABLE_COLRANGE )) && ++nParams )
829*b1cdbd2cSJim Jagielski         StringHelper::appendToken( aParams, aColRange.makeStringAndClear() );
830*b1cdbd2cSJim Jagielski     OUStringBuffer aOp;
831*b1cdbd2cSJim Jagielski     StringHelper::appendIndexedText( aOp, CREATE_OUSTRING( "TABLE" ), nTabId );
832*b1cdbd2cSJim Jagielski     if( nParams > 1 )
833*b1cdbd2cSJim Jagielski         StringHelper::appendIndex( aOp, aParams.makeStringAndClear() );
834*b1cdbd2cSJim Jagielski     else if( nParams == 1 )
835*b1cdbd2cSJim Jagielski         aOp.append( aParams.makeStringAndClear() );
836*b1cdbd2cSJim Jagielski     mxStack->pushOperand( aOp.makeStringAndClear() );
837*b1cdbd2cSJim Jagielski     return true;
838*b1cdbd2cSJim Jagielski }
839*b1cdbd2cSJim Jagielski 
dumpAttrToken()840*b1cdbd2cSJim Jagielski bool FormulaObject::dumpAttrToken()
841*b1cdbd2cSJim Jagielski {
842*b1cdbd2cSJim Jagielski     bool bValid = true;
843*b1cdbd2cSJim Jagielski     sal_uInt8 nType = dumpHex< sal_uInt8 >( "type", mxAttrTypes );
844*b1cdbd2cSJim Jagielski     switch( nType )
845*b1cdbd2cSJim Jagielski     {
846*b1cdbd2cSJim Jagielski         case BIFF_TOK_ATTR_VOLATILE:
847*b1cdbd2cSJim Jagielski             dumpUnused( 2 );
848*b1cdbd2cSJim Jagielski         break;
849*b1cdbd2cSJim Jagielski         case BIFF_TOK_ATTR_IF:
850*b1cdbd2cSJim Jagielski             dumpDec< sal_uInt16 >( "skip" );
851*b1cdbd2cSJim Jagielski         break;
852*b1cdbd2cSJim Jagielski         case BIFF_TOK_ATTR_CHOOSE:
853*b1cdbd2cSJim Jagielski         {
854*b1cdbd2cSJim Jagielski             sal_uInt16 nCount = dumpDec< sal_uInt16 >( "choices" );
855*b1cdbd2cSJim Jagielski             mxOut->resetItemIndex();
856*b1cdbd2cSJim Jagielski             for( sal_uInt16 nIdx = 0; nIdx < nCount; ++nIdx )
857*b1cdbd2cSJim Jagielski                 dumpDec< sal_uInt16 >( "#skip" );
858*b1cdbd2cSJim Jagielski             dumpDec< sal_uInt16 >( "skip-err" );
859*b1cdbd2cSJim Jagielski         }
860*b1cdbd2cSJim Jagielski         break;
861*b1cdbd2cSJim Jagielski         case BIFF_TOK_ATTR_SKIP:
862*b1cdbd2cSJim Jagielski             dumpDec< sal_uInt16 >( "skip" );
863*b1cdbd2cSJim Jagielski         break;
864*b1cdbd2cSJim Jagielski         case BIFF_TOK_ATTR_SUM:
865*b1cdbd2cSJim Jagielski             dumpUnused( 2 );
866*b1cdbd2cSJim Jagielski             mxStack->pushFuncOp( CREATE_OUSTRING( "SUM" ), OUString( OOX_DUMP_BASECLASS ), 1 );
867*b1cdbd2cSJim Jagielski         break;
868*b1cdbd2cSJim Jagielski         case BIFF_TOK_ATTR_ASSIGN:
869*b1cdbd2cSJim Jagielski             dumpUnused( 2 );
870*b1cdbd2cSJim Jagielski         break;
871*b1cdbd2cSJim Jagielski         case BIFF_TOK_ATTR_SPACE:
872*b1cdbd2cSJim Jagielski         case BIFF_TOK_ATTR_SPACE | BIFF_TOK_ATTR_VOLATILE:
873*b1cdbd2cSJim Jagielski             dumpDec< sal_uInt8 >( "char-type", mxSpTypes );
874*b1cdbd2cSJim Jagielski             dumpDec< sal_uInt8 >( "char-count" );
875*b1cdbd2cSJim Jagielski         break;
876*b1cdbd2cSJim Jagielski         case BIFF_TOK_ATTR_IFERROR:
877*b1cdbd2cSJim Jagielski             dumpDec< sal_uInt16 >( "skip" );
878*b1cdbd2cSJim Jagielski         break;
879*b1cdbd2cSJim Jagielski         default:
880*b1cdbd2cSJim Jagielski             bValid = false;
881*b1cdbd2cSJim Jagielski     }
882*b1cdbd2cSJim Jagielski     return bValid;
883*b1cdbd2cSJim Jagielski }
884*b1cdbd2cSJim Jagielski 
dumpAddTokenData()885*b1cdbd2cSJim Jagielski void FormulaObject::dumpAddTokenData()
886*b1cdbd2cSJim Jagielski {
887*b1cdbd2cSJim Jagielski     mxOut->resetItemIndex();
888*b1cdbd2cSJim Jagielski     sal_Int32 nAddDataSize = (mxStrm->size() - mxStrm->tell() >= 4) ? dumpDec< sal_Int32 >( "add-data-size" ) : 0;
889*b1cdbd2cSJim Jagielski     sal_Int64 nEndPos = ::std::min< sal_Int64 >( mxStrm->tell() + nAddDataSize, mxStrm->size() );
890*b1cdbd2cSJim Jagielski     for( AddDataTypeVec::const_iterator aIt = maAddData.begin(), aEnd = maAddData.end(); (aIt != aEnd) && !mxStrm->isEof() && (mxStrm->tell() < nEndPos); ++aIt )
891*b1cdbd2cSJim Jagielski     {
892*b1cdbd2cSJim Jagielski         AddDataType eType = *aIt;
893*b1cdbd2cSJim Jagielski 
894*b1cdbd2cSJim Jagielski         {
895*b1cdbd2cSJim Jagielski             ItemGuard aItem( mxOut, "#add-data" );
896*b1cdbd2cSJim Jagielski             switch( eType )
897*b1cdbd2cSJim Jagielski             {
898*b1cdbd2cSJim Jagielski                 case ADDDATA_EXP:       mxOut->writeAscii( "tExp" );      break;
899*b1cdbd2cSJim Jagielski                 case ADDDATA_ARRAY:     mxOut->writeAscii( "tArray" );    break;
900*b1cdbd2cSJim Jagielski                 case ADDDATA_MEMAREA:   mxOut->writeAscii( "tMemArea" );  break;
901*b1cdbd2cSJim Jagielski             }
902*b1cdbd2cSJim Jagielski         }
903*b1cdbd2cSJim Jagielski 
904*b1cdbd2cSJim Jagielski         size_t nIdx = aIt - maAddData.begin();
905*b1cdbd2cSJim Jagielski         IndentGuard aIndGuard( mxOut );
906*b1cdbd2cSJim Jagielski         switch( eType )
907*b1cdbd2cSJim Jagielski         {
908*b1cdbd2cSJim Jagielski             case ADDDATA_EXP:       dumpAddDataExp( nIdx );     break;
909*b1cdbd2cSJim Jagielski             case ADDDATA_ARRAY:     dumpAddDataArray( nIdx );   break;
910*b1cdbd2cSJim Jagielski             case ADDDATA_MEMAREA:   dumpAddDataMemArea( nIdx ); break;
911*b1cdbd2cSJim Jagielski             default:;
912*b1cdbd2cSJim Jagielski         }
913*b1cdbd2cSJim Jagielski     }
914*b1cdbd2cSJim Jagielski }
915*b1cdbd2cSJim Jagielski 
dumpAddDataExp(size_t nIdx)916*b1cdbd2cSJim Jagielski void FormulaObject::dumpAddDataExp( size_t nIdx )
917*b1cdbd2cSJim Jagielski {
918*b1cdbd2cSJim Jagielski     dumpColIndex( "base-col" );
919*b1cdbd2cSJim Jagielski     mxStack->replaceOnTop( createPlaceHolder( nIdx ), mxOut->getLastItemValue() );
920*b1cdbd2cSJim Jagielski }
921*b1cdbd2cSJim Jagielski 
dumpAddDataArray(size_t nIdx)922*b1cdbd2cSJim Jagielski void FormulaObject::dumpAddDataArray( size_t nIdx )
923*b1cdbd2cSJim Jagielski {
924*b1cdbd2cSJim Jagielski     sal_Int32 nCols, nRows;
925*b1cdbd2cSJim Jagielski     dumpaddDataArrayHeader( nCols, nRows );
926*b1cdbd2cSJim Jagielski 
927*b1cdbd2cSJim Jagielski     OUStringBuffer aOp;
928*b1cdbd2cSJim Jagielski     TableGuard aTabGuard( mxOut, 17 );
929*b1cdbd2cSJim Jagielski     for( sal_Int32 nRow = 0; nRow < nRows; ++nRow )
930*b1cdbd2cSJim Jagielski     {
931*b1cdbd2cSJim Jagielski         OUStringBuffer aArrayLine;
932*b1cdbd2cSJim Jagielski         for( sal_Int32 nCol = 0; nCol < nCols; ++nCol )
933*b1cdbd2cSJim Jagielski             StringHelper::appendToken( aArrayLine, dumpaddDataArrayValue(), OOX_DUMP_LISTSEP );
934*b1cdbd2cSJim Jagielski         StringHelper::appendToken( aOp, aArrayLine.makeStringAndClear(), OOX_DUMP_ARRAYSEP );
935*b1cdbd2cSJim Jagielski     }
936*b1cdbd2cSJim Jagielski     StringHelper::enclose( aOp, '{', '}' );
937*b1cdbd2cSJim Jagielski     mxStack->replaceOnTop( createPlaceHolder( nIdx ), aOp.makeStringAndClear() );
938*b1cdbd2cSJim Jagielski }
939*b1cdbd2cSJim Jagielski 
dumpAddDataMemArea(size_t)940*b1cdbd2cSJim Jagielski void FormulaObject::dumpAddDataMemArea( size_t /*nIdx*/ )
941*b1cdbd2cSJim Jagielski {
942*b1cdbd2cSJim Jagielski     dumpRangeList();
943*b1cdbd2cSJim Jagielski }
944*b1cdbd2cSJim Jagielski 
dumpaddDataArrayHeader(sal_Int32 & rnCols,sal_Int32 & rnRows)945*b1cdbd2cSJim Jagielski void FormulaObject::dumpaddDataArrayHeader( sal_Int32& rnCols, sal_Int32& rnRows )
946*b1cdbd2cSJim Jagielski {
947*b1cdbd2cSJim Jagielski     MultiItemsGuard aMultiGuard( mxOut );
948*b1cdbd2cSJim Jagielski     rnRows = dumpDec< sal_Int32 >( "height" );
949*b1cdbd2cSJim Jagielski     rnCols = dumpDec< sal_Int32 >( "width" );
950*b1cdbd2cSJim Jagielski     ItemGuard aItem( mxOut, "size" );
951*b1cdbd2cSJim Jagielski     mxOut->writeDec( rnCols );
952*b1cdbd2cSJim Jagielski     mxOut->writeChar( 'x' );
953*b1cdbd2cSJim Jagielski     mxOut->writeDec( rnRows );
954*b1cdbd2cSJim Jagielski     aItem.cont();
955*b1cdbd2cSJim Jagielski     mxOut->writeDec( rnCols * rnRows );
956*b1cdbd2cSJim Jagielski }
957*b1cdbd2cSJim Jagielski 
dumpaddDataArrayValue()958*b1cdbd2cSJim Jagielski OUString FormulaObject::dumpaddDataArrayValue()
959*b1cdbd2cSJim Jagielski {
960*b1cdbd2cSJim Jagielski     MultiItemsGuard aMultiGuard( mxOut );
961*b1cdbd2cSJim Jagielski     OUStringBuffer aValue;
962*b1cdbd2cSJim Jagielski     switch( dumpDec< sal_uInt8 >( "type", "ARRAYVALUE-TYPE" ) )
963*b1cdbd2cSJim Jagielski     {
964*b1cdbd2cSJim Jagielski         case BIFF_TOK_ARRAY_DOUBLE:
965*b1cdbd2cSJim Jagielski             dumpDec< double >( "value" );
966*b1cdbd2cSJim Jagielski             aValue.append( mxOut->getLastItemValue() );
967*b1cdbd2cSJim Jagielski         break;
968*b1cdbd2cSJim Jagielski         case BIFF_TOK_ARRAY_STRING:
969*b1cdbd2cSJim Jagielski             aValue.append( dumpString( "value", false, false ) );
970*b1cdbd2cSJim Jagielski             StringHelper::enclose( aValue, OOX_DUMP_STRQUOTE );
971*b1cdbd2cSJim Jagielski         break;
972*b1cdbd2cSJim Jagielski         case BIFF_TOK_ARRAY_BOOL:
973*b1cdbd2cSJim Jagielski             dumpBoolean( "value" );
974*b1cdbd2cSJim Jagielski             aValue.append( mxOut->getLastItemValue() );
975*b1cdbd2cSJim Jagielski         break;
976*b1cdbd2cSJim Jagielski         case BIFF_TOK_ARRAY_ERROR:
977*b1cdbd2cSJim Jagielski             dumpErrorCode( "value" );
978*b1cdbd2cSJim Jagielski             aValue.append( mxOut->getLastItemValue() );
979*b1cdbd2cSJim Jagielski             dumpUnused( 3 );
980*b1cdbd2cSJim Jagielski         break;
981*b1cdbd2cSJim Jagielski     }
982*b1cdbd2cSJim Jagielski     return aValue.makeStringAndClear();
983*b1cdbd2cSJim Jagielski }
984*b1cdbd2cSJim Jagielski 
985*b1cdbd2cSJim Jagielski // ============================================================================
986*b1cdbd2cSJim Jagielski 
RecordStreamObject(ObjectBase & rParent,const BinaryInputStreamRef & rxStrm,const OUString & rSysFileName)987*b1cdbd2cSJim Jagielski RecordStreamObject::RecordStreamObject( ObjectBase& rParent, const BinaryInputStreamRef& rxStrm, const OUString& rSysFileName )
988*b1cdbd2cSJim Jagielski {
989*b1cdbd2cSJim Jagielski     RecordObjectBase::construct( rParent, rxStrm, rSysFileName );
990*b1cdbd2cSJim Jagielski     if( RecordObjectBase::implIsValid() )
991*b1cdbd2cSJim Jagielski         mxFmlaObj.reset( new FormulaObject( *this ) );
992*b1cdbd2cSJim Jagielski }
993*b1cdbd2cSJim Jagielski 
implIsValid() const994*b1cdbd2cSJim Jagielski bool RecordStreamObject::implIsValid() const
995*b1cdbd2cSJim Jagielski {
996*b1cdbd2cSJim Jagielski     return isValid( mxFmlaObj ) && RecordObjectBase::implIsValid();
997*b1cdbd2cSJim Jagielski }
998*b1cdbd2cSJim Jagielski 
implDumpRecordBody()999*b1cdbd2cSJim Jagielski void RecordStreamObject::implDumpRecordBody()
1000*b1cdbd2cSJim Jagielski {
1001*b1cdbd2cSJim Jagielski     switch( getRecId() )
1002*b1cdbd2cSJim Jagielski     {
1003*b1cdbd2cSJim Jagielski         case BIFF12_ID_ARRAY:
1004*b1cdbd2cSJim Jagielski             dumpRange( "array-range" );
1005*b1cdbd2cSJim Jagielski             dumpHex< sal_uInt8 >( "flags", "ARRAY-FLAGS" );
1006*b1cdbd2cSJim Jagielski             mxFmlaObj->dumpCellFormula();
1007*b1cdbd2cSJim Jagielski         break;
1008*b1cdbd2cSJim Jagielski 
1009*b1cdbd2cSJim Jagielski         case BIFF12_ID_AUTOFILTER:
1010*b1cdbd2cSJim Jagielski             dumpRange( "filter-range" );
1011*b1cdbd2cSJim Jagielski         break;
1012*b1cdbd2cSJim Jagielski 
1013*b1cdbd2cSJim Jagielski         case BIFF12_ID_BINARYINDEXBLOCK:
1014*b1cdbd2cSJim Jagielski             dumpRowRange( "row-range" );
1015*b1cdbd2cSJim Jagielski             dumpUnknown( 12 );
1016*b1cdbd2cSJim Jagielski         break;
1017*b1cdbd2cSJim Jagielski 
1018*b1cdbd2cSJim Jagielski         case BIFF12_ID_BINARYINDEXROWS:
1019*b1cdbd2cSJim Jagielski         {
1020*b1cdbd2cSJim Jagielski             sal_uInt32 nUsedRows = dumpBin< sal_uInt32 >( "used-rows" );
1021*b1cdbd2cSJim Jagielski             dumpDec< sal_Int64 >( "stream-offset" );
1022*b1cdbd2cSJim Jagielski             for( ; nUsedRows > 0; nUsedRows >>= 1 )
1023*b1cdbd2cSJim Jagielski                 if( (nUsedRows & 1) != 0 )
1024*b1cdbd2cSJim Jagielski                     dumpBin< sal_uInt16 >( "used-columns" );
1025*b1cdbd2cSJim Jagielski         }
1026*b1cdbd2cSJim Jagielski         break;
1027*b1cdbd2cSJim Jagielski 
1028*b1cdbd2cSJim Jagielski         case BIFF12_ID_BORDER:
1029*b1cdbd2cSJim Jagielski             dumpHex< sal_uInt8 >( "flags", "BORDER-FLAGS" );
1030*b1cdbd2cSJim Jagielski             dumpDec< sal_uInt16 >( "top-style", "BORDERSTYLES" );
1031*b1cdbd2cSJim Jagielski             dumpColor( "top-color" );
1032*b1cdbd2cSJim Jagielski             dumpDec< sal_uInt16 >( "bottom-style", "BORDERSTYLES" );
1033*b1cdbd2cSJim Jagielski             dumpColor( "bottom-color" );
1034*b1cdbd2cSJim Jagielski             dumpDec< sal_uInt16 >( "left-style", "BORDERSTYLES" );
1035*b1cdbd2cSJim Jagielski             dumpColor( "left-color" );
1036*b1cdbd2cSJim Jagielski             dumpDec< sal_uInt16 >( "right-style", "BORDERSTYLES" );
1037*b1cdbd2cSJim Jagielski             dumpColor( "right-color" );
1038*b1cdbd2cSJim Jagielski             dumpDec< sal_uInt16 >( "diag-style", "BORDERSTYLES" );
1039*b1cdbd2cSJim Jagielski             dumpColor( "diag-color" );
1040*b1cdbd2cSJim Jagielski         break;
1041*b1cdbd2cSJim Jagielski 
1042*b1cdbd2cSJim Jagielski         case BIFF12_ID_BRK:
1043*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "id" );
1044*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "min" );
1045*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "max" );
1046*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "manual-break", "BOOLEAN" );
1047*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "pivot-break", "BOOLEAN" );
1048*b1cdbd2cSJim Jagielski         break;
1049*b1cdbd2cSJim Jagielski 
1050*b1cdbd2cSJim Jagielski         case BIFF12_ID_CALCPR:
1051*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "calc-id" );
1052*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "calc-mode", "CALCPR-CALCMODE" );
1053*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "iteration-count" );
1054*b1cdbd2cSJim Jagielski             dumpDec< double >( "iteration-delta" );
1055*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "processor-count" );
1056*b1cdbd2cSJim Jagielski             dumpHex< sal_uInt16 >( "flags", "CALCPR-FLAGS" );
1057*b1cdbd2cSJim Jagielski         break;
1058*b1cdbd2cSJim Jagielski 
1059*b1cdbd2cSJim Jagielski         case BIFF12_ID_CELL_BLANK:
1060*b1cdbd2cSJim Jagielski             dumpCellHeader( true );
1061*b1cdbd2cSJim Jagielski         break;
1062*b1cdbd2cSJim Jagielski 
1063*b1cdbd2cSJim Jagielski         case BIFF12_ID_CELL_BOOL:
1064*b1cdbd2cSJim Jagielski             dumpCellHeader( true );
1065*b1cdbd2cSJim Jagielski             dumpBoolean();
1066*b1cdbd2cSJim Jagielski         break;
1067*b1cdbd2cSJim Jagielski 
1068*b1cdbd2cSJim Jagielski         case BIFF12_ID_CELL_DOUBLE:
1069*b1cdbd2cSJim Jagielski             dumpCellHeader( true );
1070*b1cdbd2cSJim Jagielski             dumpDec< double >( "value" );
1071*b1cdbd2cSJim Jagielski         break;
1072*b1cdbd2cSJim Jagielski 
1073*b1cdbd2cSJim Jagielski         case BIFF12_ID_CELL_ERROR:
1074*b1cdbd2cSJim Jagielski             dumpCellHeader( true );
1075*b1cdbd2cSJim Jagielski             dumpErrorCode();
1076*b1cdbd2cSJim Jagielski         break;
1077*b1cdbd2cSJim Jagielski 
1078*b1cdbd2cSJim Jagielski         case BIFF12_ID_CELL_RK:
1079*b1cdbd2cSJim Jagielski             dumpCellHeader( true );
1080*b1cdbd2cSJim Jagielski             dumpRk( "value" );
1081*b1cdbd2cSJim Jagielski         break;
1082*b1cdbd2cSJim Jagielski 
1083*b1cdbd2cSJim Jagielski         case BIFF12_ID_CELL_RSTRING:
1084*b1cdbd2cSJim Jagielski             dumpCellHeader( true );
1085*b1cdbd2cSJim Jagielski             dumpString( "value", true );
1086*b1cdbd2cSJim Jagielski         break;
1087*b1cdbd2cSJim Jagielski 
1088*b1cdbd2cSJim Jagielski         case BIFF12_ID_CELL_SI:
1089*b1cdbd2cSJim Jagielski             dumpCellHeader( true );
1090*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "string-id" );
1091*b1cdbd2cSJim Jagielski         break;
1092*b1cdbd2cSJim Jagielski 
1093*b1cdbd2cSJim Jagielski         case BIFF12_ID_CELL_STRING:
1094*b1cdbd2cSJim Jagielski             dumpCellHeader( true );
1095*b1cdbd2cSJim Jagielski             dumpString( "value" );
1096*b1cdbd2cSJim Jagielski         break;
1097*b1cdbd2cSJim Jagielski 
1098*b1cdbd2cSJim Jagielski         case BIFF12_ID_CELLSTYLE:
1099*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "xf-id" );
1100*b1cdbd2cSJim Jagielski             dumpHex< sal_uInt16 >( "flags", "CELLSTYLE-FLAGS" );
1101*b1cdbd2cSJim Jagielski             dumpDec< sal_uInt8 >( "builtin-id", "CELLSTYLE-BUILTIN" );
1102*b1cdbd2cSJim Jagielski             dumpDec< sal_uInt8 >( "outline-level" );
1103*b1cdbd2cSJim Jagielski             dumpString( "name" );
1104*b1cdbd2cSJim Jagielski         break;
1105*b1cdbd2cSJim Jagielski 
1106*b1cdbd2cSJim Jagielski         case BIFF12_ID_CFCOLOR:
1107*b1cdbd2cSJim Jagielski             dumpColor();
1108*b1cdbd2cSJim Jagielski         break;
1109*b1cdbd2cSJim Jagielski 
1110*b1cdbd2cSJim Jagielski         case BIFF12_ID_CFRULE:
1111*b1cdbd2cSJim Jagielski         {
1112*b1cdbd2cSJim Jagielski             // type/subtype/operator is a mess...
1113*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "type", "CFRULE-TYPE" );
1114*b1cdbd2cSJim Jagielski             sal_Int32 nSubType = dumpDec< sal_Int32 >( "sub-type", "CFRULE-SUBTYPE" );
1115*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "dxf-id" );
1116*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "priority" );
1117*b1cdbd2cSJim Jagielski             switch( nSubType )
1118*b1cdbd2cSJim Jagielski             {
1119*b1cdbd2cSJim Jagielski                 case 0:     dumpDec< sal_Int32 >( "operator", "CFRULE-CELL-OPERATOR" ); break;
1120*b1cdbd2cSJim Jagielski                 case 5:     dumpDec< sal_Int32 >( "rank" );                             break;
1121*b1cdbd2cSJim Jagielski                 case 8:     dumpDec< sal_Int32 >( "operator", "CFRULE-TEXT-OPERATOR" ); break;
1122*b1cdbd2cSJim Jagielski                 case 15:    dumpDec< sal_Int32 >( "operator", "CFRULE-DATE-OPERATOR" ); break;
1123*b1cdbd2cSJim Jagielski                 case 16:    dumpDec< sal_Int32 >( "operator", "CFRULE-DATE-OPERATOR" ); break;
1124*b1cdbd2cSJim Jagielski                 case 17:    dumpDec< sal_Int32 >( "operator", "CFRULE-DATE-OPERATOR" ); break;
1125*b1cdbd2cSJim Jagielski                 case 18:    dumpDec< sal_Int32 >( "operator", "CFRULE-DATE-OPERATOR" ); break;
1126*b1cdbd2cSJim Jagielski                 case 19:    dumpDec< sal_Int32 >( "operator", "CFRULE-DATE-OPERATOR" ); break;
1127*b1cdbd2cSJim Jagielski                 case 20:    dumpDec< sal_Int32 >( "operator", "CFRULE-DATE-OPERATOR" ); break;
1128*b1cdbd2cSJim Jagielski                 case 21:    dumpDec< sal_Int32 >( "operator", "CFRULE-DATE-OPERATOR" ); break;
1129*b1cdbd2cSJim Jagielski                 case 22:    dumpDec< sal_Int32 >( "operator", "CFRULE-DATE-OPERATOR" ); break;
1130*b1cdbd2cSJim Jagielski                 case 23:    dumpDec< sal_Int32 >( "operator", "CFRULE-DATE-OPERATOR" ); break;
1131*b1cdbd2cSJim Jagielski                 case 24:    dumpDec< sal_Int32 >( "operator", "CFRULE-DATE-OPERATOR" ); break;
1132*b1cdbd2cSJim Jagielski                 case 25:    dumpDec< sal_Int32 >( "std-dev" );                          break;
1133*b1cdbd2cSJim Jagielski                 case 26:    dumpDec< sal_Int32 >( "std-dev" );                          break;
1134*b1cdbd2cSJim Jagielski                 case 29:    dumpDec< sal_Int32 >( "std-dev" );                          break;
1135*b1cdbd2cSJim Jagielski                 case 30:    dumpDec< sal_Int32 >( "std-dev" );                          break;
1136*b1cdbd2cSJim Jagielski                 default:    dumpDec< sal_Int32 >( "operator", "CFRULE-OTHER-OPERATOR" );
1137*b1cdbd2cSJim Jagielski             }
1138*b1cdbd2cSJim Jagielski             dumpUnknown( 8 );
1139*b1cdbd2cSJim Jagielski             dumpHex< sal_uInt16 >( "flags", "CFRULE-FLAGS" );
1140*b1cdbd2cSJim Jagielski             // for no obvious reason the formula sizes occur twice
1141*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "formula1-size" );
1142*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "formula2-size" );
1143*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "formula3-size" );
1144*b1cdbd2cSJim Jagielski             dumpString( "text" );
1145*b1cdbd2cSJim Jagielski             if( mxStrm->getRemaining() >= 8 )
1146*b1cdbd2cSJim Jagielski                 mxFmlaObj->dumpNameFormula( "formula1" );
1147*b1cdbd2cSJim Jagielski             if( mxStrm->getRemaining() >= 8 )
1148*b1cdbd2cSJim Jagielski                 mxFmlaObj->dumpNameFormula( "formula2" );
1149*b1cdbd2cSJim Jagielski             if( mxStrm->getRemaining() >= 8 )
1150*b1cdbd2cSJim Jagielski                 mxFmlaObj->dumpNameFormula( "formula3" );
1151*b1cdbd2cSJim Jagielski         }
1152*b1cdbd2cSJim Jagielski         break;
1153*b1cdbd2cSJim Jagielski 
1154*b1cdbd2cSJim Jagielski         case BIFF12_ID_CHARTPAGESETUP:
1155*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "paper-size", "PAGESETUP-PAPERSIZE" );
1156*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "horizontal-res", "PAGESETUP-DPI" );
1157*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "vertical-res", "PAGESETUP-DPI" );
1158*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "copies" );
1159*b1cdbd2cSJim Jagielski             dumpDec< sal_uInt16 >( "first-page" );
1160*b1cdbd2cSJim Jagielski             dumpHex< sal_uInt16 >( "flags", "CHARTPAGESETUP-FLAGS" );
1161*b1cdbd2cSJim Jagielski             dumpString( "printer-settings-rel-id" );
1162*b1cdbd2cSJim Jagielski         break;
1163*b1cdbd2cSJim Jagielski 
1164*b1cdbd2cSJim Jagielski         case BIFF12_ID_CHARTPROTECTION:
1165*b1cdbd2cSJim Jagielski             dumpHex< sal_uInt16 >( "password-hash" );
1166*b1cdbd2cSJim Jagielski             // no flags field for the boolean flags?!?
1167*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "content-locked", "BOOLEAN" );
1168*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "objects-locked", "BOOLEAN" );
1169*b1cdbd2cSJim Jagielski         break;
1170*b1cdbd2cSJim Jagielski 
1171*b1cdbd2cSJim Jagielski         case BIFF12_ID_CHARTSHEETPR:
1172*b1cdbd2cSJim Jagielski             dumpHex< sal_uInt16 >( "flags", "CHARTSHEETPR-FLAGS" );
1173*b1cdbd2cSJim Jagielski             dumpColor( "tab-color" );
1174*b1cdbd2cSJim Jagielski             dumpString( "codename" );
1175*b1cdbd2cSJim Jagielski         break;
1176*b1cdbd2cSJim Jagielski 
1177*b1cdbd2cSJim Jagielski         case BIFF12_ID_CHARTSHEETVIEW:
1178*b1cdbd2cSJim Jagielski             dumpHex< sal_uInt16 >( "flags", "CHARTSHEETVIEW-FLAGS" );
1179*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "zoom-scale", "CONV-PERCENT" );
1180*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "workbookview-id" );
1181*b1cdbd2cSJim Jagielski         break;
1182*b1cdbd2cSJim Jagielski 
1183*b1cdbd2cSJim Jagielski         case BIFF12_ID_COL:
1184*b1cdbd2cSJim Jagielski             dumpColRange();
1185*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "col-width", "CONV-COLWIDTH" );
1186*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "custom-xf-id" );
1187*b1cdbd2cSJim Jagielski             dumpHex< sal_uInt16 >( "flags", "COL-FLAGS" );
1188*b1cdbd2cSJim Jagielski         break;
1189*b1cdbd2cSJim Jagielski 
1190*b1cdbd2cSJim Jagielski         case BIFF12_ID_COLBREAKS:
1191*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "count" );
1192*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "manual-count" );
1193*b1cdbd2cSJim Jagielski         break;
1194*b1cdbd2cSJim Jagielski 
1195*b1cdbd2cSJim Jagielski         case BIFF12_ID_COLOR:
1196*b1cdbd2cSJim Jagielski             dumpColor();
1197*b1cdbd2cSJim Jagielski         break;
1198*b1cdbd2cSJim Jagielski 
1199*b1cdbd2cSJim Jagielski         case BIFF12_ID_COMMENT:
1200*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "author-id" );
1201*b1cdbd2cSJim Jagielski             dumpRange( "ref" );
1202*b1cdbd2cSJim Jagielski             dumpGuid();
1203*b1cdbd2cSJim Jagielski         break;
1204*b1cdbd2cSJim Jagielski 
1205*b1cdbd2cSJim Jagielski         case BIFF12_ID_COMMENTAUTHOR:
1206*b1cdbd2cSJim Jagielski             dumpString( "author" );
1207*b1cdbd2cSJim Jagielski         break;
1208*b1cdbd2cSJim Jagielski 
1209*b1cdbd2cSJim Jagielski         case BIFF12_ID_COMMENTTEXT:
1210*b1cdbd2cSJim Jagielski             dumpString( "text", true );
1211*b1cdbd2cSJim Jagielski         break;
1212*b1cdbd2cSJim Jagielski 
1213*b1cdbd2cSJim Jagielski         case BIFF12_ID_CONDFORMATTING:
1214*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "cfrule-count" );
1215*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "pivot-table", "BOOLEAN" );
1216*b1cdbd2cSJim Jagielski             dumpRangeList();
1217*b1cdbd2cSJim Jagielski         break;
1218*b1cdbd2cSJim Jagielski 
1219*b1cdbd2cSJim Jagielski         case BIFF12_ID_CONNECTION:
1220*b1cdbd2cSJim Jagielski         {
1221*b1cdbd2cSJim Jagielski             dumpDec< sal_uInt8 >( "refreshed-version" );
1222*b1cdbd2cSJim Jagielski             dumpDec< sal_uInt8 >( "min-refresh-version" );
1223*b1cdbd2cSJim Jagielski             dumpDec< sal_uInt8 >( "save-password", "CONNECTION-SAVEPASSWORD" );
1224*b1cdbd2cSJim Jagielski             dumpUnused( 1 );
1225*b1cdbd2cSJim Jagielski             dumpDec< sal_uInt16 >( "refresh-interval", "CONNECTION-INTERVAL" );
1226*b1cdbd2cSJim Jagielski             dumpHex< sal_uInt16 >( "flags", "CONNECTION-FLAGS" );
1227*b1cdbd2cSJim Jagielski             sal_uInt16 nStrFlags = dumpHex< sal_uInt16 >( "string-flags", "CONNECTION-STRINGFLAGS" );
1228*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "data-source-type", "CONNECTION-SOURCETYPE" );
1229*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "reconnect-type", "CONNECTION-RECONNECTTYPE" );
1230*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "id" );
1231*b1cdbd2cSJim Jagielski             dumpDec< sal_uInt8 >( "credentials", "CONNECTION-CREDENTIALS" );
1232*b1cdbd2cSJim Jagielski             if( nStrFlags & 0x0001 ) dumpString( "source-file" );
1233*b1cdbd2cSJim Jagielski             if( nStrFlags & 0x0002 ) dumpString( "source-conn-file" );
1234*b1cdbd2cSJim Jagielski             if( nStrFlags & 0x0004 ) dumpString( "description" );
1235*b1cdbd2cSJim Jagielski             if( nStrFlags & 0x0008 ) dumpString( "name" );
1236*b1cdbd2cSJim Jagielski             if( nStrFlags & 0x0010 ) dumpString( "sso-id" );
1237*b1cdbd2cSJim Jagielski         }
1238*b1cdbd2cSJim Jagielski         break;
1239*b1cdbd2cSJim Jagielski 
1240*b1cdbd2cSJim Jagielski         case BIFF12_ID_CONTROL:
1241*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "shape-id" );
1242*b1cdbd2cSJim Jagielski             dumpString( "rel-id" );
1243*b1cdbd2cSJim Jagielski             dumpString( "name" );
1244*b1cdbd2cSJim Jagielski         break;
1245*b1cdbd2cSJim Jagielski 
1246*b1cdbd2cSJim Jagielski         case BIFF12_ID_CUSTOMFILTER:
1247*b1cdbd2cSJim Jagielski         {
1248*b1cdbd2cSJim Jagielski             sal_uInt8 nType = dumpDec< sal_uInt8 >( "data-type", "CUSTOMFILTER-DATATYPE" );
1249*b1cdbd2cSJim Jagielski             dumpDec< sal_uInt8 >( "operator", "CUSTOMFILTER-OPERATOR" );
1250*b1cdbd2cSJim Jagielski             switch( nType )
1251*b1cdbd2cSJim Jagielski             {
1252*b1cdbd2cSJim Jagielski                 case 4:     dumpDec< double >( "value" );               break;
1253*b1cdbd2cSJim Jagielski                 case 6:     dumpUnused( 8 ); dumpString( "value" );     break;
1254*b1cdbd2cSJim Jagielski                 case 8:     dumpBoolean( "value" ); dumpUnused( 7 );    break;
1255*b1cdbd2cSJim Jagielski                 default:    dumpUnused( 8 );
1256*b1cdbd2cSJim Jagielski             }
1257*b1cdbd2cSJim Jagielski         }
1258*b1cdbd2cSJim Jagielski         break;
1259*b1cdbd2cSJim Jagielski 
1260*b1cdbd2cSJim Jagielski         case BIFF12_ID_DATATABLE:
1261*b1cdbd2cSJim Jagielski             dumpRange( "table-range" );
1262*b1cdbd2cSJim Jagielski             dumpAddress( "ref1" );
1263*b1cdbd2cSJim Jagielski             dumpAddress( "ref2" );
1264*b1cdbd2cSJim Jagielski             dumpHex< sal_uInt8 >( "flags", "DATATABLE-FLAGS" );
1265*b1cdbd2cSJim Jagielski         break;
1266*b1cdbd2cSJim Jagielski 
1267*b1cdbd2cSJim Jagielski         case BIFF12_ID_DATAVALIDATION:
1268*b1cdbd2cSJim Jagielski             dumpHex< sal_uInt32 >( "flags", "DATAVALIDATION-FLAGS" );
1269*b1cdbd2cSJim Jagielski             dumpRangeList();
1270*b1cdbd2cSJim Jagielski             dumpString( "error-title" );
1271*b1cdbd2cSJim Jagielski             dumpString( "error-message" );
1272*b1cdbd2cSJim Jagielski             dumpString( "input-title" );
1273*b1cdbd2cSJim Jagielski             dumpString( "input-message" );
1274*b1cdbd2cSJim Jagielski             mxFmlaObj->dumpNameFormula( "formula1" );
1275*b1cdbd2cSJim Jagielski             mxFmlaObj->dumpNameFormula( "formula2" );
1276*b1cdbd2cSJim Jagielski         break;
1277*b1cdbd2cSJim Jagielski 
1278*b1cdbd2cSJim Jagielski         case BIFF12_ID_DATAVALIDATIONS:
1279*b1cdbd2cSJim Jagielski             dumpHex< sal_uInt16 >( "flags", "DATAVALIDATIONS-FLAGS" );
1280*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "input-x" );
1281*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "input-y" );
1282*b1cdbd2cSJim Jagielski             dumpUnused( 4 );
1283*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "count" );
1284*b1cdbd2cSJim Jagielski         break;
1285*b1cdbd2cSJim Jagielski 
1286*b1cdbd2cSJim Jagielski         case BIFF12_ID_DDEITEMVALUES:
1287*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "rows" );
1288*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "columns" );
1289*b1cdbd2cSJim Jagielski         break;
1290*b1cdbd2cSJim Jagielski 
1291*b1cdbd2cSJim Jagielski         case BIFF12_ID_DDEITEM_STRING:
1292*b1cdbd2cSJim Jagielski             dumpString( "value" );
1293*b1cdbd2cSJim Jagielski         break;
1294*b1cdbd2cSJim Jagielski 
1295*b1cdbd2cSJim Jagielski         case BIFF12_ID_DEFINEDNAME:
1296*b1cdbd2cSJim Jagielski             dumpHex< sal_uInt32 >( "flags", "DEFINEDNAME-FLAGS" );
1297*b1cdbd2cSJim Jagielski             dumpChar( "accelerator", RTL_TEXTENCODING_ISO_8859_1 );
1298*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "sheet-id", "DEFINEDNAME-SHEETID" );
1299*b1cdbd2cSJim Jagielski             dumpString( "name" );
1300*b1cdbd2cSJim Jagielski             mxFmlaObj->dumpNameFormula();
1301*b1cdbd2cSJim Jagielski             dumpString( "comment" );
1302*b1cdbd2cSJim Jagielski             if( mxStrm->getRemaining() >= 4 ) dumpString( "menu-text" );
1303*b1cdbd2cSJim Jagielski             if( mxStrm->getRemaining() >= 4 ) dumpString( "description-text" );
1304*b1cdbd2cSJim Jagielski             if( mxStrm->getRemaining() >= 4 ) dumpString( "help-text" );
1305*b1cdbd2cSJim Jagielski             if( mxStrm->getRemaining() >= 4 ) dumpString( "statusbar-text" );
1306*b1cdbd2cSJim Jagielski         break;
1307*b1cdbd2cSJim Jagielski 
1308*b1cdbd2cSJim Jagielski         case BIFF12_ID_DIMENSION:
1309*b1cdbd2cSJim Jagielski             dumpRange( "used-range" );
1310*b1cdbd2cSJim Jagielski         break;
1311*b1cdbd2cSJim Jagielski 
1312*b1cdbd2cSJim Jagielski         case BIFF12_ID_DISCRETEFILTER:
1313*b1cdbd2cSJim Jagielski             dumpString( "value" );
1314*b1cdbd2cSJim Jagielski         break;
1315*b1cdbd2cSJim Jagielski 
1316*b1cdbd2cSJim Jagielski         case BIFF12_ID_DISCRETEFILTERS:
1317*b1cdbd2cSJim Jagielski             dumpBool< sal_Int32 >( "show-blank" );
1318*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "calendar-type", "DISCRETEFILTERS-CALTYPE" );
1319*b1cdbd2cSJim Jagielski         break;
1320*b1cdbd2cSJim Jagielski 
1321*b1cdbd2cSJim Jagielski         case BIFF12_ID_DRAWING:
1322*b1cdbd2cSJim Jagielski             dumpString( "rel-id" );
1323*b1cdbd2cSJim Jagielski         break;
1324*b1cdbd2cSJim Jagielski 
1325*b1cdbd2cSJim Jagielski         case BIFF12_ID_DXF:
1326*b1cdbd2cSJim Jagielski             dumpHex< sal_uInt32 >( "flags", "DXF-FLAGS" );
1327*b1cdbd2cSJim Jagielski             for( sal_uInt16 nIndex = 0, nCount = dumpDec< sal_uInt16 >( "subrec-count" ); !mxStrm->isEof() && (nIndex < nCount); ++nIndex )
1328*b1cdbd2cSJim Jagielski             {
1329*b1cdbd2cSJim Jagielski                 mxOut->startMultiItems();
1330*b1cdbd2cSJim Jagielski                 sal_Int64 nStartPos = mxStrm->tell();
1331*b1cdbd2cSJim Jagielski                 writeEmptyItem( "SUBREC" );
1332*b1cdbd2cSJim Jagielski                 sal_uInt16 nSubRecId = dumpDec< sal_uInt16 >( "id", "DXF-SUBREC" );
1333*b1cdbd2cSJim Jagielski                 sal_uInt16 nSubRecSize = dumpDec< sal_uInt16 >( "size" );
1334*b1cdbd2cSJim Jagielski                 sal_Int64 nEndPos = nStartPos + nSubRecSize;
1335*b1cdbd2cSJim Jagielski                 mxOut->endMultiItems();
1336*b1cdbd2cSJim Jagielski                 IndentGuard aIndGuard( mxOut );
1337*b1cdbd2cSJim Jagielski                 switch( nSubRecId )
1338*b1cdbd2cSJim Jagielski                 {
1339*b1cdbd2cSJim Jagielski                     case 0:
1340*b1cdbd2cSJim Jagielski                         dumpDec< sal_uInt8 >( "pattern", "FILLPATTERNS" );
1341*b1cdbd2cSJim Jagielski                     break;
1342*b1cdbd2cSJim Jagielski                     case 1: case 2: case 5:
1343*b1cdbd2cSJim Jagielski                         dumpColor();
1344*b1cdbd2cSJim Jagielski                     break;
1345*b1cdbd2cSJim Jagielski                     case 3:
1346*b1cdbd2cSJim Jagielski                         dumpGradientHead();
1347*b1cdbd2cSJim Jagielski                     break;
1348*b1cdbd2cSJim Jagielski                     case 4:
1349*b1cdbd2cSJim Jagielski                         dumpDec< sal_uInt16 >( "index" );
1350*b1cdbd2cSJim Jagielski                         dumpDec< double >( "stop-position" );
1351*b1cdbd2cSJim Jagielski                         dumpColor( "stop-color" );
1352*b1cdbd2cSJim Jagielski                     break;
1353*b1cdbd2cSJim Jagielski                     case 6: case 7: case 8: case 9: case 10: case 11: case 12:
1354*b1cdbd2cSJim Jagielski                         dumpColor( "color" );
1355*b1cdbd2cSJim Jagielski                         dumpDec< sal_uInt16 >( "style", "BORDERSTYLES" );
1356*b1cdbd2cSJim Jagielski                     break;
1357*b1cdbd2cSJim Jagielski                     case 13: case 14:
1358*b1cdbd2cSJim Jagielski                         dumpBoolean( "value" );
1359*b1cdbd2cSJim Jagielski                     break;
1360*b1cdbd2cSJim Jagielski                     case 15:
1361*b1cdbd2cSJim Jagielski                         dumpDec< sal_uInt8 >( "alignment", "XF-HORALIGN" );
1362*b1cdbd2cSJim Jagielski                     break;
1363*b1cdbd2cSJim Jagielski                     case 16:
1364*b1cdbd2cSJim Jagielski                         dumpDec< sal_uInt8 >( "alignment", "XF-VERALIGN" );
1365*b1cdbd2cSJim Jagielski                     break;
1366*b1cdbd2cSJim Jagielski                     case 17:
1367*b1cdbd2cSJim Jagielski                         dumpDec< sal_uInt8 >( "rotation", "TEXTROTATION" );
1368*b1cdbd2cSJim Jagielski                     break;
1369*b1cdbd2cSJim Jagielski                     case 18:
1370*b1cdbd2cSJim Jagielski                         dumpDec< sal_uInt16 >( "indent" );
1371*b1cdbd2cSJim Jagielski                     break;
1372*b1cdbd2cSJim Jagielski                     case 19:
1373*b1cdbd2cSJim Jagielski                         dumpDec< sal_uInt8 >( "text-dir", "XF-TEXTDIRECTION" );
1374*b1cdbd2cSJim Jagielski                     break;
1375*b1cdbd2cSJim Jagielski                     case 20: case 21: case 22:
1376*b1cdbd2cSJim Jagielski                         dumpBoolean( "value" );
1377*b1cdbd2cSJim Jagielski                     break;
1378*b1cdbd2cSJim Jagielski                     case 24:
1379*b1cdbd2cSJim Jagielski                         dumpString( "name", false, false );
1380*b1cdbd2cSJim Jagielski                     break;
1381*b1cdbd2cSJim Jagielski                     case 25:
1382*b1cdbd2cSJim Jagielski                         dumpDec< sal_uInt16 >( "weight", "FONT-WEIGHT" );
1383*b1cdbd2cSJim Jagielski                     break;
1384*b1cdbd2cSJim Jagielski                     case 26:
1385*b1cdbd2cSJim Jagielski                         dumpDec< sal_uInt16 >( "underline", "FONT-UNDERLINE" );
1386*b1cdbd2cSJim Jagielski                     break;
1387*b1cdbd2cSJim Jagielski                     case 27:
1388*b1cdbd2cSJim Jagielski                         dumpDec< sal_uInt16 >( "escapement", "FONT-ESCAPEMENT" );
1389*b1cdbd2cSJim Jagielski                     break;
1390*b1cdbd2cSJim Jagielski                     case 28: case 29: case 30: case 31: case 32: case 33:
1391*b1cdbd2cSJim Jagielski                         dumpBoolean( "value" );
1392*b1cdbd2cSJim Jagielski                     break;
1393*b1cdbd2cSJim Jagielski                     case 34:
1394*b1cdbd2cSJim Jagielski                         dumpDec< sal_uInt8 >( "charset", "CHARSET" );
1395*b1cdbd2cSJim Jagielski                     break;
1396*b1cdbd2cSJim Jagielski                     case 35:
1397*b1cdbd2cSJim Jagielski                         dumpDec< sal_uInt8 >( "family", "FONT-FAMILY" );
1398*b1cdbd2cSJim Jagielski                     break;
1399*b1cdbd2cSJim Jagielski                     case 36:
1400*b1cdbd2cSJim Jagielski                         dumpDec< sal_Int32 >( "height", "CONV-TWIP-TO-PT" );
1401*b1cdbd2cSJim Jagielski                     break;
1402*b1cdbd2cSJim Jagielski                     case 37:
1403*b1cdbd2cSJim Jagielski                         dumpDec< sal_uInt8 >( "scheme", "FONT-SCHEME" );
1404*b1cdbd2cSJim Jagielski                     break;
1405*b1cdbd2cSJim Jagielski                     case 38:
1406*b1cdbd2cSJim Jagielski                         dumpString( "numfmt", false, false );
1407*b1cdbd2cSJim Jagielski                     break;
1408*b1cdbd2cSJim Jagielski                     case 41:
1409*b1cdbd2cSJim Jagielski                         dumpDec< sal_uInt16 >( "numfmt-id" );
1410*b1cdbd2cSJim Jagielski                     break;
1411*b1cdbd2cSJim Jagielski                     case 42:
1412*b1cdbd2cSJim Jagielski                         dumpDec< sal_Int16 >( "relative-indent" );
1413*b1cdbd2cSJim Jagielski                     break;
1414*b1cdbd2cSJim Jagielski                     case 43: case 44:
1415*b1cdbd2cSJim Jagielski                         dumpBoolean( "value" );
1416*b1cdbd2cSJim Jagielski                     break;
1417*b1cdbd2cSJim Jagielski                 }
1418*b1cdbd2cSJim Jagielski                 dumpRemainingTo( nEndPos );
1419*b1cdbd2cSJim Jagielski             }
1420*b1cdbd2cSJim Jagielski         break;
1421*b1cdbd2cSJim Jagielski 
1422*b1cdbd2cSJim Jagielski         case BIFF12_ID_EXTCELL_BOOL:
1423*b1cdbd2cSJim Jagielski             dumpColIndex();
1424*b1cdbd2cSJim Jagielski             dumpBoolean();
1425*b1cdbd2cSJim Jagielski         break;
1426*b1cdbd2cSJim Jagielski 
1427*b1cdbd2cSJim Jagielski         case BIFF12_ID_EXTCELL_DOUBLE:
1428*b1cdbd2cSJim Jagielski             dumpColIndex();
1429*b1cdbd2cSJim Jagielski             dumpDec< double >( "value" );
1430*b1cdbd2cSJim Jagielski         break;
1431*b1cdbd2cSJim Jagielski 
1432*b1cdbd2cSJim Jagielski         case BIFF12_ID_EXTCELL_ERROR:
1433*b1cdbd2cSJim Jagielski             dumpColIndex();
1434*b1cdbd2cSJim Jagielski             dumpErrorCode();
1435*b1cdbd2cSJim Jagielski         break;
1436*b1cdbd2cSJim Jagielski 
1437*b1cdbd2cSJim Jagielski         case BIFF12_ID_EXTCELL_STRING:
1438*b1cdbd2cSJim Jagielski             dumpColIndex();
1439*b1cdbd2cSJim Jagielski             dumpString( "value" );
1440*b1cdbd2cSJim Jagielski         break;
1441*b1cdbd2cSJim Jagielski 
1442*b1cdbd2cSJim Jagielski         case BIFF12_ID_EXTERNALBOOK:
1443*b1cdbd2cSJim Jagielski             switch( dumpDec< sal_uInt16 >( "type", "EXTERNALBOOK-TYPE" ) )
1444*b1cdbd2cSJim Jagielski             {
1445*b1cdbd2cSJim Jagielski                 case 0:
1446*b1cdbd2cSJim Jagielski                     dumpString( "rel-id" );
1447*b1cdbd2cSJim Jagielski                     dumpDec< sal_Int32 >( "unused" );
1448*b1cdbd2cSJim Jagielski                 break;
1449*b1cdbd2cSJim Jagielski                 case 1:
1450*b1cdbd2cSJim Jagielski                     dumpString( "dde-service" );
1451*b1cdbd2cSJim Jagielski                     dumpString( "dde-topic" );
1452*b1cdbd2cSJim Jagielski                 break;
1453*b1cdbd2cSJim Jagielski                 case 2:
1454*b1cdbd2cSJim Jagielski                     dumpString( "rel-id" );
1455*b1cdbd2cSJim Jagielski                     dumpString( "prog-id" );
1456*b1cdbd2cSJim Jagielski                 break;
1457*b1cdbd2cSJim Jagielski             }
1458*b1cdbd2cSJim Jagielski         break;
1459*b1cdbd2cSJim Jagielski 
1460*b1cdbd2cSJim Jagielski         case BIFF12_ID_EXTERNALNAME:
1461*b1cdbd2cSJim Jagielski             dumpString( "name" );
1462*b1cdbd2cSJim Jagielski         break;
1463*b1cdbd2cSJim Jagielski 
1464*b1cdbd2cSJim Jagielski         case BIFF12_ID_EXTERNALNAMEFLAGS:
1465*b1cdbd2cSJim Jagielski             dumpHex< sal_uInt16 >( "flags", "EXTERNALNAMEFLAGS-FLAGS" );
1466*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "sheet-id" );
1467*b1cdbd2cSJim Jagielski             dumpBoolean( "is-dde-ole" );
1468*b1cdbd2cSJim Jagielski         break;
1469*b1cdbd2cSJim Jagielski 
1470*b1cdbd2cSJim Jagielski         case BIFF12_ID_EXTERNALREF:
1471*b1cdbd2cSJim Jagielski             dumpString( "rel-id" );
1472*b1cdbd2cSJim Jagielski         break;
1473*b1cdbd2cSJim Jagielski 
1474*b1cdbd2cSJim Jagielski         case BIFF12_ID_EXTERNALSHEETS:
1475*b1cdbd2cSJim Jagielski         {
1476*b1cdbd2cSJim Jagielski             sal_Int32 nCount = dumpDec< sal_Int32 >( "ref-count" );
1477*b1cdbd2cSJim Jagielski             TableGuard aTabGuard( mxOut, 13, 17, 24 );
1478*b1cdbd2cSJim Jagielski             mxOut->resetItemIndex();
1479*b1cdbd2cSJim Jagielski             for( sal_Int32 nRefId = 0; !mxStrm->isEof() && (nRefId < nCount); ++nRefId )
1480*b1cdbd2cSJim Jagielski             {
1481*b1cdbd2cSJim Jagielski                 MultiItemsGuard aMultiGuard( mxOut );
1482*b1cdbd2cSJim Jagielski                 writeEmptyItem( "#ref" );
1483*b1cdbd2cSJim Jagielski                 dumpDec< sal_Int32 >( "extref-id" );
1484*b1cdbd2cSJim Jagielski                 dumpDec< sal_Int32 >( "first-sheet", "EXTERNALSHEETS-ID" );
1485*b1cdbd2cSJim Jagielski                 dumpDec< sal_Int32 >( "last-sheet", "EXTERNALSHEETS-ID" );
1486*b1cdbd2cSJim Jagielski             }
1487*b1cdbd2cSJim Jagielski         }
1488*b1cdbd2cSJim Jagielski         break;
1489*b1cdbd2cSJim Jagielski 
1490*b1cdbd2cSJim Jagielski         case BIFF12_ID_EXTROW:
1491*b1cdbd2cSJim Jagielski             dumpRowIndex();
1492*b1cdbd2cSJim Jagielski         break;
1493*b1cdbd2cSJim Jagielski 
1494*b1cdbd2cSJim Jagielski         case BIFF12_ID_EXTSHEETDATA:
1495*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "sheet-id" );
1496*b1cdbd2cSJim Jagielski             dumpHex< sal_uInt8 >( "flags", "EXTSHEETDATA-FLAGS" );
1497*b1cdbd2cSJim Jagielski         break;
1498*b1cdbd2cSJim Jagielski 
1499*b1cdbd2cSJim Jagielski         case BIFF12_ID_EXTSHEETNAMES:
1500*b1cdbd2cSJim Jagielski             mxOut->resetItemIndex();
1501*b1cdbd2cSJim Jagielski             for( sal_Int32 nSheet = 0, nCount = dumpDec< sal_Int32 >( "sheet-count" ); !mxStrm->isEof() && (nSheet < nCount); ++nSheet )
1502*b1cdbd2cSJim Jagielski                 dumpString( "#sheet-name" );
1503*b1cdbd2cSJim Jagielski         break;
1504*b1cdbd2cSJim Jagielski 
1505*b1cdbd2cSJim Jagielski         case BIFF12_ID_FILESHARING:
1506*b1cdbd2cSJim Jagielski             dumpBool< sal_uInt16 >( "recommend-read-only" );
1507*b1cdbd2cSJim Jagielski             dumpHex< sal_uInt16 >( "password-hash" );
1508*b1cdbd2cSJim Jagielski             dumpString( "password-creator" );
1509*b1cdbd2cSJim Jagielski         break;
1510*b1cdbd2cSJim Jagielski 
1511*b1cdbd2cSJim Jagielski         case BIFF12_ID_FILL:
1512*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "fill-pattern", "FILLPATTERNS" );
1513*b1cdbd2cSJim Jagielski             dumpColor( "fg-color" );
1514*b1cdbd2cSJim Jagielski             dumpColor( "bg-color" );
1515*b1cdbd2cSJim Jagielski             dumpGradientHead();
1516*b1cdbd2cSJim Jagielski             mxOut->resetItemIndex();
1517*b1cdbd2cSJim Jagielski             for( sal_Int32 nStop = 0, nStopCount = dumpDec< sal_Int32 >( "stop-count" ); (nStop < nStopCount) && !mxStrm->isEof(); ++nStop )
1518*b1cdbd2cSJim Jagielski             {
1519*b1cdbd2cSJim Jagielski                 writeEmptyItem( "#stop" );
1520*b1cdbd2cSJim Jagielski                 IndentGuard aIndGuard( mxOut );
1521*b1cdbd2cSJim Jagielski                 dumpColor( "stop-color" );
1522*b1cdbd2cSJim Jagielski                 dumpDec< double >( "stop-position" );
1523*b1cdbd2cSJim Jagielski             }
1524*b1cdbd2cSJim Jagielski         break;
1525*b1cdbd2cSJim Jagielski 
1526*b1cdbd2cSJim Jagielski         case BIFF12_ID_FILEVERSION:
1527*b1cdbd2cSJim Jagielski             dumpGuid( "codename" );
1528*b1cdbd2cSJim Jagielski             dumpString( "app-name" );
1529*b1cdbd2cSJim Jagielski             dumpString( "last-edited" );
1530*b1cdbd2cSJim Jagielski             dumpString( "lowest-edited" );
1531*b1cdbd2cSJim Jagielski             dumpString( "build-version" );
1532*b1cdbd2cSJim Jagielski         break;
1533*b1cdbd2cSJim Jagielski 
1534*b1cdbd2cSJim Jagielski         case BIFF12_ID_FILTERCOLUMN:
1535*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "column-index" );
1536*b1cdbd2cSJim Jagielski             dumpHex< sal_uInt16 >( "flags", "FILTERCOLUMN-FLAGS" );
1537*b1cdbd2cSJim Jagielski         break;
1538*b1cdbd2cSJim Jagielski 
1539*b1cdbd2cSJim Jagielski         case BIFF12_ID_FONT:
1540*b1cdbd2cSJim Jagielski             dumpDec< sal_uInt16 >( "height", "CONV-TWIP-TO-PT" );
1541*b1cdbd2cSJim Jagielski             dumpHex< sal_uInt16 >( "flags", "FONT-FLAGS" );
1542*b1cdbd2cSJim Jagielski             dumpDec< sal_uInt16 >( "weight", "FONT-WEIGHT" );
1543*b1cdbd2cSJim Jagielski             dumpDec< sal_uInt16 >( "escapement", "FONT-ESCAPEMENT" );
1544*b1cdbd2cSJim Jagielski             dumpDec< sal_uInt8 >( "underline", "FONT-UNDERLINE" );
1545*b1cdbd2cSJim Jagielski             dumpDec< sal_uInt8 >( "family", "FONT-FAMILY" );
1546*b1cdbd2cSJim Jagielski             dumpDec< sal_uInt8 >( "charset", "CHARSET" );
1547*b1cdbd2cSJim Jagielski             dumpUnused( 1 );
1548*b1cdbd2cSJim Jagielski             dumpColor();
1549*b1cdbd2cSJim Jagielski             dumpDec< sal_uInt8 >( "scheme", "FONT-SCHEME" );
1550*b1cdbd2cSJim Jagielski             dumpString( "name" );
1551*b1cdbd2cSJim Jagielski         break;
1552*b1cdbd2cSJim Jagielski 
1553*b1cdbd2cSJim Jagielski         case BIFF12_ID_FORMULA_BOOL:
1554*b1cdbd2cSJim Jagielski             dumpCellHeader( true );
1555*b1cdbd2cSJim Jagielski             dumpBoolean();
1556*b1cdbd2cSJim Jagielski             dumpHex< sal_uInt16 >( "flags", "FORMULA-FLAGS" );
1557*b1cdbd2cSJim Jagielski             mxFmlaObj->dumpCellFormula();
1558*b1cdbd2cSJim Jagielski         break;
1559*b1cdbd2cSJim Jagielski 
1560*b1cdbd2cSJim Jagielski         case BIFF12_ID_FORMULA_DOUBLE:
1561*b1cdbd2cSJim Jagielski             dumpCellHeader( true );
1562*b1cdbd2cSJim Jagielski             dumpDec< double >( "value" );
1563*b1cdbd2cSJim Jagielski             dumpHex< sal_uInt16 >( "flags", "FORMULA-FLAGS" );
1564*b1cdbd2cSJim Jagielski             mxFmlaObj->dumpCellFormula();
1565*b1cdbd2cSJim Jagielski         break;
1566*b1cdbd2cSJim Jagielski 
1567*b1cdbd2cSJim Jagielski         case BIFF12_ID_FORMULA_ERROR:
1568*b1cdbd2cSJim Jagielski             dumpCellHeader( true );
1569*b1cdbd2cSJim Jagielski             dumpErrorCode();
1570*b1cdbd2cSJim Jagielski             dumpHex< sal_uInt16 >( "flags", "FORMULA-FLAGS" );
1571*b1cdbd2cSJim Jagielski             mxFmlaObj->dumpCellFormula();
1572*b1cdbd2cSJim Jagielski         break;
1573*b1cdbd2cSJim Jagielski 
1574*b1cdbd2cSJim Jagielski         case BIFF12_ID_FORMULA_STRING:
1575*b1cdbd2cSJim Jagielski             dumpCellHeader( true );
1576*b1cdbd2cSJim Jagielski             dumpString( "value" );
1577*b1cdbd2cSJim Jagielski             dumpHex< sal_uInt16 >( "flags", "FORMULA-FLAGS" );
1578*b1cdbd2cSJim Jagielski             mxFmlaObj->dumpCellFormula();
1579*b1cdbd2cSJim Jagielski         break;
1580*b1cdbd2cSJim Jagielski 
1581*b1cdbd2cSJim Jagielski         case BIFF12_ID_FUNCTIONGROUP:
1582*b1cdbd2cSJim Jagielski             dumpString( "name" );
1583*b1cdbd2cSJim Jagielski         break;
1584*b1cdbd2cSJim Jagielski 
1585*b1cdbd2cSJim Jagielski         case BIFF12_ID_HEADERFOOTER:
1586*b1cdbd2cSJim Jagielski             dumpHex< sal_uInt16 >( "flags", "HEADERFOOTER-FLAGS" );
1587*b1cdbd2cSJim Jagielski             dumpString( "odd-header" );
1588*b1cdbd2cSJim Jagielski             dumpString( "odd-footer" );
1589*b1cdbd2cSJim Jagielski             dumpString( "even-header" );
1590*b1cdbd2cSJim Jagielski             dumpString( "even-footer" );
1591*b1cdbd2cSJim Jagielski             dumpString( "first-header" );
1592*b1cdbd2cSJim Jagielski             dumpString( "first-footer" );
1593*b1cdbd2cSJim Jagielski         break;
1594*b1cdbd2cSJim Jagielski 
1595*b1cdbd2cSJim Jagielski         case BIFF12_ID_HYPERLINK:
1596*b1cdbd2cSJim Jagielski             dumpRange();
1597*b1cdbd2cSJim Jagielski             dumpString( "rel-id" );
1598*b1cdbd2cSJim Jagielski             dumpString( "location" );
1599*b1cdbd2cSJim Jagielski             dumpString( "tooltip" );
1600*b1cdbd2cSJim Jagielski             dumpString( "display" );
1601*b1cdbd2cSJim Jagielski         break;
1602*b1cdbd2cSJim Jagielski 
1603*b1cdbd2cSJim Jagielski         case BIFF12_ID_INPUTCELLS:
1604*b1cdbd2cSJim Jagielski             dumpAddress( "pos" );
1605*b1cdbd2cSJim Jagielski             dumpUnused( 8 );
1606*b1cdbd2cSJim Jagielski             dumpDec< sal_uInt16 >( "numfmt-id" );
1607*b1cdbd2cSJim Jagielski             dumpString( "value" );
1608*b1cdbd2cSJim Jagielski         break;
1609*b1cdbd2cSJim Jagielski 
1610*b1cdbd2cSJim Jagielski         case BIFF12_ID_LEGACYDRAWING:
1611*b1cdbd2cSJim Jagielski             dumpString( "rel-id" );
1612*b1cdbd2cSJim Jagielski         break;
1613*b1cdbd2cSJim Jagielski 
1614*b1cdbd2cSJim Jagielski         case BIFF12_ID_MERGECELL:
1615*b1cdbd2cSJim Jagielski             dumpRange();
1616*b1cdbd2cSJim Jagielski         break;
1617*b1cdbd2cSJim Jagielski 
1618*b1cdbd2cSJim Jagielski         case BIFF12_ID_MULTCELL_BLANK:
1619*b1cdbd2cSJim Jagielski             dumpCellHeader( false );
1620*b1cdbd2cSJim Jagielski         break;
1621*b1cdbd2cSJim Jagielski 
1622*b1cdbd2cSJim Jagielski         case BIFF12_ID_MULTCELL_BOOL:
1623*b1cdbd2cSJim Jagielski             dumpCellHeader( false );
1624*b1cdbd2cSJim Jagielski             dumpBoolean();
1625*b1cdbd2cSJim Jagielski         break;
1626*b1cdbd2cSJim Jagielski 
1627*b1cdbd2cSJim Jagielski         case BIFF12_ID_MULTCELL_DOUBLE:
1628*b1cdbd2cSJim Jagielski             dumpCellHeader( false );
1629*b1cdbd2cSJim Jagielski             dumpDec< double >( "value" );
1630*b1cdbd2cSJim Jagielski         break;
1631*b1cdbd2cSJim Jagielski 
1632*b1cdbd2cSJim Jagielski         case BIFF12_ID_MULTCELL_ERROR:
1633*b1cdbd2cSJim Jagielski             dumpCellHeader( false );
1634*b1cdbd2cSJim Jagielski             dumpErrorCode();
1635*b1cdbd2cSJim Jagielski         break;
1636*b1cdbd2cSJim Jagielski 
1637*b1cdbd2cSJim Jagielski         case BIFF12_ID_MULTCELL_RK:
1638*b1cdbd2cSJim Jagielski             dumpCellHeader( false );
1639*b1cdbd2cSJim Jagielski             dumpRk( "value" );
1640*b1cdbd2cSJim Jagielski         break;
1641*b1cdbd2cSJim Jagielski 
1642*b1cdbd2cSJim Jagielski         case BIFF12_ID_MULTCELL_RSTRING:
1643*b1cdbd2cSJim Jagielski             dumpCellHeader( false );
1644*b1cdbd2cSJim Jagielski             dumpString( "value", true );
1645*b1cdbd2cSJim Jagielski         break;
1646*b1cdbd2cSJim Jagielski 
1647*b1cdbd2cSJim Jagielski         case BIFF12_ID_MULTCELL_SI:
1648*b1cdbd2cSJim Jagielski             dumpCellHeader( false );
1649*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "string-id" );
1650*b1cdbd2cSJim Jagielski         break;
1651*b1cdbd2cSJim Jagielski 
1652*b1cdbd2cSJim Jagielski         case BIFF12_ID_MULTCELL_STRING:
1653*b1cdbd2cSJim Jagielski             dumpCellHeader( false );
1654*b1cdbd2cSJim Jagielski             dumpString( "value" );
1655*b1cdbd2cSJim Jagielski         break;
1656*b1cdbd2cSJim Jagielski 
1657*b1cdbd2cSJim Jagielski         case BIFF12_ID_NUMFMT:
1658*b1cdbd2cSJim Jagielski             dumpDec< sal_uInt16 >( "numfmt-id" );
1659*b1cdbd2cSJim Jagielski             dumpString( "format" );
1660*b1cdbd2cSJim Jagielski         break;
1661*b1cdbd2cSJim Jagielski 
1662*b1cdbd2cSJim Jagielski         case BIFF12_ID_OLEOBJECT:
1663*b1cdbd2cSJim Jagielski         {
1664*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "aspect", "OLEOBJECT-ASPECT" );
1665*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "update", "OLEOBJECT-UPDATE" );
1666*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "shape-id" );
1667*b1cdbd2cSJim Jagielski             sal_uInt16 nFlags = dumpHex< sal_uInt16 >( "flags", "OLEOBJECT-FLAGS" );
1668*b1cdbd2cSJim Jagielski             dumpString( "prog-id" );
1669*b1cdbd2cSJim Jagielski             if( getFlag( nFlags, BIFF12_OLEOBJECT_LINKED ) )
1670*b1cdbd2cSJim Jagielski                 mxFmlaObj->dumpNameFormula( "link" );
1671*b1cdbd2cSJim Jagielski             else
1672*b1cdbd2cSJim Jagielski                 dumpString( "rel-id" );
1673*b1cdbd2cSJim Jagielski         }
1674*b1cdbd2cSJim Jagielski         break;
1675*b1cdbd2cSJim Jagielski 
1676*b1cdbd2cSJim Jagielski         case BIFF12_ID_OLESIZE:
1677*b1cdbd2cSJim Jagielski             dumpRange( "visible-range" );
1678*b1cdbd2cSJim Jagielski         break;
1679*b1cdbd2cSJim Jagielski 
1680*b1cdbd2cSJim Jagielski         case BIFF12_ID_PAGEMARGINS:
1681*b1cdbd2cSJim Jagielski             dumpDec< double >( "left-margin" );
1682*b1cdbd2cSJim Jagielski             dumpDec< double >( "right-margin" );
1683*b1cdbd2cSJim Jagielski             dumpDec< double >( "top-margin" );
1684*b1cdbd2cSJim Jagielski             dumpDec< double >( "bottom-margin" );
1685*b1cdbd2cSJim Jagielski             dumpDec< double >( "header-margin" );
1686*b1cdbd2cSJim Jagielski             dumpDec< double >( "footer-margin" );
1687*b1cdbd2cSJim Jagielski         break;
1688*b1cdbd2cSJim Jagielski 
1689*b1cdbd2cSJim Jagielski         case BIFF12_ID_PAGESETUP:
1690*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "paper-size", "PAGESETUP-PAPERSIZE" );
1691*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "scaling", "CONV-PERCENT" );
1692*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "horizontal-res", "PAGESETUP-DPI" );
1693*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "vertical-res", "PAGESETUP-DPI" );
1694*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "copies" );
1695*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "first-page" );
1696*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "scale-to-width", "PAGESETUP-SCALETOPAGES" );
1697*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "scale-to-height", "PAGESETUP-SCALETOPAGES" );
1698*b1cdbd2cSJim Jagielski             dumpHex< sal_uInt16 >( "flags", "PAGESETUP-FLAGS" );
1699*b1cdbd2cSJim Jagielski             dumpString( "printer-settings-rel-id" );
1700*b1cdbd2cSJim Jagielski         break;
1701*b1cdbd2cSJim Jagielski 
1702*b1cdbd2cSJim Jagielski         case BIFF12_ID_PANE:
1703*b1cdbd2cSJim Jagielski             dumpDec< double >( "x-split-pos" );
1704*b1cdbd2cSJim Jagielski             dumpDec< double >( "y-split-pos" );
1705*b1cdbd2cSJim Jagielski             dumpAddress( "second-top-left" );
1706*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "active-pane", "PANE-ID" );
1707*b1cdbd2cSJim Jagielski             dumpHex< sal_uInt8 >( "flags", "PANE-FLAGS" );
1708*b1cdbd2cSJim Jagielski         break;
1709*b1cdbd2cSJim Jagielski 
1710*b1cdbd2cSJim Jagielski         case BIFF12_ID_PCDEFINITION:
1711*b1cdbd2cSJim Jagielski         {
1712*b1cdbd2cSJim Jagielski             dumpDec< sal_uInt8 >( "refreshed-version" );
1713*b1cdbd2cSJim Jagielski             dumpDec< sal_uInt8 >( "min-refresh-version" );
1714*b1cdbd2cSJim Jagielski             dumpDec< sal_uInt8 >( "created-version" );
1715*b1cdbd2cSJim Jagielski             dumpHex< sal_uInt8 >( "flags-1", "PCDEFINITION-FLAGS1" );
1716*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "missing-items-limit", "PCDEFINITION-MISSINGITEMS" );
1717*b1cdbd2cSJim Jagielski             dumpDec< double >( "refreshed-date" );
1718*b1cdbd2cSJim Jagielski             sal_uInt8 nFlags2 = dumpHex< sal_uInt8 >( "flags-2", "PCDEFINITION-FLAGS2" );
1719*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "record-count" );
1720*b1cdbd2cSJim Jagielski             if( nFlags2 & 0x01 ) dumpString( "refreshed-by" );
1721*b1cdbd2cSJim Jagielski             if( nFlags2 & 0x02 ) dumpString( "rel-id" );
1722*b1cdbd2cSJim Jagielski         }
1723*b1cdbd2cSJim Jagielski         break;
1724*b1cdbd2cSJim Jagielski 
1725*b1cdbd2cSJim Jagielski         case BIFF12_ID_PCDFIELD:
1726*b1cdbd2cSJim Jagielski         {
1727*b1cdbd2cSJim Jagielski             sal_uInt16 nFlags = dumpHex< sal_uInt16 >( "flags", "PCDFIELD-FLAGS" );
1728*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "numfmt-id" );
1729*b1cdbd2cSJim Jagielski             dumpDec< sal_Int16 >( "sql-datatype" );
1730*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "hierarchy" );
1731*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "hierarchy-level" );
1732*b1cdbd2cSJim Jagielski             sal_Int32 nMappingCount = dumpDec< sal_Int32 >( "property-mapping-count" );
1733*b1cdbd2cSJim Jagielski             dumpString( "name" );
1734*b1cdbd2cSJim Jagielski             if( nFlags & 0x0008 ) dumpString( "caption" );
1735*b1cdbd2cSJim Jagielski             if( nFlags & 0x0100 ) mxFmlaObj->dumpNameFormula( "formula" );
1736*b1cdbd2cSJim Jagielski             if( nMappingCount > 0 )
1737*b1cdbd2cSJim Jagielski             {
1738*b1cdbd2cSJim Jagielski                 sal_Int32 nBytes = dumpDec< sal_Int32 >( "property-mapping-size" );
1739*b1cdbd2cSJim Jagielski                 dumpArray( "property-mapping-indexes", nBytes );
1740*b1cdbd2cSJim Jagielski             }
1741*b1cdbd2cSJim Jagielski             if( nFlags & 0x0200 ) dumpString( "property-name" );
1742*b1cdbd2cSJim Jagielski         }
1743*b1cdbd2cSJim Jagielski         break;
1744*b1cdbd2cSJim Jagielski 
1745*b1cdbd2cSJim Jagielski         case BIFF12_ID_PCDFIELDGROUP:
1746*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "parent-field" );
1747*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "base-field" );
1748*b1cdbd2cSJim Jagielski         break;
1749*b1cdbd2cSJim Jagielski 
1750*b1cdbd2cSJim Jagielski         case BIFF12_ID_PCDFRANGEPR:
1751*b1cdbd2cSJim Jagielski             dumpDec< sal_uInt8 >( "group-by", "PCDFRANGEPR-GROUPBY" );
1752*b1cdbd2cSJim Jagielski             dumpHex< sal_uInt8 >( "flags", "PCDFRANGEPR-FLAGS" );
1753*b1cdbd2cSJim Jagielski             dumpDec< double >( "start-value" );
1754*b1cdbd2cSJim Jagielski             dumpDec< double >( "end-value" );
1755*b1cdbd2cSJim Jagielski             dumpDec< double >( "interval" );
1756*b1cdbd2cSJim Jagielski         break;
1757*b1cdbd2cSJim Jagielski 
1758*b1cdbd2cSJim Jagielski         case BIFF12_ID_PCDFSHAREDITEMS:
1759*b1cdbd2cSJim Jagielski         {
1760*b1cdbd2cSJim Jagielski             sal_uInt16 nFlags = dumpHex< sal_uInt16 >( "flags", "PCDFSHAREDITEMS-FLAGS" );
1761*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "count" );
1762*b1cdbd2cSJim Jagielski             if( nFlags & 0x0100 ) dumpDec< double >( "min-value" );
1763*b1cdbd2cSJim Jagielski             if( nFlags & 0x0100 ) dumpDec< double >( "max-value" );
1764*b1cdbd2cSJim Jagielski         }
1765*b1cdbd2cSJim Jagielski         break;
1766*b1cdbd2cSJim Jagielski 
1767*b1cdbd2cSJim Jagielski         case BIFF12_ID_PCDSHEETSOURCE:
1768*b1cdbd2cSJim Jagielski         {
1769*b1cdbd2cSJim Jagielski             sal_uInt8 nIsDefName = dumpBoolean( "is-def-name" );
1770*b1cdbd2cSJim Jagielski             dumpBoolean( "is-builtin-def-name" );
1771*b1cdbd2cSJim Jagielski             sal_uInt8 nFlags = dumpHex< sal_uInt8 >( "flags", "PCDWORKSHEETSOURCE-FLAGS" );
1772*b1cdbd2cSJim Jagielski             if( nFlags & 0x02 ) dumpString( "sheet-name" );
1773*b1cdbd2cSJim Jagielski             if( nFlags & 0x01 ) dumpString( "rel-id" );
1774*b1cdbd2cSJim Jagielski             if( nIsDefName == 0 ) dumpRange(); else dumpString( "def-name" );
1775*b1cdbd2cSJim Jagielski         }
1776*b1cdbd2cSJim Jagielski         break;
1777*b1cdbd2cSJim Jagielski 
1778*b1cdbd2cSJim Jagielski         case BIFF12_ID_PCDSOURCE:
1779*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "source-type", "PCDSOURCE-TYPE" );
1780*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "connection-id" );
1781*b1cdbd2cSJim Jagielski         break;
1782*b1cdbd2cSJim Jagielski 
1783*b1cdbd2cSJim Jagielski         case BIFF12_ID_PCITEM_ARRAY:
1784*b1cdbd2cSJim Jagielski         {
1785*b1cdbd2cSJim Jagielski             sal_uInt16 nType = dumpDec< sal_uInt16 >( "type", "PCITEM_ARRAY-TYPE" );
1786*b1cdbd2cSJim Jagielski             sal_Int32 nCount = dumpDec< sal_Int32 >( "count" );
1787*b1cdbd2cSJim Jagielski             mxOut->resetItemIndex();
1788*b1cdbd2cSJim Jagielski             for( sal_Int32 nIdx = 0; nIdx < nCount; ++nIdx )
1789*b1cdbd2cSJim Jagielski             {
1790*b1cdbd2cSJim Jagielski                 switch( nType )
1791*b1cdbd2cSJim Jagielski                 {
1792*b1cdbd2cSJim Jagielski                     case 1:     dumpDec< double >( "#value" );  break;
1793*b1cdbd2cSJim Jagielski                     case 2:     dumpString( "#value" );         break;
1794*b1cdbd2cSJim Jagielski                     case 16:    dumpErrorCode( "#value" );      break;
1795*b1cdbd2cSJim Jagielski                     case 32:    dumpPivotDateTime( "#value" );  break;
1796*b1cdbd2cSJim Jagielski                     default:    nIdx = nCount;
1797*b1cdbd2cSJim Jagielski                 }
1798*b1cdbd2cSJim Jagielski             }
1799*b1cdbd2cSJim Jagielski         }
1800*b1cdbd2cSJim Jagielski         break;
1801*b1cdbd2cSJim Jagielski 
1802*b1cdbd2cSJim Jagielski         case BIFF12_ID_PCITEM_BOOL:
1803*b1cdbd2cSJim Jagielski             dumpBoolean( "value" );
1804*b1cdbd2cSJim Jagielski         break;
1805*b1cdbd2cSJim Jagielski 
1806*b1cdbd2cSJim Jagielski         case BIFF12_ID_PCITEM_DATE:
1807*b1cdbd2cSJim Jagielski             dumpPivotDateTime( "value" );
1808*b1cdbd2cSJim Jagielski         break;
1809*b1cdbd2cSJim Jagielski 
1810*b1cdbd2cSJim Jagielski         case BIFF12_ID_PCITEM_DOUBLE:
1811*b1cdbd2cSJim Jagielski             dumpDec< double >( "value" );
1812*b1cdbd2cSJim Jagielski             // TODO: server formatting
1813*b1cdbd2cSJim Jagielski         break;
1814*b1cdbd2cSJim Jagielski 
1815*b1cdbd2cSJim Jagielski         case BIFF12_ID_PCITEM_ERROR:
1816*b1cdbd2cSJim Jagielski             dumpErrorCode( "value" );
1817*b1cdbd2cSJim Jagielski             // TODO: server formatting
1818*b1cdbd2cSJim Jagielski         break;
1819*b1cdbd2cSJim Jagielski 
1820*b1cdbd2cSJim Jagielski         case BIFF12_ID_PCITEM_INDEX:
1821*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "index" );
1822*b1cdbd2cSJim Jagielski         break;
1823*b1cdbd2cSJim Jagielski 
1824*b1cdbd2cSJim Jagielski         case BIFF12_ID_PCITEM_MISSING:
1825*b1cdbd2cSJim Jagielski             // TODO: server formatting
1826*b1cdbd2cSJim Jagielski         break;
1827*b1cdbd2cSJim Jagielski 
1828*b1cdbd2cSJim Jagielski 
1829*b1cdbd2cSJim Jagielski         case BIFF12_ID_PCITEM_STRING:
1830*b1cdbd2cSJim Jagielski             dumpString( "value" );
1831*b1cdbd2cSJim Jagielski             // TODO: server formatting
1832*b1cdbd2cSJim Jagielski         break;
1833*b1cdbd2cSJim Jagielski 
1834*b1cdbd2cSJim Jagielski         case BIFF12_ID_PCITEMA_BOOL:
1835*b1cdbd2cSJim Jagielski             dumpBoolean( "value" );
1836*b1cdbd2cSJim Jagielski             // TODO: additional info
1837*b1cdbd2cSJim Jagielski         break;
1838*b1cdbd2cSJim Jagielski 
1839*b1cdbd2cSJim Jagielski         case BIFF12_ID_PCITEMA_DATE:
1840*b1cdbd2cSJim Jagielski             dumpPivotDateTime( "value" );
1841*b1cdbd2cSJim Jagielski             // TODO: additional info
1842*b1cdbd2cSJim Jagielski         break;
1843*b1cdbd2cSJim Jagielski 
1844*b1cdbd2cSJim Jagielski         case BIFF12_ID_PCITEMA_DOUBLE:
1845*b1cdbd2cSJim Jagielski             dumpDec< double >( "value" );
1846*b1cdbd2cSJim Jagielski             // TODO: additional info
1847*b1cdbd2cSJim Jagielski         break;
1848*b1cdbd2cSJim Jagielski 
1849*b1cdbd2cSJim Jagielski         case BIFF12_ID_PCITEMA_ERROR:
1850*b1cdbd2cSJim Jagielski             dumpErrorCode( "value" );
1851*b1cdbd2cSJim Jagielski             // TODO: additional info
1852*b1cdbd2cSJim Jagielski         break;
1853*b1cdbd2cSJim Jagielski 
1854*b1cdbd2cSJim Jagielski         case BIFF12_ID_PCITEMA_MISSING:
1855*b1cdbd2cSJim Jagielski             // TODO: additional info
1856*b1cdbd2cSJim Jagielski         break;
1857*b1cdbd2cSJim Jagielski 
1858*b1cdbd2cSJim Jagielski         case BIFF12_ID_PCITEMA_STRING:
1859*b1cdbd2cSJim Jagielski             dumpString( "value" );
1860*b1cdbd2cSJim Jagielski             // TODO: additional info
1861*b1cdbd2cSJim Jagielski         break;
1862*b1cdbd2cSJim Jagielski 
1863*b1cdbd2cSJim Jagielski         case BIFF12_ID_PHONETICPR:
1864*b1cdbd2cSJim Jagielski             dumpDec< sal_uInt16 >( "font-id", "FONTNAMES" );
1865*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "type", "PHONETICPR-TYPE" );
1866*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "alignment", "PHONETICPR-ALIGNMENT" );
1867*b1cdbd2cSJim Jagielski         break;
1868*b1cdbd2cSJim Jagielski 
1869*b1cdbd2cSJim Jagielski         case BIFF12_ID_PICTURE:
1870*b1cdbd2cSJim Jagielski             dumpString( "rel-id" );
1871*b1cdbd2cSJim Jagielski         break;
1872*b1cdbd2cSJim Jagielski 
1873*b1cdbd2cSJim Jagielski         case BIFF12_ID_PIVOTAREA:
1874*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "field" );
1875*b1cdbd2cSJim Jagielski             dumpDec< sal_uInt8 >( "type", "PIVOTAREA-TYPE" );
1876*b1cdbd2cSJim Jagielski             dumpHex< sal_uInt8 >( "flags-1", "PIVOTAREA-FLAGS1" );
1877*b1cdbd2cSJim Jagielski             dumpHex< sal_uInt16 >( "flags-2", "PIVOTAREA-FLAGS2" );
1878*b1cdbd2cSJim Jagielski         break;
1879*b1cdbd2cSJim Jagielski 
1880*b1cdbd2cSJim Jagielski         case BIFF12_ID_PIVOTCACHE:
1881*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "cache-id" );
1882*b1cdbd2cSJim Jagielski             dumpString( "rel-id" );
1883*b1cdbd2cSJim Jagielski         break;
1884*b1cdbd2cSJim Jagielski 
1885*b1cdbd2cSJim Jagielski         case BIFF12_ID_PTCOLFIELDS:
1886*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "count" );
1887*b1cdbd2cSJim Jagielski             mxOut->resetItemIndex();
1888*b1cdbd2cSJim Jagielski             while( mxStrm->getRemaining() >= 4 )
1889*b1cdbd2cSJim Jagielski                 dumpDec< sal_Int32 >( "#field", "PT-FIELDINDEX" );
1890*b1cdbd2cSJim Jagielski         break;
1891*b1cdbd2cSJim Jagielski 
1892*b1cdbd2cSJim Jagielski         case BIFF12_ID_PTDATAFIELD:
1893*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "field" );
1894*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "subtotal", "PTDATAFIELD-SUBTOTAL" );
1895*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "show-data-as", "PTDATAFIELD-SHOWDATAAS" );
1896*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "base-field" );
1897*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "base-item", "PTDATAFIELD-BASEITEM" );
1898*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "number-format" );
1899*b1cdbd2cSJim Jagielski             if( dumpBool< sal_uInt8 >( "has-name" ) )
1900*b1cdbd2cSJim Jagielski                 dumpString( "name" );
1901*b1cdbd2cSJim Jagielski         break;
1902*b1cdbd2cSJim Jagielski 
1903*b1cdbd2cSJim Jagielski         case BIFF12_ID_PTDEFINITION:
1904*b1cdbd2cSJim Jagielski         {
1905*b1cdbd2cSJim Jagielski             dumpDec< sal_uInt8 >( "created-version" );
1906*b1cdbd2cSJim Jagielski             dumpHex< sal_uInt8 >( "flags-1", "PTDEFINITION-FLAGS1" );
1907*b1cdbd2cSJim Jagielski             dumpHex< sal_uInt16 >( "flags-2", "PTDEFINITION-FLAGS2" );
1908*b1cdbd2cSJim Jagielski             sal_uInt32 nFlags3 = dumpHex< sal_uInt32 >( "flags-3", "PTDEFINITION-FLAGS3" );
1909*b1cdbd2cSJim Jagielski             sal_uInt32 nFlags4 = dumpHex< sal_uInt32 >( "flags-4", "PTDEFINITION-FLAGS4" );
1910*b1cdbd2cSJim Jagielski             dumpDec< sal_uInt8 >( "datafield-axis", "PTDEFINITION-DATAFIELD-AXIS" );
1911*b1cdbd2cSJim Jagielski             dumpDec< sal_uInt8 >( "page-wrap" );
1912*b1cdbd2cSJim Jagielski             dumpDec< sal_uInt8 >( "refreshed-version" );
1913*b1cdbd2cSJim Jagielski             dumpDec< sal_uInt8 >( "min-refresh-version" );
1914*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "datafield-position", "PTDEFINITION-DATAFIELD-POS" );
1915*b1cdbd2cSJim Jagielski             dumpDec< sal_Int16 >( "autoformat-id" );
1916*b1cdbd2cSJim Jagielski             dumpUnused( 2 );
1917*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "next-chart-id" );
1918*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "cache-id" );
1919*b1cdbd2cSJim Jagielski             dumpString( "name" );
1920*b1cdbd2cSJim Jagielski             if( nFlags3 & 0x00080000 ) dumpString( "data-caption" );
1921*b1cdbd2cSJim Jagielski             if( nFlags3 & 0x00100000 ) dumpString( "grand-total-caption" );
1922*b1cdbd2cSJim Jagielski             if( (nFlags4 & 0x00000040) == 0 ) dumpString( "error-caption" );
1923*b1cdbd2cSJim Jagielski             if( (nFlags4 & 0x00000080) == 0 ) dumpString( "missing-caption" );
1924*b1cdbd2cSJim Jagielski             if( nFlags3 & 0x00200000 ) dumpString( "page-field-style" );
1925*b1cdbd2cSJim Jagielski             if( nFlags3 & 0x00400000 ) dumpString( "pivot-table-style" );
1926*b1cdbd2cSJim Jagielski             if( nFlags3 & 0x00800000 ) dumpString( "vacated-style" );
1927*b1cdbd2cSJim Jagielski             if( nFlags3 & 0x40000000 ) dumpString( "tag" );
1928*b1cdbd2cSJim Jagielski             if( nFlags4 & 0x00000800 ) dumpString( "col-header-caption" );
1929*b1cdbd2cSJim Jagielski             if( nFlags4 & 0x00000400 ) dumpString( "row-header-caption" );
1930*b1cdbd2cSJim Jagielski         }
1931*b1cdbd2cSJim Jagielski         break;
1932*b1cdbd2cSJim Jagielski 
1933*b1cdbd2cSJim Jagielski         case BIFF12_ID_PTFIELD:
1934*b1cdbd2cSJim Jagielski             dumpHex< sal_uInt32 >( "flags-1", "PTFIELD-FLAGS1" );
1935*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "num-fmt" );
1936*b1cdbd2cSJim Jagielski             dumpHex< sal_uInt32 >( "flags-2", "PTFIELD-FLAGS2" );
1937*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "autoshow-items" );
1938*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "autoshow-datafield-idx" );
1939*b1cdbd2cSJim Jagielski         break;
1940*b1cdbd2cSJim Jagielski 
1941*b1cdbd2cSJim Jagielski         case BIFF12_ID_PTFILTER:
1942*b1cdbd2cSJim Jagielski         {
1943*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "field" );
1944*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "member-prop-field" );
1945*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "type", "PTFILTER-TYPE" );
1946*b1cdbd2cSJim Jagielski             dumpUnused( 4 );
1947*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "unique-id" );
1948*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "measure-data-field" );
1949*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "measure-data-hierarchy" );
1950*b1cdbd2cSJim Jagielski             sal_uInt16 nFlags = dumpHex< sal_uInt16 >( "flags", "PTFILTER-FLAGS" );
1951*b1cdbd2cSJim Jagielski             if( nFlags & 0x0001 ) dumpString( "name" );
1952*b1cdbd2cSJim Jagielski             if( nFlags & 0x0002 ) dumpString( "description" );
1953*b1cdbd2cSJim Jagielski             if( nFlags & 0x0004 ) dumpString( "str-value1" );
1954*b1cdbd2cSJim Jagielski             if( nFlags & 0x0008 ) dumpString( "str-value2" );
1955*b1cdbd2cSJim Jagielski         }
1956*b1cdbd2cSJim Jagielski         break;
1957*b1cdbd2cSJim Jagielski 
1958*b1cdbd2cSJim Jagielski         case BIFF12_ID_PTFITEM:
1959*b1cdbd2cSJim Jagielski         {
1960*b1cdbd2cSJim Jagielski             dumpDec< sal_uInt8 >( "type", "PTFITEM-TYPE" );
1961*b1cdbd2cSJim Jagielski             sal_uInt16 nFlags = dumpHex< sal_uInt16 >( "flags", "PTFITEM-FLAGS" );
1962*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "cache-idx" );
1963*b1cdbd2cSJim Jagielski             if( nFlags & 0x0010 ) dumpString( "display-name" );
1964*b1cdbd2cSJim Jagielski         }
1965*b1cdbd2cSJim Jagielski         break;
1966*b1cdbd2cSJim Jagielski 
1967*b1cdbd2cSJim Jagielski         case BIFF12_ID_PTLOCATION:
1968*b1cdbd2cSJim Jagielski             dumpRange( "location" );
1969*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "first-header-row" );
1970*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "first-data-row" );
1971*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "first-data-col" );
1972*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "page-row-count" );
1973*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "page-col-count" );
1974*b1cdbd2cSJim Jagielski         break;
1975*b1cdbd2cSJim Jagielski 
1976*b1cdbd2cSJim Jagielski         case BIFF12_ID_PTPAGEFIELD:
1977*b1cdbd2cSJim Jagielski         {
1978*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "field" );
1979*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "cache-item", "PTPAGEFIELD-ITEM" );
1980*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "olap-hierarchy" );
1981*b1cdbd2cSJim Jagielski             sal_uInt8 nFlags = dumpHex< sal_uInt8 >( "flags", "PTPAGEFIELD-FLAGS" );
1982*b1cdbd2cSJim Jagielski             if( nFlags & 0x01 ) dumpString( "unique-name" );
1983*b1cdbd2cSJim Jagielski             if( nFlags & 0x02 ) dumpString( "olap-caption" );
1984*b1cdbd2cSJim Jagielski         }
1985*b1cdbd2cSJim Jagielski         break;
1986*b1cdbd2cSJim Jagielski 
1987*b1cdbd2cSJim Jagielski         case BIFF12_ID_PTREFERENCE:
1988*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "field", "PT-FIELDINDEX" );
1989*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "item-count" );
1990*b1cdbd2cSJim Jagielski             dumpHex< sal_uInt16 >( "flags-1", "PTREFERENCE-FLAGS1" );
1991*b1cdbd2cSJim Jagielski             dumpHex< sal_uInt8 >( "flags-2", "PTREFERENCE-FLAGS2" );
1992*b1cdbd2cSJim Jagielski         break;
1993*b1cdbd2cSJim Jagielski 
1994*b1cdbd2cSJim Jagielski         case BIFF12_ID_PTROWFIELDS:
1995*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "count" );
1996*b1cdbd2cSJim Jagielski             mxOut->resetItemIndex();
1997*b1cdbd2cSJim Jagielski             while( mxStrm->getRemaining() >= 4 )
1998*b1cdbd2cSJim Jagielski                 dumpDec< sal_Int32 >( "#field", "PT-FIELDINDEX" );
1999*b1cdbd2cSJim Jagielski         break;
2000*b1cdbd2cSJim Jagielski 
2001*b1cdbd2cSJim Jagielski         case BIFF12_ID_QUERYTABLE:
2002*b1cdbd2cSJim Jagielski             dumpHex< sal_uInt32 >( "flags", "QUERYTABLE-FLAGS" );
2003*b1cdbd2cSJim Jagielski             dumpDec< sal_uInt16 >( "autoformat-id" );
2004*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "connection-id" );
2005*b1cdbd2cSJim Jagielski             dumpString( "defined-name" );
2006*b1cdbd2cSJim Jagielski         break;
2007*b1cdbd2cSJim Jagielski 
2008*b1cdbd2cSJim Jagielski         case BIFF12_ID_ROW:
2009*b1cdbd2cSJim Jagielski             dumpRowIndex();
2010*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "custom-xf-id" );
2011*b1cdbd2cSJim Jagielski             dumpDec< sal_uInt16 >( "height", "CONV-TWIP-TO-PT" );
2012*b1cdbd2cSJim Jagielski             dumpHex< sal_uInt16 >( "flags", "ROW-FLAGS1" );
2013*b1cdbd2cSJim Jagielski             dumpHex< sal_uInt8 >( "flags", "ROW-FLAGS2" );
2014*b1cdbd2cSJim Jagielski             mxOut->resetItemIndex();
2015*b1cdbd2cSJim Jagielski             for( sal_Int32 nSpan = 0, nSpanCount = dumpDec< sal_Int32 >( "row-spans-count" ); !mxStrm->isEof() && (nSpan < nSpanCount); ++nSpan )
2016*b1cdbd2cSJim Jagielski                 dumpRowRange( "#row-spans" );
2017*b1cdbd2cSJim Jagielski         break;
2018*b1cdbd2cSJim Jagielski 
2019*b1cdbd2cSJim Jagielski         case BIFF12_ID_ROWBREAKS:
2020*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "count" );
2021*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "manual-count" );
2022*b1cdbd2cSJim Jagielski         break;
2023*b1cdbd2cSJim Jagielski 
2024*b1cdbd2cSJim Jagielski         case BIFF12_ID_SCENARIO:
2025*b1cdbd2cSJim Jagielski             dumpDec< sal_uInt16 >( "cell-count" );
2026*b1cdbd2cSJim Jagielski             // two longs instead of flag field
2027*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "locked", "BOOLEAN" );
2028*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "hidden", "BOOLEAN" );
2029*b1cdbd2cSJim Jagielski             dumpString( "name" );
2030*b1cdbd2cSJim Jagielski             dumpString( "comment" );
2031*b1cdbd2cSJim Jagielski             dumpString( "user" );
2032*b1cdbd2cSJim Jagielski         break;
2033*b1cdbd2cSJim Jagielski 
2034*b1cdbd2cSJim Jagielski         case BIFF12_ID_SCENARIOS:
2035*b1cdbd2cSJim Jagielski             dumpDec< sal_uInt16 >( "selected" );
2036*b1cdbd2cSJim Jagielski             dumpDec< sal_uInt16 >( "shown" );
2037*b1cdbd2cSJim Jagielski             dumpRangeList( "result-cells" );
2038*b1cdbd2cSJim Jagielski         break;
2039*b1cdbd2cSJim Jagielski 
2040*b1cdbd2cSJim Jagielski         case BIFF12_ID_SELECTION:
2041*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "pane", "PANE-ID" );
2042*b1cdbd2cSJim Jagielski             dumpAddress( "active-cell" );
2043*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "active-cell-id" );
2044*b1cdbd2cSJim Jagielski             dumpRangeList( "selection" );
2045*b1cdbd2cSJim Jagielski         break;
2046*b1cdbd2cSJim Jagielski 
2047*b1cdbd2cSJim Jagielski         case BIFF12_ID_SHAREDFMLA:
2048*b1cdbd2cSJim Jagielski             dumpRange( "formula-range" );
2049*b1cdbd2cSJim Jagielski             mxFmlaObj->dumpCellFormula();
2050*b1cdbd2cSJim Jagielski         break;
2051*b1cdbd2cSJim Jagielski 
2052*b1cdbd2cSJim Jagielski         case BIFF12_ID_SHEET:
2053*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "sheet-state", "SHEET-STATE" );
2054*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "sheet-id" );
2055*b1cdbd2cSJim Jagielski             dumpString( "rel-id" );
2056*b1cdbd2cSJim Jagielski             dumpString( "sheet-name" );
2057*b1cdbd2cSJim Jagielski         break;
2058*b1cdbd2cSJim Jagielski 
2059*b1cdbd2cSJim Jagielski         case BIFF12_ID_SHEETFORMATPR:
2060*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "default-col-width", "CONV-COLWIDTH" );
2061*b1cdbd2cSJim Jagielski             dumpDec< sal_uInt16 >( "base-col-width" );
2062*b1cdbd2cSJim Jagielski             dumpDec< sal_uInt16 >( "default-row-height", "CONV-TWIP-TO-PT" );
2063*b1cdbd2cSJim Jagielski             dumpHex< sal_uInt16 >( "flags", "SHEETFORMATPR-FLAGS" );
2064*b1cdbd2cSJim Jagielski             dumpDec< sal_uInt8 >( "max-row-outline" );
2065*b1cdbd2cSJim Jagielski             dumpDec< sal_uInt8 >( "max-col-outline" );
2066*b1cdbd2cSJim Jagielski         break;
2067*b1cdbd2cSJim Jagielski 
2068*b1cdbd2cSJim Jagielski         case BIFF12_ID_SHEETPR:
2069*b1cdbd2cSJim Jagielski             dumpHex< sal_uInt16 >( "flags1", "SHEETPR-FLAGS1" );
2070*b1cdbd2cSJim Jagielski             dumpHex< sal_uInt8 >( "flags2", "SHEETPR-FLAGS2" );
2071*b1cdbd2cSJim Jagielski             dumpColor( "tab-color" );
2072*b1cdbd2cSJim Jagielski             dumpAddress( "window-anchor" );
2073*b1cdbd2cSJim Jagielski             dumpString( "codename" );
2074*b1cdbd2cSJim Jagielski         break;
2075*b1cdbd2cSJim Jagielski 
2076*b1cdbd2cSJim Jagielski         case BIFF12_ID_SHEETPROTECTION:
2077*b1cdbd2cSJim Jagielski             dumpHex< sal_uInt16 >( "password-hash" );
2078*b1cdbd2cSJim Jagielski             // no flags field for all these boolean flags?!?
2079*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "sheet-locked", "BOOLEAN" );
2080*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "objects-locked", "BOOLEAN" );
2081*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "scenarios-locked", "BOOLEAN" );
2082*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "format-cells-locked", "BOOLEAN" );
2083*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "format-columns-locked", "BOOLEAN" );
2084*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "format-rows-locked", "BOOLEAN" );
2085*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "insert-columns-locked", "BOOLEAN" );
2086*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "insert-rows-locked", "BOOLEAN" );
2087*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "insert-hyperlinks-locked", "BOOLEAN" );
2088*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "delete-columns-locked", "BOOLEAN" );
2089*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "delete-rows-locked", "BOOLEAN" );
2090*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "select-locked-cells-locked", "BOOLEAN" );
2091*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "sort-locked", "BOOLEAN" );
2092*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "autofilter-locked", "BOOLEAN" );
2093*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "pivot-tables-locked", "BOOLEAN" );
2094*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "select-unlocked-cells-locked", "BOOLEAN" );
2095*b1cdbd2cSJim Jagielski         break;
2096*b1cdbd2cSJim Jagielski 
2097*b1cdbd2cSJim Jagielski         case BIFF12_ID_SHEETVIEW:
2098*b1cdbd2cSJim Jagielski             dumpHex< sal_uInt16 >( "flags", "SHEETVIEW-FLAGS" );
2099*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "view-type", "SHEETVIEW-TYPE" );
2100*b1cdbd2cSJim Jagielski             dumpAddress( "top-left" );
2101*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "gridcolor-id", "PALETTE-COLORS" );
2102*b1cdbd2cSJim Jagielski             dumpDec< sal_uInt16 >( "zoom-scale", "CONV-PERCENT" );
2103*b1cdbd2cSJim Jagielski             dumpDec< sal_uInt16 >( "zoom-scale-normal", "CONV-PERCENT" );
2104*b1cdbd2cSJim Jagielski             dumpDec< sal_uInt16 >( "zoom-scale-sheet-layout", "CONV-PERCENT" );
2105*b1cdbd2cSJim Jagielski             dumpDec< sal_uInt16 >( "zoom-scale-page-layout", "CONV-PERCENT" );
2106*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "workbookview-id" );
2107*b1cdbd2cSJim Jagielski         break;
2108*b1cdbd2cSJim Jagielski 
2109*b1cdbd2cSJim Jagielski         case BIFF12_ID_SI:
2110*b1cdbd2cSJim Jagielski             dumpString( "string", true );
2111*b1cdbd2cSJim Jagielski         break;
2112*b1cdbd2cSJim Jagielski 
2113*b1cdbd2cSJim Jagielski         case BIFF12_ID_SST:
2114*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "string-cell-count" );
2115*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "sst-size" );
2116*b1cdbd2cSJim Jagielski         break;
2117*b1cdbd2cSJim Jagielski 
2118*b1cdbd2cSJim Jagielski         case BIFF12_ID_TABLE:
2119*b1cdbd2cSJim Jagielski             dumpRange();
2120*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "type", "TABLE-TYPE" );
2121*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "id" );
2122*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "header-rows" );
2123*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "totals-rows" );
2124*b1cdbd2cSJim Jagielski             dumpHex< sal_uInt32 >( "flags", "TABLE-FLAGS" );
2125*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "headerrow-dxf-id" );
2126*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "data-dxf-id" );
2127*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "totalsrow-dxf-id" );
2128*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "table-border-dxf-id" );
2129*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "headerrow-border-dxf-id" );
2130*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "totalsrow-border-dxf-id" );
2131*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "connection-id" );
2132*b1cdbd2cSJim Jagielski             dumpString( "name" );
2133*b1cdbd2cSJim Jagielski             dumpString( "display-name" );
2134*b1cdbd2cSJim Jagielski             dumpString( "comment" );
2135*b1cdbd2cSJim Jagielski             dumpString( "headerrow-cell-style" );
2136*b1cdbd2cSJim Jagielski             dumpString( "data-cell-style" );
2137*b1cdbd2cSJim Jagielski             dumpString( "totalsrow-cell-style" );
2138*b1cdbd2cSJim Jagielski         break;
2139*b1cdbd2cSJim Jagielski 
2140*b1cdbd2cSJim Jagielski         case BIFF12_ID_TABLEPART:
2141*b1cdbd2cSJim Jagielski             dumpString( "rel-id" );
2142*b1cdbd2cSJim Jagielski         break;
2143*b1cdbd2cSJim Jagielski 
2144*b1cdbd2cSJim Jagielski         case BIFF12_ID_TABLESTYLEINFO:
2145*b1cdbd2cSJim Jagielski             dumpHex< sal_uInt16 >( "flags", "TABLESTYLEINFO-FLAGS" );
2146*b1cdbd2cSJim Jagielski             dumpString( "style-name" );
2147*b1cdbd2cSJim Jagielski         break;
2148*b1cdbd2cSJim Jagielski 
2149*b1cdbd2cSJim Jagielski         case BIFF12_ID_TOP10FILTER:
2150*b1cdbd2cSJim Jagielski             dumpHex< sal_uInt8 >( "flags", "TOP10FILTER-FLAGS" );
2151*b1cdbd2cSJim Jagielski             dumpDec< double >( "value" );
2152*b1cdbd2cSJim Jagielski             dumpDec< double >( "cell-value" );
2153*b1cdbd2cSJim Jagielski         break;
2154*b1cdbd2cSJim Jagielski 
2155*b1cdbd2cSJim Jagielski         case BIFF12_ID_VOLTYPEMAIN:
2156*b1cdbd2cSJim Jagielski             dumpString( "first" );
2157*b1cdbd2cSJim Jagielski         break;
2158*b1cdbd2cSJim Jagielski 
2159*b1cdbd2cSJim Jagielski         case BIFF12_ID_VOLTYPESTP:
2160*b1cdbd2cSJim Jagielski             dumpString( "topic-value" );
2161*b1cdbd2cSJim Jagielski         break;
2162*b1cdbd2cSJim Jagielski 
2163*b1cdbd2cSJim Jagielski         case BIFF12_ID_VOLTYPETR:
2164*b1cdbd2cSJim Jagielski             dumpAddress( "ref" );
2165*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "sheet-id" );
2166*b1cdbd2cSJim Jagielski         break;
2167*b1cdbd2cSJim Jagielski 
2168*b1cdbd2cSJim Jagielski         case BIFF12_ID_WEBPR:
2169*b1cdbd2cSJim Jagielski         {
2170*b1cdbd2cSJim Jagielski             dumpHex< sal_uInt32 >( "flags", "WEBPR-FLAGS" );
2171*b1cdbd2cSJim Jagielski             sal_uInt8 nStrFlags = dumpHex< sal_uInt8 >( "string-flags", "WEBPR-STRINGFLAGS" );
2172*b1cdbd2cSJim Jagielski             if( nStrFlags & 0x04 ) dumpString( "url" );
2173*b1cdbd2cSJim Jagielski             if( nStrFlags & 0x01 ) dumpString( "post-method" );
2174*b1cdbd2cSJim Jagielski             if( nStrFlags & 0x02 ) dumpString( "edit-page" );
2175*b1cdbd2cSJim Jagielski         }
2176*b1cdbd2cSJim Jagielski         break;
2177*b1cdbd2cSJim Jagielski 
2178*b1cdbd2cSJim Jagielski         case BIFF12_ID_WORKBOOKPR:
2179*b1cdbd2cSJim Jagielski             dumpHex< sal_uInt32 >( "flags", "WORKBBOKPR-FLAGS" );
2180*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "default-theme-version" );
2181*b1cdbd2cSJim Jagielski             dumpString( "codename" );
2182*b1cdbd2cSJim Jagielski         break;
2183*b1cdbd2cSJim Jagielski 
2184*b1cdbd2cSJim Jagielski         case BIFF12_ID_WORKBOOKVIEW:
2185*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "x-window" );
2186*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "y-window" );
2187*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "win-width" );
2188*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "win-height" );
2189*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "tabbar-ratio" );
2190*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "first-sheet" );
2191*b1cdbd2cSJim Jagielski             dumpDec< sal_Int32 >( "active-sheet" );
2192*b1cdbd2cSJim Jagielski             dumpHex< sal_uInt8 >( "flags", "WORKBOOKVIEW-FLAGS" );
2193*b1cdbd2cSJim Jagielski         break;
2194*b1cdbd2cSJim Jagielski 
2195*b1cdbd2cSJim Jagielski         case BIFF12_ID_XF:
2196*b1cdbd2cSJim Jagielski             dumpDec< sal_uInt16 >( "parent-xf-id" );
2197*b1cdbd2cSJim Jagielski             dumpDec< sal_uInt16 >( "numfmt-id" );
2198*b1cdbd2cSJim Jagielski             dumpDec< sal_uInt16 >( "font-id", "FONTNAMES" );
2199*b1cdbd2cSJim Jagielski             dumpDec< sal_uInt16 >( "fill-id" );
2200*b1cdbd2cSJim Jagielski             dumpDec< sal_uInt16 >( "border-id" );
2201*b1cdbd2cSJim Jagielski             dumpHex< sal_uInt32 >( "alignment", "XF-ALIGNMENT" );
2202*b1cdbd2cSJim Jagielski             dumpHex< sal_uInt16 >( "used-flags", "XF-USEDFLAGS" );
2203*b1cdbd2cSJim Jagielski         break;
2204*b1cdbd2cSJim Jagielski     }
2205*b1cdbd2cSJim Jagielski }
2206*b1cdbd2cSJim Jagielski 
dumpGradientHead()2207*b1cdbd2cSJim Jagielski void RecordStreamObject::dumpGradientHead()
2208*b1cdbd2cSJim Jagielski {
2209*b1cdbd2cSJim Jagielski     dumpDec< sal_Int32 >( "gradient-type", "FILL-GRADIENTTYPE" );
2210*b1cdbd2cSJim Jagielski     dumpDec< double >( "linear-angle" );
2211*b1cdbd2cSJim Jagielski     dumpDec< double >( "pos-left" );
2212*b1cdbd2cSJim Jagielski     dumpDec< double >( "pos-right" );
2213*b1cdbd2cSJim Jagielski     dumpDec< double >( "pos-top" );
2214*b1cdbd2cSJim Jagielski     dumpDec< double >( "pos-bottom" );
2215*b1cdbd2cSJim Jagielski }
2216*b1cdbd2cSJim Jagielski 
dumpCellHeader(bool bWithColumn)2217*b1cdbd2cSJim Jagielski void RecordStreamObject::dumpCellHeader( bool bWithColumn )
2218*b1cdbd2cSJim Jagielski {
2219*b1cdbd2cSJim Jagielski     if( bWithColumn ) dumpColIndex();
2220*b1cdbd2cSJim Jagielski     dumpHex< sal_uInt32 >( "xf-id", "CELL-XFID" );
2221*b1cdbd2cSJim Jagielski }
2222*b1cdbd2cSJim Jagielski 
2223*b1cdbd2cSJim Jagielski // ============================================================================
2224*b1cdbd2cSJim Jagielski 
RootStorageObject(const DumperBase & rParent)2225*b1cdbd2cSJim Jagielski RootStorageObject::RootStorageObject( const DumperBase& rParent )
2226*b1cdbd2cSJim Jagielski {
2227*b1cdbd2cSJim Jagielski     StorageObjectBase::construct( rParent );
2228*b1cdbd2cSJim Jagielski }
2229*b1cdbd2cSJim Jagielski 
implDumpStream(const Reference<XInputStream> & rxStrm,const OUString & rStrgPath,const OUString & rStrmName,const OUString & rSysFileName)2230*b1cdbd2cSJim Jagielski void RootStorageObject::implDumpStream( const Reference< XInputStream >& rxStrm, const OUString& rStrgPath, const OUString& rStrmName, const OUString& rSysFileName )
2231*b1cdbd2cSJim Jagielski {
2232*b1cdbd2cSJim Jagielski     OUString aExt = InputOutputHelper::getFileNameExtension( rStrmName );
2233*b1cdbd2cSJim Jagielski     if(
2234*b1cdbd2cSJim Jagielski         aExt.equalsIgnoreAsciiCaseAscii( "xlsb" ) ||
2235*b1cdbd2cSJim Jagielski         aExt.equalsIgnoreAsciiCaseAscii( "xlsm" ) ||
2236*b1cdbd2cSJim Jagielski         aExt.equalsIgnoreAsciiCaseAscii( "xlsx" ) ||
2237*b1cdbd2cSJim Jagielski         aExt.equalsIgnoreAsciiCaseAscii( "xltm" ) ||
2238*b1cdbd2cSJim Jagielski         aExt.equalsIgnoreAsciiCaseAscii( "xltx" ) )
2239*b1cdbd2cSJim Jagielski     {
2240*b1cdbd2cSJim Jagielski         Dumper( getContext(), rxStrm, rSysFileName ).dump();
2241*b1cdbd2cSJim Jagielski     }
2242*b1cdbd2cSJim Jagielski     else if(
2243*b1cdbd2cSJim Jagielski         aExt.equalsIgnoreAsciiCaseAscii( "xla" ) ||
2244*b1cdbd2cSJim Jagielski         aExt.equalsIgnoreAsciiCaseAscii( "xlc" ) ||
2245*b1cdbd2cSJim Jagielski         aExt.equalsIgnoreAsciiCaseAscii( "xlm" ) ||
2246*b1cdbd2cSJim Jagielski         aExt.equalsIgnoreAsciiCaseAscii( "xls" ) ||
2247*b1cdbd2cSJim Jagielski         aExt.equalsIgnoreAsciiCaseAscii( "xlt" ) ||
2248*b1cdbd2cSJim Jagielski         aExt.equalsIgnoreAsciiCaseAscii( "xlw" ) )
2249*b1cdbd2cSJim Jagielski     {
2250*b1cdbd2cSJim Jagielski         ::oox::dump::biff::Dumper( getContext(), rxStrm, rSysFileName ).dump();
2251*b1cdbd2cSJim Jagielski     }
2252*b1cdbd2cSJim Jagielski     else if(
2253*b1cdbd2cSJim Jagielski         aExt.equalsIgnoreAsciiCaseAscii( "pptx" ) ||
2254*b1cdbd2cSJim Jagielski         aExt.equalsIgnoreAsciiCaseAscii( "potx" ) )
2255*b1cdbd2cSJim Jagielski     {
2256*b1cdbd2cSJim Jagielski         ::oox::dump::pptx::Dumper( getContext(), rxStrm, rSysFileName ).dump();
2257*b1cdbd2cSJim Jagielski     }
2258*b1cdbd2cSJim Jagielski     else if(
2259*b1cdbd2cSJim Jagielski         aExt.equalsIgnoreAsciiCaseAscii( "xml" ) ||
2260*b1cdbd2cSJim Jagielski         aExt.equalsIgnoreAsciiCaseAscii( "vml" ) ||
2261*b1cdbd2cSJim Jagielski         aExt.equalsIgnoreAsciiCaseAscii( "rels" ) )
2262*b1cdbd2cSJim Jagielski     {
2263*b1cdbd2cSJim Jagielski         XmlStreamObject( *this, rxStrm, rSysFileName ).dump();
2264*b1cdbd2cSJim Jagielski     }
2265*b1cdbd2cSJim Jagielski     else if( aExt.equalsIgnoreAsciiCaseAscii( "bin" ) )
2266*b1cdbd2cSJim Jagielski     {
2267*b1cdbd2cSJim Jagielski         if( rStrgPath.equalsAscii( "xl" ) && rStrmName.equalsAscii( "vbaProject.bin" ) )
2268*b1cdbd2cSJim Jagielski         {
2269*b1cdbd2cSJim Jagielski             StorageRef xStrg( new ::oox::ole::OleStorage( getContext(), rxStrm, false ) );
2270*b1cdbd2cSJim Jagielski             VbaProjectStorageObject( *this, xStrg, rSysFileName ).dump();
2271*b1cdbd2cSJim Jagielski         }
2272*b1cdbd2cSJim Jagielski         else if( rStrgPath.equalsAscii( "xl/embeddings" ) )
2273*b1cdbd2cSJim Jagielski         {
2274*b1cdbd2cSJim Jagielski             StorageRef xStrg( new ::oox::ole::OleStorage( getContext(), rxStrm, false ) );
2275*b1cdbd2cSJim Jagielski             OleStorageObject( *this, xStrg, rSysFileName ).dump();
2276*b1cdbd2cSJim Jagielski         }
2277*b1cdbd2cSJim Jagielski         else if(
2278*b1cdbd2cSJim Jagielski             rStrgPath.equalsAscii( "xl" ) ||
2279*b1cdbd2cSJim Jagielski             rStrgPath.equalsAscii( "xl/chartsheets" ) ||
2280*b1cdbd2cSJim Jagielski             rStrgPath.equalsAscii( "xl/dialogsheets" ) ||
2281*b1cdbd2cSJim Jagielski             rStrgPath.equalsAscii( "xl/externalLinks" ) ||
2282*b1cdbd2cSJim Jagielski             rStrgPath.equalsAscii( "xl/macrosheets" ) ||
2283*b1cdbd2cSJim Jagielski             rStrgPath.equalsAscii( "xl/pivotCache" ) ||
2284*b1cdbd2cSJim Jagielski             rStrgPath.equalsAscii( "xl/pivotTables" ) ||
2285*b1cdbd2cSJim Jagielski             rStrgPath.equalsAscii( "xl/queryTables" ) ||
2286*b1cdbd2cSJim Jagielski             rStrgPath.equalsAscii( "xl/tables" ) ||
2287*b1cdbd2cSJim Jagielski             rStrgPath.equalsAscii( "xl/worksheets" ) )
2288*b1cdbd2cSJim Jagielski         {
2289*b1cdbd2cSJim Jagielski             RecordStreamObject( *this, rxStrm, rSysFileName ).dump();
2290*b1cdbd2cSJim Jagielski         }
2291*b1cdbd2cSJim Jagielski         else if( rStrgPath.equalsAscii( "xl/activeX" ) )
2292*b1cdbd2cSJim Jagielski         {
2293*b1cdbd2cSJim Jagielski             StorageRef xStrg( new ::oox::ole::OleStorage( getContext(), rxStrm, true ) );
2294*b1cdbd2cSJim Jagielski             ActiveXStorageObject( *this, xStrg, rSysFileName ).dump();
2295*b1cdbd2cSJim Jagielski         }
2296*b1cdbd2cSJim Jagielski         else
2297*b1cdbd2cSJim Jagielski         {
2298*b1cdbd2cSJim Jagielski             BinaryStreamObject( *this, rxStrm, rSysFileName ).dump();
2299*b1cdbd2cSJim Jagielski         }
2300*b1cdbd2cSJim Jagielski     }
2301*b1cdbd2cSJim Jagielski }
2302*b1cdbd2cSJim Jagielski 
2303*b1cdbd2cSJim Jagielski // ============================================================================
2304*b1cdbd2cSJim Jagielski 
2305*b1cdbd2cSJim Jagielski #define DUMP_XLSB_CONFIG_ENVVAR "OOO_XLSBDUMPER"
2306*b1cdbd2cSJim Jagielski 
Dumper(const FilterBase & rFilter)2307*b1cdbd2cSJim Jagielski Dumper::Dumper( const FilterBase& rFilter )
2308*b1cdbd2cSJim Jagielski {
2309*b1cdbd2cSJim Jagielski     ConfigRef xCfg( new Config( DUMP_XLSB_CONFIG_ENVVAR, rFilter ) );
2310*b1cdbd2cSJim Jagielski     DumperBase::construct( xCfg );
2311*b1cdbd2cSJim Jagielski }
2312*b1cdbd2cSJim Jagielski 
Dumper(const Reference<XComponentContext> & rxContext,const Reference<XInputStream> & rxInStrm,const OUString & rSysFileName)2313*b1cdbd2cSJim Jagielski Dumper::Dumper( const Reference< XComponentContext >& rxContext, const Reference< XInputStream >& rxInStrm, const OUString& rSysFileName )
2314*b1cdbd2cSJim Jagielski {
2315*b1cdbd2cSJim Jagielski     if( rxContext.is() && rxInStrm.is() )
2316*b1cdbd2cSJim Jagielski     {
2317*b1cdbd2cSJim Jagielski         StorageRef xStrg( new ZipStorage( getContext(), rxInStrm ) );
2318*b1cdbd2cSJim Jagielski         MediaDescriptor aMediaDesc;
2319*b1cdbd2cSJim Jagielski         ConfigRef xCfg( new Config( DUMP_XLSB_CONFIG_ENVVAR, rxContext, xStrg, rSysFileName, aMediaDesc ) );
2320*b1cdbd2cSJim Jagielski         DumperBase::construct( xCfg );
2321*b1cdbd2cSJim Jagielski     }
2322*b1cdbd2cSJim Jagielski }
2323*b1cdbd2cSJim Jagielski 
implDump()2324*b1cdbd2cSJim Jagielski void Dumper::implDump()
2325*b1cdbd2cSJim Jagielski {
2326*b1cdbd2cSJim Jagielski     RootStorageObject( *this ).dump();
2327*b1cdbd2cSJim Jagielski }
2328*b1cdbd2cSJim Jagielski 
2329*b1cdbd2cSJim Jagielski // ============================================================================
2330*b1cdbd2cSJim Jagielski 
2331*b1cdbd2cSJim Jagielski } // namespace xlsb
2332*b1cdbd2cSJim Jagielski } // namespace dump
2333*b1cdbd2cSJim Jagielski } // namespace oox
2334*b1cdbd2cSJim Jagielski 
2335*b1cdbd2cSJim Jagielski #endif
2336