filters

olefilters/powerpoint97/powerpoint.h
1/*
2 Copyright (C) 2000, S.R.Haque <shaheedhaque@hotmail.com>.
3 This file is part of the KDE project
4
5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Library General Public
7 License as published by the Free Software Foundation; either
8 version 2 of the License, or (at your option) any later version.
9
10 This library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Library General Public License for more details.
14
15 You should have received a copy of the GNU Library General Public License
16 along with this library; see the file COPYING.LIB. If not, write to
17 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18 Boston, MA 02110-1301, USA.
19
20DESCRIPTION
21
22 This is a generic parser for Microsoft Powerpoint documents. The output is
23 a series of callbacks (a.k.a. virtual functions) which the caller can
24 override as required.
25*/
26
27#ifndef POWERPOINT_H
28#define POWERPOINT_H
29
30
31#include <myfile.h>
32#include <tqdatastream.h>
33#include <tqptrlist.h>
34#include <tqmap.h>
35#include <pptSlide.h>
36
37typedef TQ_INT32 sint4; // signed 4-byte integral value
38typedef TQ_INT16 sint2; // signed 4-byte integral value
39typedef TQ_UINT32 uint4; // unsigned 4-byte integral value
40typedef TQ_UINT16 uint2; // 2-byte
41typedef TQ_INT8 bool1; // 1-byte boolean
42typedef TQ_UINT8 ubyte1; // unsigned byte value
43typedef uint2 psrType;
44typedef uint4 psrSize; // each record is preceded by
45// pssTypeType and pssSizeType.
46typedef uint2 psrInstance;
47typedef uint2 psrVersion;
48typedef uint4 psrReference; // Saved object reference
49//typedef TQPtrList<PptSlide> PptSlideList;
50
51class Powerpoint
52{
53public:
54
55 // Construction.
56
57 Powerpoint();
58 virtual ~Powerpoint();
59
60 // Called to parse the given file.
61
62 bool parse(
63 myFile &mainStream,
64 myFile &currentUser,
65 myFile &pictures);
66
67 typedef struct
68 {
69 unsigned type;
70 TQString data;
71 } SlideText;
72
73 typedef struct
74 {
75 unsigned persistentReference;
76 TQPtrList<SlideText> text;
77 } Slide;
78
79protected:
80
81 virtual void gotDrawing(
82 unsigned id,
83 TQString type,
84 unsigned length,
85 const char *data) = 0;
86 virtual void gotSlide(
87 PptSlide &slide) = 0;
88
89private:
90 Powerpoint(const Powerpoint &);
91 const Powerpoint &operator=(const Powerpoint &);
92
93 // Debug support.
94
95public:
96 static const int s_area;
97
98private:
99 myFile m_mainStream;
100 myFile m_pictures;
101 unsigned m_documentRef;
102 bool m_documentRefFound;
103 TQMap<unsigned, unsigned> m_persistentReferences;
104 unsigned m_editDepth;
105 enum
106 {
107 PASS_GET_SLIDE_REFERENCES,
108 PASS_GET_SLIDE_CONTENTS
109 } m_pass;
110 unsigned m_textType;
111
112 TQPtrList<PptSlide> m_slideList;
113 PptSlide* m_pptSlide;
114
115struct PSR_CurrentUserAtom
116{
117 uint4 size;
118 uint4 magic; // Magic number to ensure this is a PowerPoint file.
119 uint4 offsetToCurrentEdit; // Offset in main stream to current edit field.
120 uint2 lenUserName;
121 uint2 docFileVersion;
122 ubyte1 majorVersion;
123 ubyte1 minorVersion;
124};
125
126struct PSR_UserEditAtom
127{
128 sint4 lastSlideID; // slideID
129 uint4 version; // This is major/minor/build which did the edit
130 uint4 offsetLastEdit; // File offset of last edit
131 uint4 offsetPersistDirectory; // Offset to PersistPtrs for
132 // this file version.
133 uint4 documentRef;
134 uint4 maxPersistWritten; // Addr of last persist ref written to the file (max seen so far).
135 sint2 lastViewType; // enum view type
136};
137
138struct PSR_SSlideLayoutAtom
139{
140 sint4 geom;
141 ubyte1 placeholderId[8];
142};
143
144 PSR_CurrentUserAtom mCurrentUserAtom;
145 PSR_UserEditAtom mUserEditAtom;
146 PSR_UserEditAtom* mpLastUserEditAtom;
147 TQ_UINT32 mEditOffset;
148
149 // Common Header.
150
151 typedef struct
152 {
153 union
154 {
155 TQ_UINT16 info;
156 struct
157 {
158 TQ_UINT16 version: 4;
159 TQ_UINT16 instance: 12;
160 } fields;
161 } opcode;
162 TQ_UINT16 type;
163 TQ_UINT32 length;
164 } Header;
165
166 // Opcode handling and painter methods.
167
168 void walk(
169 TQ_UINT32 bytes,
170 TQDataStream &operands);
171 void walk(
172 TQ_UINT32 mainStreamOffset);
173 void walkRecord(
174 TQ_UINT32 bytes,
175 const unsigned char *operands);
176 void walkRecord(
177 TQ_UINT32 mainStreamOffset);
178 void walkReference(
179 TQ_UINT32 reference);
180 void skip(
181 TQ_UINT32 bytes,
182 TQDataStream &operands);
183 void invokeHandler(
184 Header &op,
185 TQ_UINT32 bytes,
186 TQDataStream &operands);
187 void walkDocument();
188
189 void opAnimationInfo(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
190 void opAnimationInfoAtom(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
191 void opArrayElementAtom(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
192 void opBaseTextPropAtom(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
193 void opBinaryTagData(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
194 void opBookmarkCollection(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
195 void opBookmarkEntityAtom(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
196 void opBookmarkSeedAtom(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
197 void opCharFormatAtom(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
198 void opClientSignal1(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
199 void opClientSignal2(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
200 void opColorSchemeAtom(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
201 void opCorePict(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
202 void opCorePictAtom(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
203 void opCString(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
204 void opCurrentUserAtom(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
205 void opDateTimeMCAtom(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
206 void opDefaultRulerAtom(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
207 void opDocRoutingSlip(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
208 void opDocument(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
209 void opDocumentAtom(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
210 void opDocViewInfo(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
211 void opEmFormatAtom(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
212 void opEndDocument(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
213 void opEnvironment(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
214 void opExAviMovie(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
215 void opExCDAudio(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
216 void opExCDAudioAtom(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
217 void opExControl(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
218 void opExControlAtom(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
219 void opExEmbed(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
220 void opExEmbedAtom(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
221 void opExHyperlink(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
222 void opExHyperlinkAtom(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
223 void opExLink(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
224 void opExLinkAtom(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
225 void opExLinkAtom_old(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
226 void opExMCIMovie(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
227 void opExMediaAtom(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
228 void opExMIDIAudio(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
229 void opExObjList(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
230 void opExObjListAtom(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
231 void opExObjRefAtom(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
232 void opExOleObj(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
233 void opExOleObjAtom(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
234 void opExOleObjStg(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
235 void opExPlain(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
236 void opExPlainAtom(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
237 void opExPlainLink(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
238 void opExPlainLinkAtom(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
239 void opExQuickTime(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
240 void opExQuickTimeMovie(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
241 void opExQuickTimeMovieData(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
242 void opExSubscription(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
243 void opExSubscriptionSection(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
244 void opExternalObject(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
245 void opExVideo(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
246 void opExWAVAudioEmbedded(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
247 void opExWAVAudioEmbeddedAtom(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
248 void opExWAVAudioLink(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
249 void opFontCollection(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
250 void opFontEmbedData(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
251 void opFontEntityAtom(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
252 void opFooterMCAtom(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
253 void opGenericDateMCAtom(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
254 void opGlineAtom(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
255 void opGLPointAtom(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
256 void opGpointAtom(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
257 void opGratioAtom(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
258 void opGrColor(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
259 void opGrColorAtom(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
260 void opGrectAtom(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
261 void opGscaling(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
262 void opGscalingAtom(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
263 void opGuideAtom(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
264 void opGuideList(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
265 void opHandout(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
266 void opHeaderMCAtom(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
267 void opHeadersFooters(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
268 void opHeadersFootersAtom(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
269 void opInt4ArrayAtom(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
270 void opInteractiveInfo(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
271 void opInteractiveInfoAtom(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
272 void opIRRAtom(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
273 void opList(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
274 void opListPlaceholder(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
275 void opMainMaster(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
276 void opMasterText(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
277 void opMetaFile(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
278 void opMsod(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
279 void opNamedShow(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
280 void opNamedShows(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
281 void opNamedShowSlides(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
282 void opNotes(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
283 void opNotesAtom(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
284 void opOEPlaceholderAtom(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
285 void opOEShape(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
286 void opOEShapeAtom(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
287 void opOutlineTextRefAtom(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
288 void opOutlineViewInfo(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
289 void opParaFormatAtom(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
290 void opPersistPtrFullBlock(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
291 void opPersistPtrIncrementalBlock(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
292 void opPersistPtrIncrementalBlock2(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
293 void opPowerPointStateInfoAtom(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
294 void opPPDrawing(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
295 void opPPDrawingGroup(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
296 void opPrintOptions(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
297 void opProgBinaryTag(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
298 void opProgStringTag(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
299 void opProgTags(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
300 void opPSS(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
301 void opRecolorEntryAtom(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
302 void opRecolorInfoAtom(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
303 void opRTFDateTimeMCAtom(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
304 void opRulerIndentAtom(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
305 void opRunArray(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
306 void opRunArrayAtom(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
307 void opScheme(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
308 void opSchemeAtom(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
309 void opSlide(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
310 void opSlideAtom(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
311 void opSlideBase(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
312 void opSlideBaseAtom(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
313 void opSlideList(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
314 void opSlideListWithText(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
315 void opSlideNumberMCAtom(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
316 void opSlidePersist(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
317 void opSlidePersistAtom(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
318 void opSlideViewInfo(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
319 void opSlideViewInfoAtom(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
320 void opSorterViewInfo(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
321 void opSound(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
322 void opSoundCollAtom(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
323 void opSoundCollection(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
324 void opSoundData(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
325 void opSrKinsoku(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
326 void opSrKinsokuAtom(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
327 void opSSDocInfoAtom(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
328 void opSSSlideLayoutAtom(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
329 void opSSSlideInfoAtom(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
330 void opStyleTextPropAtom(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
331 void opSubContainerCompleted(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
332 void opSubContainerException(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
333 void opSummary(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
334 void opTextBookmarkAtom(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
335 void opTextBytesAtom(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
336 void opTextCharsAtom(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
337 void opTextHeaderAtom(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
338 void opTextRulerAtom(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
339 void opTextSpecInfoAtom(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
340 void opTexture(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
341 void opTxCFStyleAtom(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
342 void opTxInteractiveInfoAtom(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
343 void opTxMasterStyleAtom(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
344 void opTxPFStyleAtom(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
345 void opTxSIStyleAtom(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
346 void opTypeFace(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
347 void opUserEditAtom(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
348 void opVBAInfo(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
349 void opVBAInfoAtom(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
350 void opVBASlideInfo(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
351 void opVBASlideInfoAtom(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
352 void opViewInfo(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
353 void opViewInfoAtom(Header &op, TQ_UINT32 bytes, TQDataStream &operands);
354};
355#endif