1 /**************************************************************
2 *
3 * Licensed to the Apache Software Foundation (ASF) under one
4 * or more contributor license agreements. See the NOTICE file
5 * distributed with this work for additional information
6 * regarding copyright ownership. The ASF licenses this file
7 * to you under the Apache License, Version 2.0 (the
8 * "License"); you may not use this file except in compliance
9 * with the License. You may obtain a copy of the License at
10 *
11 * http://www.apache.org/licenses/LICENSE-2.0
12 *
13 * Unless required by applicable law or agreed to in writing,
14 * software distributed under the License is distributed on an
15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16 * KIND, either express or implied. See the License for the
17 * specific language governing permissions and limitations
18 * under the License.
19 *
20 *************************************************************/
21
22
23
24
25 #ifndef _WW8STRUC_HXX
26 #define _WW8STRUC_HXX
27
28 #include <osl/endian.h>
29 #include <tools/string.hxx>
30 #include <sal/config.h>
31
32 #if defined OSL_BIGENDIAN || SAL_TYPES_ALIGNMENT4 > 2 || defined UNX
33 # define __WW8_NEEDS_COPY
34 #endif
35
36 #ifdef SAL_W32
37 # pragma pack(push, 2)
38 #elif defined(SAL_OS2)
39 # pragma pack(2)
40 #endif
41
Set_UInt8(sal_uInt8 * & p,sal_uInt8 n)42 inline void Set_UInt8( sal_uInt8 *& p, sal_uInt8 n )
43 {
44 ByteToSVBT8( n, *(SVBT8*)p );
45 p+= 1;
46 }
47
Set_UInt16(sal_uInt8 * & p,sal_uInt16 n)48 inline void Set_UInt16( sal_uInt8 *& p, sal_uInt16 n )
49 {
50 ShortToSVBT16( n, *(SVBT16*)p );
51 p+= 2;
52 }
53
Set_UInt32(sal_uInt8 * & p,sal_uInt32 n)54 inline void Set_UInt32( sal_uInt8 *& p, sal_uInt32 n )
55 {
56 UInt32ToSVBT32( n, *(SVBT32*)p );
57 p+= 4;
58 }
59
60 struct Word2CHPX
61 {
62 sal_uInt16 fBold:1;
63 sal_uInt16 fItalic:1;
64 sal_uInt16 fRMarkDel:1;
65 sal_uInt16 fOutline:1;
66 sal_uInt16 fFldVanish:1;
67 sal_uInt16 fSmallCaps:1;
68 sal_uInt16 fCaps:1;
69 sal_uInt16 fVanish:1;
70 sal_uInt16 fRMark:1;
71 sal_uInt16 fSpec:1;
72 sal_uInt16 fStrike:1;
73 sal_uInt16 fObj:1;
74 sal_uInt16 fBoldBi:1;
75 sal_uInt16 fItalicBi:1;
76 sal_uInt16 fBiDi:1;
77 sal_uInt16 fDiacUSico:1;
78 sal_uInt16 fsIco:1;
79 sal_uInt16 fsFtc:1;
80 sal_uInt16 fsHps:1;
81 sal_uInt16 fsKul:1;
82 sal_uInt16 fsPos:1;
83 sal_uInt16 fsSpace:1;
84 sal_uInt16 fsLid:1;
85 sal_uInt16 fsIcoBi:1;
86 sal_uInt16 fsFtcBi:1;
87 sal_uInt16 fsHpsBi:1;
88 sal_uInt16 fsLidBi:1;
89
90 sal_uInt16 ftc;
91 sal_uInt16 hps;
92 sal_uInt8 qpsSpace:6;
93 sal_uInt8 fSysVanish:1;
94 sal_uInt8 fNumRun:1;
95 sal_uInt8 ico:5;
96 sal_uInt8 kul:3;
97 sal_uInt8 hpsPos;
98 sal_uInt8 icoBi;
99 sal_uInt16 lid;
100 sal_uInt16 ftcBi;
101 sal_uInt16 hpsBi;
102 sal_uInt16 lidBi;
103 sal_uInt32 fcPic;
104
Word2CHPXWord2CHPX105 Word2CHPX()
106 {
107 fBold = 0;
108 fItalic = 0;
109 fRMarkDel = 0;
110 fOutline = 0;
111 fFldVanish = 0;
112 fSmallCaps = 0;
113 fCaps = 0;
114 fVanish = 0;
115 fRMark = 0;
116 fSpec = 0;
117 fStrike = 0;
118 fObj = 0;
119 fBoldBi = 0;
120 fItalicBi = 0;
121 fBiDi = 0;
122 fDiacUSico = 0;
123 fsIco = 0;
124 fsFtc = 0;
125 fsHps = 0;
126 fsKul = 0;
127 fsPos = 0;
128 fsSpace = 0;
129 fsLid = 0;
130 fsIcoBi = 0;
131 fsFtcBi = 0;
132 fsHpsBi = 0;
133 fsLidBi = 0;
134
135 ftc = 0;
136 hps = 0;
137 qpsSpace = 0;
138 fSysVanish = 0;
139 fNumRun = 0;
140 ico = 0;
141 kul = 0;
142 hpsPos = 0;
143 icoBi = 0;
144 lid = 0;
145 ftcBi = 0;
146 hpsBi = 0;
147 lidBi = 0;
148 fcPic = 0;
149 }
150 };
151
152
153 typedef sal_Int16 WW8_PN;
154 typedef sal_Int32 WW8_FC;
155 typedef sal_Int32 WW8_CP;
156
157 const WW8_FC WW8_FC_MAX = SAL_MAX_INT32;
158 const WW8_CP WW8_CP_MAX = SAL_MAX_INT32;
159
160 /** STD - STyle Definition
161
162 The STD contains the entire definition of a style.
163 It has two parts, a fixed-length base (cbSTDBase bytes long)
164 and a variable length remainder holding the name, and the upx and upe
165 arrays (a upx and upe for each type stored in the style, std.cupx)
166 Note that new fields can be added to the BASE of the STD without
167 invalidating the file format, because the STSHI contains the length
168 that is stored in the file. When reading STDs from an older version,
169 new fields will be zero.
170 */
171 struct WW8_STD
172 {
173 // Base part of STD:
174 sal_uInt16 sti : 12; // invariant style identifier
175 sal_uInt16 fScratch : 1; // spare field for any temporary use,
176 // always reset back to zero!
177 sal_uInt16 fInvalHeight : 1; // PHEs of all text with this style are wrong
178 sal_uInt16 fHasUpe : 1; // UPEs have been generated
179 sal_uInt16 fMassCopy : 1; // std has been mass-copied; if unused at
180 // save time, style should be deleted
181 sal_uInt16 sgc : 4; // style type code
182 sal_uInt16 istdBase : 12; // base style
183 sal_uInt16 cupx : 4; // # of UPXs (and UPEs)
184 sal_uInt16 istdNext : 12; // next style
185 sal_uInt16 bchUpe; // offset to end of upx's, start of upe's
186 //-------- jetzt neu:
187 // ab Ver8 gibts zwei Felder mehr:
188 sal_uInt16 fAutoRedef : 1; /* auto redefine style when appropriate */
189 sal_uInt16 fHidden : 1; /* hidden from UI? */
190 sal_uInt16 : 14; /* unused bits */
191
192 // Variable length part of STD:
193 // sal_uInt8 stzName[2]; /* sub-names are separated by chDelimStyle
194 // char grupx[];
195 // the UPEs are not stored on the file; they are a cache of the based-on
196 // chain
197 // char grupe[];
198 };
199
200 /** Basis zum Einlesen UND zum Arbeiten (wird jeweils unter schiedlich beerbt)
201 */
202 struct WW8_FFN_BASE // Font Descriptor
203 {
204 // ab Ver6
205 sal_uInt8 cbFfnM1; // 0x0 total length of FFN - 1.
206
207 sal_uInt8 prg: 2; // 0x1:03 pitch request
208 sal_uInt8 fTrueType : 1; // 0x1:04 when 1, font is a TrueType font
209 // 0x1:08 reserved
210 sal_uInt8 ff : 3; // 0x1:70 font family id
211 // 0x1:80 reserved
212
213 short wWeight; // 0x2 base weight of font
214 sal_uInt8 chs; // 0x4 character set identifier
215 sal_uInt8 ibszAlt; // 0x5 index into ffn.szFfn to the name of the alternate font
216 };
217
218 /** Hiermit arbeiten wir im Parser (und Dumper)
219 */
220 struct WW8_FFN : public WW8_FFN_BASE
221 {
222 // ab Ver8 als Unicode
223 String sFontname;// 0x6 bzw. 0x40 ab Ver8 zero terminated string that
224 // records name of font.
225 // Maximal size of szFfn is 65 characters.
226 // Vorsicht: Dieses Array kann auch kleiner sein!!!
227 // Possibly followed by a second sz which records the
228 // name of an alternate font to use if the first named
229 // font does not exist on this system.
230 };
231
232
233
234 struct WW8_BRCVer6 // alter Border Code
235 {
236 SVBT16 aBits1;
237 // sal_uInt16 dxpLineWidth : 3;// 0007 When dxpLineWidth is 0, 1, 2, 3, 4, or 5, this field is the width of
238 // a single line of border in units of 0.75 points
239 // Must be nonzero when brcType is nonzero.
240 // 6 == dotted, 7 == dashed.
241 // sal_uInt16 brcType : 2; // 0018 border type code: 0 == none, 1 == single, 2 == thick, 3 == double
242 // sal_uInt16 fShadow : 1; // 0020 when 1, border is drawn with shadow. Must be 0 when BRC is a substructure of the TC
243 // sal_uInt16 ico : 5; // 07C0 color code (see chp.ico)
244 // sal_uInt16 dxpSpace : 5; // F800 width of space to maintain between border and text within border.
245 // Must be 0 when BRC is a substructure of the TC. Stored in points for Windows.
246 };
247
248 class WW8_BRC // Border Code
249 {
250 public:
251 SVBT16 aBits1;
252 SVBT16 aBits2;
253 // sal_uInt16 dxpLineWidth : 3;// 0007 When dxpLineWidth is 0, 1, 2, 3, 4, or 5, this field is the width of
254 // a single line of border in units of 0.75 points
255 // Must be nonzero when brcType is nonzero.
256 // 6 == dotted, 7 == dashed.
257 // sal_uInt16 brcType : 2; // 0018 border type code: 0 == none, 1 == single, 2 == thick, 3 == double
258 // sal_uInt16 fShadow : 1; // 0020 when 1, border is drawn with shadow. Must be 0 when BRC is a substructure of the TC
259 // sal_uInt16 ico : 5; // 07C0 color code (see chp.ico)
260 // sal_uInt16 dxpSpace : 5; // F800 width of space to maintain between border and text within border.
261 // Must be 0 when BRC is a substructure of the TC. Stored in points for Windows.
WW8_BRC()262 WW8_BRC()
263 {
264 memset(aBits1, 0, sizeof(aBits1));
265 memset(aBits2, 0, sizeof(aBits2));
266 }
267 short DetermineBorderProperties (bool bVer67, short *pSpace=0,
268 sal_uInt8 *pCol=0, short *pIdx=0) const;
269 bool IsEmpty(bool bVer67) const;
270 bool IsZeroed(bool bVer67) const;
271 bool IsBlank() const;
272 };
273
274 typedef WW8_BRC WW8_BRC5[5]; // 5 * Border Code
275
276 enum BRC_Sides
277 {
278 WW8_TOP = 0, WW8_LEFT = 1, WW8_BOT = 2, WW8_RIGHT = 3, WW8_BETW = 4
279 };
280
281 class WW8_BordersSO // for StarOffice-Border Code
282 {
283 public:
284 sal_uInt16 mnOut;
285 sal_uInt16 mnIn;
286 sal_uInt16 mnDist;
287 public:
288 enum eBorderCode
289 {
290 single0, single1, single2, single3, single4, single5,
291 double0, double1, double2, double3, double4, double5, double6,
292 double7, double8, double9, double10,
293 none
294 };
295 static const WW8_BordersSO &Get0x01LineMatch(eBorderCode nIdx);
296 };
297
298 /*
299 Document Typography Info (DOPTYPOGRAPHY) These options are Far East only,
300 and are accessible through the Typography tab of the Tools/Options dialog.
301 */
302 class WW8DopTypography
303 {
304 public:
305 void ReadFromMem(sal_uInt8 *&pData);
306 void WriteToMem(sal_uInt8 *&pData) const;
307
308 //Maps what I think is the language this is to affect to the OOo language
309 sal_uInt16 GetConvertedLang() const;
310
311 sal_uInt16 fKerningPunct : 1; // true if we're kerning punctuation
312 sal_uInt16 iJustification : 2; // Kinsoku method of justification:
313 // 0 = always expand
314 // 1 = compress punctuation
315 // 2 = compress punctuation and kana.
316 sal_uInt16 iLevelOfKinsoku : 2; // Level of Kinsoku:
317 // 0 = Level 1
318 // 1 = Level 2
319 // 2 = Custom
320 sal_uInt16 f2on1 : 1; // 2-page-on-1 feature is turned on.
321 sal_uInt16 reserved1 : 4; // in 97 its marked as reserved BUT
322 sal_uInt16 reserved2 : 6; // reserved ?
323 //we find that the following applies,
324 //2 == Japanese
325 //4 == Chinese (VR...
326 //6 == Korean
327 //8 == Chinese (Ta...
328 //perhaps a bit field where the DOP can possibly relate to more than
329 //one language at a time, nevertheless MS seems to have painted
330 //themselves into a small corner with one DopTypography for the
331 //full document, might not matter all that much though ?
332
333 enum RuleLengths {nMaxFollowing = 101, nMaxLeading = 51};
334 static const sal_Unicode * GetJapanNotBeginLevel1();
335 static const sal_Unicode * GetJapanNotEndLevel1();
336
337 sal_Int16 cchFollowingPunct; // length of rgxchFPunct
338 sal_Int16 cchLeadingPunct; // length of rgxchLPunct
339
340 // array of characters that should never appear at the start of a line
341 sal_Unicode rgxchFPunct[nMaxFollowing];
342 // array of characters that should never appear at the end of a line
343 sal_Unicode rgxchLPunct[nMaxLeading];
344 };
345
346 struct WW8_DOGRID
347 {
348 short xaGrid; // x-coord of the upper left-hand corner of the grid
349 short yaGrid; // y-coord of the upper left-hand corner of the grid
350 short dxaGrid; // width of each grid square
351 short dyaGrid; // height of each grid square
352
353
354
355 /* a c h t u n g : es duerfen keine solchen Bitfelder ueber einen eingelesenes Byte-Array
356 gelegt werden!!
357 stattdessen ist ein aBits1 darueber zu legen, das mit & auszulesen ist
358 GRUND: Compiler auf Intel und Sparc sortieren die Bits unterschiedlich
359 */
360
361
362
363 short dyGridDisplay:7; // the number of grid squares (in the y direction)
364 // between each gridline drawn on the screen. 0 means
365 // don't display any gridlines in the y direction.
366 short fTurnItOff :1; // suppress display of gridlines
367 short dxGridDisplay:7; // the number of grid squares (in the x direction)
368 // between each gridline drawn on the screen. 0 means
369 // don't display any gridlines in the y direction.
370 short fFollowMargins:1; // if true, the grid will start at the left and top
371 // margins and ignore xaGrid and yaGrid.
372 };
373
374 struct WW8_PIC
375 {
376 sal_Int32 lcb; // 0x0 number of bytes in the PIC structure plus size of following picture data which may be a Window's metafile, a bitmap, or the filename of a TIFF file.
377 sal_uInt16 cbHeader; // 0x4 number of bytes in the PIC (to allow for future expansion).
378 struct {
379 sal_Int16 mm; // 0x6 int
380 sal_Int16 xExt; // 0x8 int
381 sal_Int16 yExt; // 0xa int
382 sal_Int16 hMF; // 0xc int
383 }MFP;
384 // sal_uInt8 bm[14]; // 0xe BITMAP(14 bytes) Window's bitmap structure when PIC describes a BITMAP.
385 sal_uInt8 rcWinMF[14]; // 0xe rc (rectangle - 8 bytes) rect for window origin
386 // and extents when metafile is stored -- ignored if 0
387 sal_Int16 dxaGoal; // 0x1c horizontal measurement in twips of the rectangle the picture should be imaged within.
388 sal_Int16 dyaGoal; // 0x1e vertical measurement in twips of the rectangle the picture should be imaged within.
389 sal_uInt16 mx; // 0x20 horizontal scaling factor supplied by user in .1% units.
390 sal_uInt16 my; // 0x22 vertical scaling factor supplied by user in .1% units.
391 sal_Int16 dxaCropLeft; // 0x24 the amount the picture has been cropped on the left in twips.
392 sal_Int16 dyaCropTop; // 0x26 the amount the picture has been cropped on the top in twips.
393 sal_Int16 dxaCropRight; // 0x28 the amount the picture has been cropped on the right in twips.
394 sal_Int16 dyaCropBottom;// 0x2a the amount the picture has been cropped on the bottom in twips.
395 sal_Int16 brcl : 4; // 000F Obsolete, superseded by brcTop, etc. In
396 sal_Int16 fFrameEmpty : 1; // 0010 picture consists of a single frame
397 sal_Int16 fBitmap : 1; // 0020 ==1, when picture is just a bitmap
398 sal_Int16 fDrawHatch : 1; // 0040 ==1, when picture is an active OLE object
399 sal_Int16 fError : 1; // 0080 ==1, when picture is just an error message
400 sal_Int16 bpp : 8; // FF00 bits per pixel, 0 = unknown
401 WW8_BRC rgbrc[4];
402 // BRC brcTop; // 0x2e specification for border above picture
403 // BRC brcLeft; // 0x30 specification for border to the left
404 // BRC brcBottom; // 0x32 specification for border below picture
405 // BRC brcRight; // 0x34 specification for border to the right
406 sal_Int16 dxaOrigin; // 0x36 horizontal offset of hand annotation origin
407 sal_Int16 dyaOrigin; // 0x38 vertical offset of hand annotation origin
408 // sal_uInt8 rgb[]; // 0x3a variable array of bytes containing Window's metafile, bitmap or TIFF file filename.
409 };
410
411 struct WW8_PIC_SHADOW
412 {
413 SVBT32 lcb; // 0x0 number of bytes in the PIC structure plus size of following picture data which may be a Window's metafile, a bitmap, or the filename of a TIFF file.
414 SVBT16 cbHeader; // 0x4 number of bytes in the PIC (to allow for future expansion).
415 struct {
416 SVBT16 mm; // 0x6 int
417 SVBT16 xExt; // 0x8 int
418 SVBT16 yExt; // 0xa int
419 SVBT16 hMF; // 0xc int
420 }MFP;
421 // SVBT8 bm[14]; // 0xe BITMAP(14 bytes) Window's bitmap structure when PIC describes a BITMAP.
422 SVBT8 rcWinMF[14]; // 0xe rc (rectangle - 8 bytes) rect for window origin
423 // and extents when metafile is stored -- ignored if 0
424 SVBT16 dxaGoal; // 0x1c horizontal measurement in twips of the rectangle the picture should be imaged within.
425 SVBT16 dyaGoal; // 0x1e vertical measurement in twips of the rectangle the picture should be imaged within.
426 SVBT16 mx; // 0x20 horizontal scaling factor supplied by user in .1% units.
427 SVBT16 my; // 0x22 vertical scaling factor supplied by user in .1% units.
428 SVBT16 dxaCropLeft; // 0x24 the amount the picture has been cropped on the left in twips.
429 SVBT16 dyaCropTop; // 0x26 the amount the picture has been cropped on the top in twips.
430 SVBT16 dxaCropRight; // 0x28 the amount the picture has been cropped on the right in twips.
431 SVBT16 dyaCropBottom;// 0x2a the amount the picture has been cropped on the bottom in twips.
432 SVBT8 aBits1; //0x2c
433 SVBT8 aBits2;
434 // WW8_BRC rgbrc[4];
435 // BRC brcTop; // 0x2e specification for border above picture
436 // BRC brcLeft; // 0x30 specification for border to the left
437 // BRC brcBottom; // 0x32 specification for border below picture
438 // BRC brcRight; // 0x34 specification for border to the right
439 // SVBT16 dxaOrigin; // 0x36 horizontal offset of hand annotation origin
440 // SVBT16 dyaOrigin; // 0x38 vertical offset of hand annotation origin
441 // SVBT8 rgb[]; // 0x3a variable array of bytes containing Window's metafile, bitmap or TIFF file filename.
442 };
443
444
445 struct WW8_TBD
446 {
447 SVBT8 aBits1;
448 // sal_uInt8 jc : 3; // 0x07 justification code: 0=left tab, 1=centered tab, 2=right tab, 3=decimal tab, 4=bar
449 // sal_uInt8 tlc : 3; // 0x38 tab leader code: 0=no leader, 1=dotted leader,
450 // 2=hyphenated leader, 3=single line leader, 4=heavy line leader
451 // * int :2 C0 reserved
452 };
453
454 struct WW8_TCell // hiermit wird weitergearbeitet (entspricht weitestgehend dem Ver8-Format)
455 {
456 sal_uInt8 bFirstMerged : 1;// 0001 set to 1 when cell is first cell of a range of cells that have been merged.
457 sal_uInt8 bMerged : 1;// 0002 set to 1 when cell has been merged with preceding cell.
458 sal_uInt8 bVertical : 1;// set to 1 when cell has vertical text flow
459 sal_uInt8 bBackward : 1;// for a vertical table cell, text flow is bottom to top when 1 and is bottom to top when 0.
460 sal_uInt8 bRotateFont : 1;// set to 1 when cell has rotated characters (i.e. uses @font)
461 sal_uInt8 bVertMerge : 1;// set to 1 when cell is vertically merged with the cell(s) above and/or below. When cells are vertically merged, the display area of the merged cells are consolidated. The consolidated area is used to display the contents of the first vertically merged cell (the cell with fVertRestart set to 1), and all other vertically merged cells (those with fVertRestart set to 0) must be empty. Cells can only be merged vertically if their left and right boundaries are (nearly) identical (i.e. if corresponding entries in rgdxaCenter of the table rows differ by at most 3).
462 sal_uInt8 bVertRestart : 1;// set to 1 when the cell is the first of a set of vertically merged cells. The contents of a cell with fVertStart set to 1 are displayed in the consolidated area belonging to the entire set of vertically merged cells. Vertically merged cells with fVertRestart set to 0 must be empty.
463 sal_uInt8 nVertAlign : 2;// specifies the alignment of the cell contents relative to text flow (e.g. in a cell with bottom to top text flow and bottom vertical alignment, the text is shifted horizontally to match the cell's right boundary):
464 // 0 top
465 // 1 center
466 // 2 bottom
467 sal_uInt16 fUnused : 7;// reserved - nicht loeschen: macht das sal_uInt16 voll !!
468
469 WW8_BRC rgbrc[4]; // border codes
470 //notational convenience for referring to brcTop, brcLeft, etc fields.
471 // BRC brcTop; // specification of the top border of a table cell
472 // BRC brcLeft; // specification of left border of table row
473 // BRC brcBottom; // specification of bottom border of table row
474 // BRC brcRight; // specification of right border of table row.
475 };
476 // cbTC (count of bytes of a TC) is 18(decimal), 12(hex).
477
478
479 struct WW8_TCellVer6 // wird aus der Datei gelesen
480 {
481 SVBT8 aBits1Ver6;
482 SVBT8 aBits2Ver6;
483 // sal_uInt16 fFirstMerged : 1;// 0001 set to 1 when cell is first cell of a range of cells that have been merged.
484 // sal_uInt16 fMerged : 1; // 0002 set to 1 when cell has been merged with preceding cell.
485 // sal_uInt16 fUnused : 14; // FFFC reserved
486 WW8_BRCVer6 rgbrcVer6[4];
487 // notational convenience for referring to brcTop, brcLeft, etc fields:
488 // BRC brcTop; // specification of the top border of a table cell
489 // BRC brcLeft; // specification of left border of table row
490 // BRC brcBottom; // specification of bottom border of table row
491 // BRC brcRight; // specification of right border of table row.
492 };
493 // cbTC (count of bytes of a TC) is 10(decimal), A(hex).
494
495 struct WW8_TCellVer8 // wird aus der Datei gelesen
496 {
497 SVBT16 aBits1Ver8; // Dokumentation siehe oben unter WW8_TCell
498 SVBT16 aUnused; // reserve
499 WW8_BRC rgbrcVer8[4]; // Dokumentation siehe oben unter WW8_TCell
500 };
501 // cbTC (count of bytes of a TC) is 20(decimal), 14(hex).
502
503
504 struct WW8_SHD // struct SHD fehlt in der Beschreibung
505 {
506 private:
507 sal_uInt16 maBits;
508 // sal_uInt16 nFore : 5; // 0x001f ForegroundColor
509 // sal_uInt16 nBack : 5; // 0x03e0 BackgroundColor
510 // sal_uInt16 nStyle : 5; // 0x7c00 Percentage and Style
511 // sal_uInt16 nDontKnow : 1; // 0x8000 ??? ab Ver8: ebenfalls fuer Style
512
513 public:
WW8_SHDWW8_SHD514 WW8_SHD() : maBits(0) {}
515
GetForeWW8_SHD516 sal_uInt8 GetFore() const { return (sal_uInt8)( maBits & 0x1f); }
GetBackWW8_SHD517 sal_uInt8 GetBack() const { return (sal_uInt8)((maBits >> 5 ) & 0x1f); }
GetStyleWW8_SHD518 sal_uInt8 GetStyle(bool bVer67) const
519 { return (sal_uInt8)((maBits >> 10) & ( bVer67 ? 0x1f : 0x3f ) ); }
520
GetValueWW8_SHD521 sal_uInt16 GetValue() const { return maBits; }
522
SetValueWW8_SHD523 void SetValue(sal_uInt16 nVal) { maBits = nVal; }
SetWWValueWW8_SHD524 void SetWWValue(SVBT16 nVal) { maBits = SVBT16ToShort(nVal); }
525
SetForeWW8_SHD526 void SetFore(sal_uInt8 nVal)
527 {
528 maBits &= 0xffe0;
529 maBits |= (nVal & 0x1f);
530 }
SetBackWW8_SHD531 void SetBack(sal_uInt8 nVal)
532 {
533 maBits &= 0xfc1f;
534 maBits |= (nVal & 0x1f) << 5;
535 }
SetStyleWW8_SHD536 void SetStyle(bool bVer67, sal_uInt8 nVal)
537 {
538 if (bVer67)
539 {
540 maBits &= 0x83ff;
541 maBits |= (nVal & 0x1f) << 10;
542 }
543 else
544 {
545 maBits &= 0x03ff;
546 maBits |= (nVal & 0x2f) << 10;
547 }
548 }
549 };
550
551 struct WW8_ANLV
552 {
553 SVBT8 nfc; // 0 number format code, 0=Arabic, 1=Upper case Roman, 2=Lower case Roman
554 // 3=Upper case Letter, 4=Lower case letter, 5=Ordinal
555 SVBT8 cbTextBefore; // 1 offset into anld.rgch limit of prefix text
556 SVBT8 cbTextAfter; // 2
557 SVBT8 aBits1;
558 // sal_uInt8 jc : 2; // 3 : 0x03 justification code, 0=left, 1=center, 2=right, 3=left and right justify
559 // sal_uInt8 fPrev : 1; // 0x04 when ==1, include previous levels
560 // sal_uInt8 fHang : 1; // 0x08 when ==1, number will be displayed using a hanging indent
561 // sal_uInt8 fSetBold : 1; // 0x10 when ==1, boldness of number will be determined by anld.fBold.
562 // sal_uInt8 fSetItalic : 1;// 0x20 when ==1, italicness of number will be determined by anld.fItalic
563 // sal_uInt8 fSetSmallCaps : 1;// 0x40 when ==1, anld.fSmallCaps will determine whether number will be displayed in small caps or not.
564 // sal_uInt8 fSetCaps : 1; // 0x80 when ==1, anld.fCaps will determine whether number will be displayed capitalized or not
565 SVBT8 aBits2;
566 // sal_uInt8 fSetStrike : 1;// 4 : 0x01 when ==1, anld.fStrike will determine whether the number will be displayed using strikethrough or not.
567 // sal_uInt8 fSetKul : 1; // 0x02 when ==1, anld.kul will determine the underlining state of the autonumber.
568 // sal_uInt8 fPrevSpace : 1;// 0x04 when ==1, autonumber will be displayed with a single prefixing space character
569 // sal_uInt8 fBold : 1; // 0x08 determines boldness of autonumber when anld.fSetBold == 1.
570 // sal_uInt8 fItalic : 1; // 0x10 determines italicness of autonumber when anld.fSetItalic == 1.
571 // sal_uInt8 fSmallCaps : 1;// 0x20 determines whether autonumber will be displayed using small caps when anld.fSetSmallCaps == 1.
572 // sal_uInt8 fCaps : 1; // 0x40 determines whether autonumber will be displayed using caps when anld.fSetCaps == 1.
573 // sal_uInt8 fStrike : 1; // 0x80 determines whether autonumber will be displayed using caps when anld.fSetStrike == 1.
574 SVBT8 aBits3;
575 // sal_uInt8 kul : 3; // 5 : 0x07 determines whether autonumber will be displayed with underlining when anld.fSetKul == 1.
576 // sal_uInt8 ico : 5; // 0xF1 color of autonumber
577 SVBT16 ftc; // 6 font code of autonumber
578 SVBT16 hps; // 8 font half point size (or 0=auto)
579 SVBT16 iStartAt; // 0x0a starting value (0 to 65535)
580 SVBT16 dxaIndent; // 0x0c *short?* *sal_uInt16?* width of prefix text (same as indent)
581 SVBT16 dxaSpace; // 0x0e minimum space between number and paragraph
582 };
583 // *cbANLV (count of bytes of ANLV) is 16 (decimal), 10(hex).
584
585 struct WW8_ANLD
586 {
587 WW8_ANLV eAnlv; // 0
588 SVBT8 fNumber1; // 0x10 number only 1 item per table cell
589 SVBT8 fNumberAcross; // 0x11 number across cells in table rows(instead of down)
590 SVBT8 fRestartHdn; // 0x12 restart heading number on section boundary
591 SVBT8 fSpareX; // 0x13 unused( should be 0)
592 sal_uInt8 rgchAnld[32]; // 0x14 characters displayed before/after autonumber
593 };
594
595 struct WW8_OLST
596 {
597 WW8_ANLV rganlv[9]; // 0 an array of 9 ANLV structures (heading levels)
598 SVBT8 fRestartHdr; // 0x90 when ==1, restart heading on section break
599 SVBT8 fSpareOlst2; // 0x91 reserved
600 SVBT8 fSpareOlst3; // 0x92 reserved
601 SVBT8 fSpareOlst4; // 0x93 reserved
602 sal_uInt8 rgch[64]; // 0x94 array of 64 chars text before/after number
603 };
604 // cbOLST is 212(decimal), D4(hex).
605
606 #if 0
607 struct ANLV
608 {
609 ALNV();
610 void ReadFromMem(const sal_uInt8 *&pData);
611 sal_uInt8 nfc;
612 sal_uInt8 cbTextBefore;
613 sal_uInt8 cbTextAfter;
614 sal_uInt8 jc : 2;
615 sal_uInt8 fPrev : 1;
616 sal_uInt8 fHang : 1;
617 sal_uInt8 fSetBold : 1;
618 sal_uInt8 fSetItalic : 1;
619 sal_uInt8 fSetSmallCaps : 1;
620 sal_uInt8 fSetCaps : 1;
621 sal_uInt8 fSetStrike : 1;
622 sal_uInt8 fSetKul : 1;
623 sal_uInt8 fPrevSpace : 1;
624 sal_uInt8 fBold : 1;
625 sal_uInt8 fItalic : 1;
626 sal_uInt8 fSmallCaps : 1;
627 sal_uInt8 fCaps : 1;
628 sal_uInt8 fStrike : 1;
629 sal_uInt8 kul : 3;
630 sal_uInt8 ico : 5;
631 sal_uInt16 ftc;
632 sal_uInt16 hps;
633 sal_uInt16 iStartAt;
634 sal_uInt16 dxaIndent;
635 sal_uInt16 dxaSpace;
636 };
637
638 struct OLST
639 {
640 OLST();
641 void ReadFromMem(const sal_uInt8 *&pData, bool bVer67)
642 ANLV rganlv[9]; // 0 an array of 9 ANLV structures (heading levels)
643 sal_uInt8 fRestartHdr; // when ==1, restart heading on section break
644 sal_uInt8 fSpareOlst2; // reserved
645 sal_uInt8 fSpareOlst3; // reserved
646 sal_uInt8 fSpareOlst4; // reserved
647 sal_uInt16 rgxch[64]; // array of 64 chars text before/after number
648 #if 0
649 sal_uInt16 rgxch[32]; // array of 32 chars text before/after number
650 sal_uInt8 rgch[64]; // array of 64 chars text before/after number
651 #endif
652 };
653 #endif
654
655 struct WW8_FDOA
656 {
657 SVBT32 fc; // 0 FC pointing to drawing object data
658 SVBT16 ctxbx; // 4 count of textboxes in the drawing object
659 };
660
661 struct WW8_DO
662 {
663 SVBT16 dok; // 0 Drawn Object Kind, currently this is always 0
664 SVBT16 cb; // 2 size (count of bytes) of the entire DO
665 SVBT8 bx; // 4 x position relative to anchor CP
666 SVBT8 by; // 5 y position relative to anchor CP
667 SVBT16 dhgt; // 6 height of DO
668 SVBT16 aBits1;
669 // sal_uInt16 fAnchorLock : 1; // 8 1 if the DO anchor is locked
670 // sal_uInt8[] rgdp; // 0xa variable length array of drawing primitives
671 };
672
673 struct WW8_DPHEAD
674 {
675 SVBT16 dpk; // 0 Drawn Primitive Kind REVIEW davebu
676 // 0=start of grouping, 1=line, 2=textbox, 3=rectangle,
677 // 4=arc, 5=elipse, 6=polyline, 7=callout textbox,
678 // 8=end of grouping, 9=sample primitive holding default values
679 SVBT16 cb; // 2 size (count of bytes) of this DP
680 SVBT16 xa; // 4 These 2 points describe the rectangle
681 SVBT16 ya; // 6 enclosing this DP relative to the origin of
682 SVBT16 dxa; // 8 the DO
683 SVBT16 dya; // 0xa
684 };
685
686
687 struct WW8_DP_LINETYPE
688 {
689 SVBT32 lnpc; // LiNe Property Color -- RGB color value
690 SVBT16 lnpw; // line property weight in twips
691 SVBT16 lnps; // line property style : 0=Solid, 1=Dashed
692 // 2=Dotted, 3=Dash Dot, 4=Dash Dot Dot, 5=Hollow
693 };
694
695 struct WW8_DP_SHADOW // Schattierung!
696 {
697 SVBT16 shdwpi; // Shadow Property Intensity
698 SVBT16 xaOffset; // x offset of shadow
699 SVBT16 yaOffset; // y offset of shadow
700 };
701
702 struct WW8_DP_FILL
703 {
704 SVBT32 dlpcFg; // FiLl Property Color ForeGround -- RGB color value
705 SVBT32 dlpcBg; // Property Color BackGround -- RGB color value
706 SVBT16 flpp; // FiLl Property Pattern REVIEW davebu
707 };
708
709 struct WW8_DP_LINEEND
710 {
711 SVBT16 aStartBits;
712 // sal_uInt16 eppsStart : 2; // Start EndPoint Property Style
713 // 0=None, 1=Hollow, 2=Filled
714 // sal_uInt16 eppwStart : 2; // Start EndPoint Property Weight
715 // sal_uInt16 epplStart : 2; // Start EndPoint Property length
716 // sal_uInt16 dummyStart : 10; // Alignment
717 SVBT16 aEndBits;
718 // sal_uInt16 eppsEnd : 2; // End EndPoint Property Style
719 // sal_uInt16 eppwEnd : 2; // End EndPoint Property Weight
720 // sal_uInt16 epplEnd : 2; // End EndPoint Property length
721 // sal_uInt16 dummyEnd : 10; // Alignment
722 };
723
724 struct WW8_DP_LINE
725 {
726 // WW8_DPHEAD dphead; // 0 Common header for a drawing primitive
727 SVBT16 xaStart; // starting point for line
728 SVBT16 yaStart; //
729 SVBT16 xaEnd; // ending point for line
730 SVBT16 yaEnd;
731 WW8_DP_LINETYPE aLnt;
732 WW8_DP_LINEEND aEpp;
733 WW8_DP_SHADOW aShd;
734 };
735
736 struct WW8_DP_TXTBOX
737 {
738 WW8_DP_LINETYPE aLnt;
739 WW8_DP_FILL aFill;
740 WW8_DP_SHADOW aShd;
741 SVBT16 aBits1;
742 // sal_uInt16 fRoundCorners : 1; //0x24 0001 1 if the textbox has rounded corners
743 // sal_uInt16 zaShape : 15; // 0x24 000e REVIEW davebu
744 SVBT16 dzaInternalMargin; // 0x26 REVIEW davebu
745 };
746
747 struct WW8_DP_RECT
748 {
749 WW8_DP_LINETYPE aLnt;
750 WW8_DP_FILL aFill;
751 WW8_DP_SHADOW aShd;
752 SVBT16 aBits1;
753 // sal_uInt16 fRoundCorners : 1; // 0x24 0001 1 if the textbox has rounded corners
754 // sal_uInt16 zaShape : 15; // 0x24 000e REVIEW davebu
755 };
756
757 struct WW8_DP_ARC
758 {
759 WW8_DP_LINETYPE aLnt;
760 WW8_DP_FILL aFill;
761 WW8_DP_SHADOW aShd;
762 SVBT8 fLeft; // 0x24 00ff REVIEW davebu
763 SVBT8 fUp; // 0x24 ff00 REVIEW davebu
764 // sal_uInt16 fLeft : 8; // 0x24 00ff REVIEW davebu
765 // sal_uInt16 fUp : 8; // 0x24 ff00 REVIEW davebu
766 };
767
768 struct WW8_DP_ELIPSE
769 {
770 WW8_DP_LINETYPE aLnt;
771 WW8_DP_FILL aFill;
772 WW8_DP_SHADOW aShd;
773 };
774
775 struct WW8_DP_POLYLINE
776 {
777 WW8_DP_LINETYPE aLnt;
778 WW8_DP_FILL aFill;
779 WW8_DP_LINEEND aEpp;
780 WW8_DP_SHADOW aShd;
781 SVBT16 aBits1;
782 // sal_uInt16 fPolygon : 1; // 0x28 0001 1 if this is a polygon
783 // sal_uInt16 cpt : 15; // 0x28 00fe count of points
784 // short xaFirst; // 0x2a These are the endpoints of the first line.
785 // short yaFirst; // 0x2c
786 // short xaEnd; // 0x2e
787 // short yaEnd; // 0x30
788 // short rgpta[]; // 0x32 An array of xa,ya pairs for the remaining points
789 };
790
791 struct WW8_DP_CALLOUT_TXTBOX
792 {
793 SVBT16 flags; // 0x0c REVIEW davebu flags
794 SVBT16 dzaOffset; // 0x0e REVIEW davebu
795 SVBT16 dzaDescent; // 0x10 REVIEW davebu
796 SVBT16 dzaLength; // 0x12 REVIEW davebu
797 WW8_DPHEAD dpheadTxbx; // 0x14 DPHEAD for a textbox
798 WW8_DP_TXTBOX dptxbx; // 0x20 DP for a textbox
799 WW8_DPHEAD dpheadPolyLine; // 0x4c DPHEAD for a Polyline
800 WW8_DP_POLYLINE dpPolyLine; // 0x48 DP for a polyline
801 };
802
803 struct WW8_PCD
804 {
805 SVBT8 aBits1;
806 // sal_uInt8 fNoParaLast : 1; // when 1, means that piece contains no end of paragraph marks.
807 // sal_uInt8 fPaphNil : 1; // used internally by Word
808 // sal_uInt8 fCopied : 1; // used internally by Word
809 // * int :5
810 SVBT8 aBits2; // fn int:8, used internally by Word
811 SVBT32 fc; // file offset of beginning of piece. The size of the
812 // ithpiece can be determined by subtracting rgcp[i] of
813 // the containing plcfpcd from its rgcp[i+1].
814 SVBT16 prm; // PRM contains either a single sprm or else an index number
815 // of the grpprl which contains the sprms that modify the
816 // properties of the piece.
817 };
818
819 // AnnoTation References Descriptor (ATRD)
820 struct WW8_ATRD // fuer die 8-Version
821 {
822 SVBT16 xstUsrInitl[ 10 ]; // pascal-style String holding initials
823 // of annotation author
824 SVBT16 ibst; // index into GrpXstAtnOwners
825 SVBT16 ak; // not used
826 SVBT16 grfbmc; // not used
827 SVBT32 ITagBkmk; // when not -1, this tag identifies the
828 // annotation bookmark that locates the
829 // range of CPs in the main document which
830 // this annotation references.
831 };
832
833 struct WW8_ATRDEXTRA
834 {
835 // --- Extended bit since Word 2002 --- //
836
837 SVBT32 dttm;
838 SVBT16 bf;
839 SVBT32 cDepth;
840 SVBT32 diatrdParent;
841 SVBT32 Discussitem;
842 };
843
844 struct WW67_ATRD // fuer die 6/7-Version
845 {
846 sal_Char xstUsrInitl[ 10 ]; // pascal-style String holding initials
847 // of annotation author
848 SVBT16 ibst; // index into GrpXstAtnOwners
849 SVBT16 ak; // not used
850 SVBT16 grfbmc; // not used
851 SVBT32 ITagBkmk; // when not -1, this tag identifies the
852 // annotation bookmark that locates the
853 // range of CPs in the main document which
854 // this annotation references.
855 };
856
857 struct WW8_TablePos
858 {
859 sal_Int16 nSp26;
860 sal_Int16 nSp27;
861 sal_Int16 nLeMgn;
862 sal_Int16 nRiMgn;
863 sal_Int16 nUpMgn;
864 sal_Int16 nLoMgn;
865 sal_uInt8 nSp29;
866 sal_uInt8 nSp37;
867 };
868
869 struct WW8_FSPA
870 {
871 public:
872 sal_Int32 nSpId; //Shape Identifier. Used in conjunction with the office art data (found via fcDggInfo in the FIB) to find the actual data for this shape.
873 sal_Int32 nXaLeft; //left of rectangle enclosing shape relative to the origin of the shape
874 sal_Int32 nYaTop; //top of rectangle enclosing shape relative to the origin of the shape
875 sal_Int32 nXaRight; //right of rectangle enclosing shape relative to the origin of the shape
876 sal_Int32 nYaBottom;//bottom of the rectangle enclosing shape relative to the origin of the shape
877 sal_uInt16 bHdr:1;
878 //0001 1 in the undo doc when shape is from the header doc, 0 otherwise (undefined when not in the undo doc)
879 sal_uInt16 nbx:2;
880 //0006 x position of shape relative to anchor CP
881 //0 relative to page margin
882 //1 relative to top of page
883 //2 relative to text (column for horizontal text; paragraph for vertical text)
884 //3 reserved for future use
885 sal_uInt16 nby:2;
886 //0018 y position of shape relative to anchor CP
887 //0 relative to page margin
888 //1 relative to top of page
889 //2 relative to text (paragraph for horizontal text; column for vertical text)
890 sal_uInt16 nwr:4;
891 //01E0 text wrapping mode
892 //0 like 2, but doesn't require absolute object
893 //1 no text next to shape
894 //2 wrap around absolute object
895 //3 wrap as if no object present
896 //4 wrap tightly around object
897 //5 wrap tightly, but allow holes
898 //6-15 reserved for future use
899 sal_uInt16 nwrk:4;
900 //1E00 text wrapping mode type (valid only for wrapping modes 2 and 4
901 //0 wrap both sides
902 //1 wrap only on left
903 //2 wrap only on right
904 //3 wrap only on largest side
905 sal_uInt16 bRcaSimple:1;
906 //2000 when set, temporarily overrides bx, by, forcing the xaLeft, xaRight, yaTop, and yaBottom fields to all be page relative.
907 sal_uInt16 bBelowText:1;
908 //4000
909 //1 shape is below text
910 //0 shape is above text
911 sal_uInt16 bAnchorLock:1;
912 //8000 1 anchor is locked
913 // 0 anchor is not locked
914 sal_Int32 nTxbx; //count of textboxes in shape (undo doc only)
915 public:
916 enum FSPAOrient {RelPgMargin, RelPageBorder, RelText};
917 };
918
919
920 struct WW8_FSPA_SHADOW // alle Member an gleicher Position und Groesse,
921 { // wegen: pF = (WW8_FSPA*)pFS;
922 SVBT32 nSpId;
923 SVBT32 nXaLeft;
924 SVBT32 nYaTop;
925 SVBT32 nXaRight;
926 SVBT32 nYaBottom;
927 SVBT16 aBits1;
928 SVBT32 nTxbx;
929 };
930
931 struct WW8_TXBXS
932 {
933 SVBT32 cTxbx_iNextReuse;
934 SVBT32 cReusable;
935 SVBT16 fReusable;
936 SVBT32 reserved;
937 SVBT32 ShapeId;
938 SVBT32 txidUndo;
939 };
940
941 struct WW8_STRINGID
942 {
943 // M.M. This is the extra data stored in the SttbfFnm
944 // For now I only need the String Id
945 SVBT16 nStringId;
946 SVBT16 reserved1;
947 SVBT16 reserved2;
948 SVBT16 reserved3;
949 };
950
951 struct WW8_WKB
952 {
953 // M.M. This is the WkbPLCF struct
954 // For now I only need the Link Id
955 SVBT16 reserved1;
956 SVBT16 reserved2;
957 SVBT16 reserved3;
958 SVBT16 nLinkId;
959 SVBT16 reserved4;
960 SVBT16 reserved5;
961 };
962
963 #ifdef SAL_W32
964 # pragma pack(pop)
965 #elif defined(SAL_OS2)
966 # pragma pack()
967 #endif
968
969 // Maximum number of columns according the WW8 specification
970 static const sal_uInt8 MAX_NO_OF_SEP_COLUMNS = 44;
971
972 struct SEPr
973 {
974 SEPr();
975 sal_uInt8 bkc;
976 sal_uInt8 fTitlePage;
977 sal_Int8 fAutoPgn;
978 sal_uInt8 nfcPgn;
979 sal_uInt8 fUnlocked;
980 sal_uInt8 cnsPgn;
981 sal_uInt8 fPgnRestart;
982 sal_uInt8 fEndNote;
983 sal_Int8 lnc;
984 sal_Int8 grpfIhdt;
985 sal_uInt16 nLnnMod;
986 sal_Int32 dxaLnn;
987 sal_Int16 dxaPgn;
988 sal_Int16 dyaPgn;
989 sal_Int8 fLBetween;
990 sal_Int8 vjc;
991 sal_uInt16 dmBinFirst;
992 sal_uInt16 dmBinOther;
993 sal_uInt16 dmPaperReq;
994 #if 0
995 28 1C brcTop BRC top page border
996
997 32 20 brcLeft BRC left page border
998
999 36 24 brcBottom BRC bottom page border
1000
1001 40 28 brcRight BRC right page border
1002 #endif
1003 sal_Int16 fPropRMark;
1004 sal_Int16 ibstPropRMark;
1005 sal_Int32 dttmPropRMark; //DTTM
1006 sal_Int32 dxtCharSpace;
1007 sal_Int32 dyaLinePitch;
1008 sal_uInt16 clm;
1009 sal_Int16 reserved1;
1010 sal_uInt8 dmOrientPage;
1011 sal_uInt8 iHeadingPgn;
1012 sal_uInt16 pgnStart;
1013 sal_Int16 lnnMin;
1014 sal_uInt16 wTextFlow;
1015 sal_Int16 reserved2;
1016 sal_uInt16 pgbApplyTo:3;
1017 sal_uInt16 pgbPageDepth:2;
1018 sal_Int16 pgbOffsetFrom:3;
1019 sal_Int16 :8;
1020 sal_uInt32 xaPage;
1021 sal_uInt32 yaPage;
1022 sal_uInt32 xaPageNUp;
1023 sal_uInt32 yaPageNUp;
1024 sal_uInt32 dxaLeft;
1025 sal_uInt32 dxaRight;
1026 sal_Int32 dyaTop;
1027 sal_Int32 dyaBottom;
1028 sal_uInt32 dzaGutter;
1029 sal_uInt32 dyaHdrTop;
1030 sal_uInt32 dyaHdrBottom;
1031 sal_Int16 ccolM1; // have to be less than MAX_NO_OF_SEP_COLUMNS according the WW8 specification
1032 sal_Int8 fEvenlySpaced;
1033 sal_Int8 reserved3;
1034 sal_uInt8 fBiDi;
1035 sal_uInt8 fFacingCol;
1036 sal_uInt8 fRTLGutter;
1037 sal_uInt8 fRTLAlignment;
1038 sal_Int32 dxaColumns;
1039
1040 // Fixed array - two entries for each SEP column to store width of column and spacing to next column.
1041 // At odd index values [1,3,5,...] the column widths are stored.
1042 // At even index values [2,4,6,...] the spacings to the next columns are stored.
1043 // Value at index 0 is initialized with 0 and used for easier interation on the array
1044 sal_Int32 rgdxaColumnWidthSpacing[MAX_NO_OF_SEP_COLUMNS*2 + 1];
1045
1046 sal_Int32 dxaColumnWidth;
1047 sal_uInt8 dmOrientFirst;
1048 sal_uInt8 fLayout;
1049 sal_Int16 reserved4;
1050 #if 0
1051 OLST olstAnm; //currently unused
1052 #endif
1053 };
1054
1055 namespace wwUtility
1056 {
1057 sal_uInt32 BGRToRGB(sal_uInt32 nColour);
RGBToBGR(sal_uInt32 nColour)1058 inline sal_uInt32 RGBToBGR(sal_uInt32 nColour) { return BGRToRGB(nColour); }
1059 }
1060
1061 #endif
1062
1063 /* vi:set tabstop=4 shiftwidth=4 expandtab: */
1064