00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #ifndef POWERPOINT_H
00028 #define POWERPOINT_H
00029
00030
00031 #include <myfile.h>
00032 #include <qdatastream.h>
00033 #include <qptrlist.h>
00034 #include <qmap.h>
00035 #include <pptSlide.h>
00036
00037 typedef Q_INT32 sint4;
00038 typedef Q_INT16 sint2;
00039 typedef Q_UINT32 uint4;
00040 typedef Q_UINT16 uint2;
00041 typedef Q_INT8 bool1;
00042 typedef Q_UINT8 ubyte1;
00043 typedef uint2 psrType;
00044 typedef uint4 psrSize;
00045
00046 typedef uint2 psrInstance;
00047 typedef uint2 psrVersion;
00048 typedef uint4 psrReference;
00049
00050
00051 class Powerpoint
00052 {
00053 public:
00054
00055
00056
00057 Powerpoint();
00058 virtual ~Powerpoint();
00059
00060
00061
00062 bool parse(
00063 myFile &mainStream,
00064 myFile ¤tUser,
00065 myFile &pictures);
00066
00067 typedef struct
00068 {
00069 unsigned type;
00070 QString data;
00071 } SlideText;
00072
00073 typedef struct
00074 {
00075 unsigned persistentReference;
00076 QPtrList<SlideText> text;
00077 } Slide;
00078
00079 protected:
00080
00081 virtual void gotDrawing(
00082 unsigned id,
00083 QString type,
00084 unsigned length,
00085 const char *data) = 0;
00086 virtual void gotSlide(
00087 PptSlide &slide) = 0;
00088
00089 private:
00090 Powerpoint(const Powerpoint &);
00091 const Powerpoint &operator=(const Powerpoint &);
00092
00093
00094
00095 public:
00096 static const int s_area;
00097
00098 private:
00099 myFile m_mainStream;
00100 myFile m_pictures;
00101 unsigned m_documentRef;
00102 bool m_documentRefFound;
00103 QMap<unsigned, unsigned> m_persistentReferences;
00104 unsigned m_editDepth;
00105 enum
00106 {
00107 PASS_GET_SLIDE_REFERENCES,
00108 PASS_GET_SLIDE_CONTENTS
00109 } m_pass;
00110 unsigned m_textType;
00111
00112 QPtrList<PptSlide> m_slideList;
00113 PptSlide* m_pptSlide;
00114
00115 struct PSR_CurrentUserAtom
00116 {
00117 uint4 size;
00118 uint4 magic;
00119 uint4 offsetToCurrentEdit;
00120 uint2 lenUserName;
00121 uint2 docFileVersion;
00122 ubyte1 majorVersion;
00123 ubyte1 minorVersion;
00124 };
00125
00126 struct PSR_UserEditAtom
00127 {
00128 sint4 lastSlideID;
00129 uint4 version;
00130 uint4 offsetLastEdit;
00131 uint4 offsetPersistDirectory;
00132
00133 uint4 documentRef;
00134 uint4 maxPersistWritten;
00135 sint2 lastViewType;
00136 };
00137
00138 struct PSR_SSlideLayoutAtom
00139 {
00140 sint4 geom;
00141 ubyte1 placeholderId[8];
00142 };
00143
00144 PSR_CurrentUserAtom mCurrentUserAtom;
00145 PSR_UserEditAtom mUserEditAtom;
00146 PSR_UserEditAtom* mpLastUserEditAtom;
00147 Q_UINT32 mEditOffset;
00148
00149
00150
00151 typedef struct
00152 {
00153 union
00154 {
00155 Q_UINT16 info;
00156 struct
00157 {
00158 Q_UINT16 version: 4;
00159 Q_UINT16 instance: 12;
00160 } fields;
00161 } opcode;
00162 Q_UINT16 type;
00163 Q_UINT32 length;
00164 } Header;
00165
00166
00167
00168 void walk(
00169 Q_UINT32 bytes,
00170 QDataStream &operands);
00171 void walk(
00172 Q_UINT32 mainStreamOffset);
00173 void walkRecord(
00174 Q_UINT32 bytes,
00175 const unsigned char *operands);
00176 void walkRecord(
00177 Q_UINT32 mainStreamOffset);
00178 void walkReference(
00179 Q_UINT32 reference);
00180 void skip(
00181 Q_UINT32 bytes,
00182 QDataStream &operands);
00183 void invokeHandler(
00184 Header &op,
00185 Q_UINT32 bytes,
00186 QDataStream &operands);
00187 void walkDocument();
00188
00189 void opAnimationInfo(Header &op, Q_UINT32 bytes, QDataStream &operands);
00190 void opAnimationInfoAtom(Header &op, Q_UINT32 bytes, QDataStream &operands);
00191 void opArrayElementAtom(Header &op, Q_UINT32 bytes, QDataStream &operands);
00192 void opBaseTextPropAtom(Header &op, Q_UINT32 bytes, QDataStream &operands);
00193 void opBinaryTagData(Header &op, Q_UINT32 bytes, QDataStream &operands);
00194 void opBookmarkCollection(Header &op, Q_UINT32 bytes, QDataStream &operands);
00195 void opBookmarkEntityAtom(Header &op, Q_UINT32 bytes, QDataStream &operands);
00196 void opBookmarkSeedAtom(Header &op, Q_UINT32 bytes, QDataStream &operands);
00197 void opCharFormatAtom(Header &op, Q_UINT32 bytes, QDataStream &operands);
00198 void opClientSignal1(Header &op, Q_UINT32 bytes, QDataStream &operands);
00199 void opClientSignal2(Header &op, Q_UINT32 bytes, QDataStream &operands);
00200 void opColorSchemeAtom(Header &op, Q_UINT32 bytes, QDataStream &operands);
00201 void opCorePict(Header &op, Q_UINT32 bytes, QDataStream &operands);
00202 void opCorePictAtom(Header &op, Q_UINT32 bytes, QDataStream &operands);
00203 void opCString(Header &op, Q_UINT32 bytes, QDataStream &operands);
00204 void opCurrentUserAtom(Header &op, Q_UINT32 bytes, QDataStream &operands);
00205 void opDateTimeMCAtom(Header &op, Q_UINT32 bytes, QDataStream &operands);
00206 void opDefaultRulerAtom(Header &op, Q_UINT32 bytes, QDataStream &operands);
00207 void opDocRoutingSlip(Header &op, Q_UINT32 bytes, QDataStream &operands);
00208 void opDocument(Header &op, Q_UINT32 bytes, QDataStream &operands);
00209 void opDocumentAtom(Header &op, Q_UINT32 bytes, QDataStream &operands);
00210 void opDocViewInfo(Header &op, Q_UINT32 bytes, QDataStream &operands);
00211 void opEmFormatAtom(Header &op, Q_UINT32 bytes, QDataStream &operands);
00212 void opEndDocument(Header &op, Q_UINT32 bytes, QDataStream &operands);
00213 void opEnvironment(Header &op, Q_UINT32 bytes, QDataStream &operands);
00214 void opExAviMovie(Header &op, Q_UINT32 bytes, QDataStream &operands);
00215 void opExCDAudio(Header &op, Q_UINT32 bytes, QDataStream &operands);
00216 void opExCDAudioAtom(Header &op, Q_UINT32 bytes, QDataStream &operands);
00217 void opExControl(Header &op, Q_UINT32 bytes, QDataStream &operands);
00218 void opExControlAtom(Header &op, Q_UINT32 bytes, QDataStream &operands);
00219 void opExEmbed(Header &op, Q_UINT32 bytes, QDataStream &operands);
00220 void opExEmbedAtom(Header &op, Q_UINT32 bytes, QDataStream &operands);
00221 void opExHyperlink(Header &op, Q_UINT32 bytes, QDataStream &operands);
00222 void opExHyperlinkAtom(Header &op, Q_UINT32 bytes, QDataStream &operands);
00223 void opExLink(Header &op, Q_UINT32 bytes, QDataStream &operands);
00224 void opExLinkAtom(Header &op, Q_UINT32 bytes, QDataStream &operands);
00225 void opExLinkAtom_old(Header &op, Q_UINT32 bytes, QDataStream &operands);
00226 void opExMCIMovie(Header &op, Q_UINT32 bytes, QDataStream &operands);
00227 void opExMediaAtom(Header &op, Q_UINT32 bytes, QDataStream &operands);
00228 void opExMIDIAudio(Header &op, Q_UINT32 bytes, QDataStream &operands);
00229 void opExObjList(Header &op, Q_UINT32 bytes, QDataStream &operands);
00230 void opExObjListAtom(Header &op, Q_UINT32 bytes, QDataStream &operands);
00231 void opExObjRefAtom(Header &op, Q_UINT32 bytes, QDataStream &operands);
00232 void opExOleObj(Header &op, Q_UINT32 bytes, QDataStream &operands);
00233 void opExOleObjAtom(Header &op, Q_UINT32 bytes, QDataStream &operands);
00234 void opExOleObjStg(Header &op, Q_UINT32 bytes, QDataStream &operands);
00235 void opExPlain(Header &op, Q_UINT32 bytes, QDataStream &operands);
00236 void opExPlainAtom(Header &op, Q_UINT32 bytes, QDataStream &operands);
00237 void opExPlainLink(Header &op, Q_UINT32 bytes, QDataStream &operands);
00238 void opExPlainLinkAtom(Header &op, Q_UINT32 bytes, QDataStream &operands);
00239 void opExQuickTime(Header &op, Q_UINT32 bytes, QDataStream &operands);
00240 void opExQuickTimeMovie(Header &op, Q_UINT32 bytes, QDataStream &operands);
00241 void opExQuickTimeMovieData(Header &op, Q_UINT32 bytes, QDataStream &operands);
00242 void opExSubscription(Header &op, Q_UINT32 bytes, QDataStream &operands);
00243 void opExSubscriptionSection(Header &op, Q_UINT32 bytes, QDataStream &operands);
00244 void opExternalObject(Header &op, Q_UINT32 bytes, QDataStream &operands);
00245 void opExVideo(Header &op, Q_UINT32 bytes, QDataStream &operands);
00246 void opExWAVAudioEmbedded(Header &op, Q_UINT32 bytes, QDataStream &operands);
00247 void opExWAVAudioEmbeddedAtom(Header &op, Q_UINT32 bytes, QDataStream &operands);
00248 void opExWAVAudioLink(Header &op, Q_UINT32 bytes, QDataStream &operands);
00249 void opFontCollection(Header &op, Q_UINT32 bytes, QDataStream &operands);
00250 void opFontEmbedData(Header &op, Q_UINT32 bytes, QDataStream &operands);
00251 void opFontEntityAtom(Header &op, Q_UINT32 bytes, QDataStream &operands);
00252 void opFooterMCAtom(Header &op, Q_UINT32 bytes, QDataStream &operands);
00253 void opGenericDateMCAtom(Header &op, Q_UINT32 bytes, QDataStream &operands);
00254 void opGlineAtom(Header &op, Q_UINT32 bytes, QDataStream &operands);
00255 void opGLPointAtom(Header &op, Q_UINT32 bytes, QDataStream &operands);
00256 void opGpointAtom(Header &op, Q_UINT32 bytes, QDataStream &operands);
00257 void opGratioAtom(Header &op, Q_UINT32 bytes, QDataStream &operands);
00258 void opGrColor(Header &op, Q_UINT32 bytes, QDataStream &operands);
00259 void opGrColorAtom(Header &op, Q_UINT32 bytes, QDataStream &operands);
00260 void opGrectAtom(Header &op, Q_UINT32 bytes, QDataStream &operands);
00261 void opGscaling(Header &op, Q_UINT32 bytes, QDataStream &operands);
00262 void opGscalingAtom(Header &op, Q_UINT32 bytes, QDataStream &operands);
00263 void opGuideAtom(Header &op, Q_UINT32 bytes, QDataStream &operands);
00264 void opGuideList(Header &op, Q_UINT32 bytes, QDataStream &operands);
00265 void opHandout(Header &op, Q_UINT32 bytes, QDataStream &operands);
00266 void opHeaderMCAtom(Header &op, Q_UINT32 bytes, QDataStream &operands);
00267 void opHeadersFooters(Header &op, Q_UINT32 bytes, QDataStream &operands);
00268 void opHeadersFootersAtom(Header &op, Q_UINT32 bytes, QDataStream &operands);
00269 void opInt4ArrayAtom(Header &op, Q_UINT32 bytes, QDataStream &operands);
00270 void opInteractiveInfo(Header &op, Q_UINT32 bytes, QDataStream &operands);
00271 void opInteractiveInfoAtom(Header &op, Q_UINT32 bytes, QDataStream &operands);
00272 void opIRRAtom(Header &op, Q_UINT32 bytes, QDataStream &operands);
00273 void opList(Header &op, Q_UINT32 bytes, QDataStream &operands);
00274 void opListPlaceholder(Header &op, Q_UINT32 bytes, QDataStream &operands);
00275 void opMainMaster(Header &op, Q_UINT32 bytes, QDataStream &operands);
00276 void opMasterText(Header &op, Q_UINT32 bytes, QDataStream &operands);
00277 void opMetaFile(Header &op, Q_UINT32 bytes, QDataStream &operands);
00278 void opMsod(Header &op, Q_UINT32 bytes, QDataStream &operands);
00279 void opNamedShow(Header &op, Q_UINT32 bytes, QDataStream &operands);
00280 void opNamedShows(Header &op, Q_UINT32 bytes, QDataStream &operands);
00281 void opNamedShowSlides(Header &op, Q_UINT32 bytes, QDataStream &operands);
00282 void opNotes(Header &op, Q_UINT32 bytes, QDataStream &operands);
00283 void opNotesAtom(Header &op, Q_UINT32 bytes, QDataStream &operands);
00284 void opOEPlaceholderAtom(Header &op, Q_UINT32 bytes, QDataStream &operands);
00285 void opOEShape(Header &op, Q_UINT32 bytes, QDataStream &operands);
00286 void opOEShapeAtom(Header &op, Q_UINT32 bytes, QDataStream &operands);
00287 void opOutlineTextRefAtom(Header &op, Q_UINT32 bytes, QDataStream &operands);
00288 void opOutlineViewInfo(Header &op, Q_UINT32 bytes, QDataStream &operands);
00289 void opParaFormatAtom(Header &op, Q_UINT32 bytes, QDataStream &operands);
00290 void opPersistPtrFullBlock(Header &op, Q_UINT32 bytes, QDataStream &operands);
00291 void opPersistPtrIncrementalBlock(Header &op, Q_UINT32 bytes, QDataStream &operands);
00292 void opPersistPtrIncrementalBlock2(Header &op, Q_UINT32 bytes, QDataStream &operands);
00293 void opPowerPointStateInfoAtom(Header &op, Q_UINT32 bytes, QDataStream &operands);
00294 void opPPDrawing(Header &op, Q_UINT32 bytes, QDataStream &operands);
00295 void opPPDrawingGroup(Header &op, Q_UINT32 bytes, QDataStream &operands);
00296 void opPrintOptions(Header &op, Q_UINT32 bytes, QDataStream &operands);
00297 void opProgBinaryTag(Header &op, Q_UINT32 bytes, QDataStream &operands);
00298 void opProgStringTag(Header &op, Q_UINT32 bytes, QDataStream &operands);
00299 void opProgTags(Header &op, Q_UINT32 bytes, QDataStream &operands);
00300 void opPSS(Header &op, Q_UINT32 bytes, QDataStream &operands);
00301 void opRecolorEntryAtom(Header &op, Q_UINT32 bytes, QDataStream &operands);
00302 void opRecolorInfoAtom(Header &op, Q_UINT32 bytes, QDataStream &operands);
00303 void opRTFDateTimeMCAtom(Header &op, Q_UINT32 bytes, QDataStream &operands);
00304 void opRulerIndentAtom(Header &op, Q_UINT32 bytes, QDataStream &operands);
00305 void opRunArray(Header &op, Q_UINT32 bytes, QDataStream &operands);
00306 void opRunArrayAtom(Header &op, Q_UINT32 bytes, QDataStream &operands);
00307 void opScheme(Header &op, Q_UINT32 bytes, QDataStream &operands);
00308 void opSchemeAtom(Header &op, Q_UINT32 bytes, QDataStream &operands);
00309 void opSlide(Header &op, Q_UINT32 bytes, QDataStream &operands);
00310 void opSlideAtom(Header &op, Q_UINT32 bytes, QDataStream &operands);
00311 void opSlideBase(Header &op, Q_UINT32 bytes, QDataStream &operands);
00312 void opSlideBaseAtom(Header &op, Q_UINT32 bytes, QDataStream &operands);
00313 void opSlideList(Header &op, Q_UINT32 bytes, QDataStream &operands);
00314 void opSlideListWithText(Header &op, Q_UINT32 bytes, QDataStream &operands);
00315 void opSlideNumberMCAtom(Header &op, Q_UINT32 bytes, QDataStream &operands);
00316 void opSlidePersist(Header &op, Q_UINT32 bytes, QDataStream &operands);
00317 void opSlidePersistAtom(Header &op, Q_UINT32 bytes, QDataStream &operands);
00318 void opSlideViewInfo(Header &op, Q_UINT32 bytes, QDataStream &operands);
00319 void opSlideViewInfoAtom(Header &op, Q_UINT32 bytes, QDataStream &operands);
00320 void opSorterViewInfo(Header &op, Q_UINT32 bytes, QDataStream &operands);
00321 void opSound(Header &op, Q_UINT32 bytes, QDataStream &operands);
00322 void opSoundCollAtom(Header &op, Q_UINT32 bytes, QDataStream &operands);
00323 void opSoundCollection(Header &op, Q_UINT32 bytes, QDataStream &operands);
00324 void opSoundData(Header &op, Q_UINT32 bytes, QDataStream &operands);
00325 void opSrKinsoku(Header &op, Q_UINT32 bytes, QDataStream &operands);
00326 void opSrKinsokuAtom(Header &op, Q_UINT32 bytes, QDataStream &operands);
00327 void opSSDocInfoAtom(Header &op, Q_UINT32 bytes, QDataStream &operands);
00328 void opSSSlideLayoutAtom(Header &op, Q_UINT32 bytes, QDataStream &operands);
00329 void opSSSlideInfoAtom(Header &op, Q_UINT32 bytes, QDataStream &operands);
00330 void opStyleTextPropAtom(Header &op, Q_UINT32 bytes, QDataStream &operands);
00331 void opSubContainerCompleted(Header &op, Q_UINT32 bytes, QDataStream &operands);
00332 void opSubContainerException(Header &op, Q_UINT32 bytes, QDataStream &operands);
00333 void opSummary(Header &op, Q_UINT32 bytes, QDataStream &operands);
00334 void opTextBookmarkAtom(Header &op, Q_UINT32 bytes, QDataStream &operands);
00335 void opTextBytesAtom(Header &op, Q_UINT32 bytes, QDataStream &operands);
00336 void opTextCharsAtom(Header &op, Q_UINT32 bytes, QDataStream &operands);
00337 void opTextHeaderAtom(Header &op, Q_UINT32 bytes, QDataStream &operands);
00338 void opTextRulerAtom(Header &op, Q_UINT32 bytes, QDataStream &operands);
00339 void opTextSpecInfoAtom(Header &op, Q_UINT32 bytes, QDataStream &operands);
00340 void opTexture(Header &op, Q_UINT32 bytes, QDataStream &operands);
00341 void opTxCFStyleAtom(Header &op, Q_UINT32 bytes, QDataStream &operands);
00342 void opTxInteractiveInfoAtom(Header &op, Q_UINT32 bytes, QDataStream &operands);
00343 void opTxMasterStyleAtom(Header &op, Q_UINT32 bytes, QDataStream &operands);
00344 void opTxPFStyleAtom(Header &op, Q_UINT32 bytes, QDataStream &operands);
00345 void opTxSIStyleAtom(Header &op, Q_UINT32 bytes, QDataStream &operands);
00346 void opTypeFace(Header &op, Q_UINT32 bytes, QDataStream &operands);
00347 void opUserEditAtom(Header &op, Q_UINT32 bytes, QDataStream &operands);
00348 void opVBAInfo(Header &op, Q_UINT32 bytes, QDataStream &operands);
00349 void opVBAInfoAtom(Header &op, Q_UINT32 bytes, QDataStream &operands);
00350 void opVBASlideInfo(Header &op, Q_UINT32 bytes, QDataStream &operands);
00351 void opVBASlideInfoAtom(Header &op, Q_UINT32 bytes, QDataStream &operands);
00352 void opViewInfo(Header &op, Q_UINT32 bytes, QDataStream &operands);
00353 void opViewInfoAtom(Header &op, Q_UINT32 bytes, QDataStream &operands);
00354 };
00355 #endif