diff --git a/MsBinaryFile/PptFile/Records/Animations/AnimationInfoAtom.cpp b/MsBinaryFile/PptFile/Records/Animations/AnimationInfoAtom.cpp new file mode 100644 index 0000000000..a967e24066 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/Animations/AnimationInfoAtom.cpp @@ -0,0 +1,75 @@ +#include "AnimationInfoAtom.h" + + +struct SFlagsAH { + + USHORT m_fA_H; + + USHORT getH()const {return (m_fA_H & 0xC000) >> 14;} + USHORT getG()const {return (m_fA_H & 0x3000) >> 12;} + USHORT getF()const {return (m_fA_H & 0xC00) >> 10;} + USHORT getE()const {return (m_fA_H & 0x300) >> 8;} + USHORT getD()const {return (m_fA_H & 0xC0) >> 6;} + USHORT getC()const {return (m_fA_H & 0x30) >> 4;} + USHORT getB()const {return (m_fA_H & 0xC) >> 2;} + USHORT getA()const {return (m_fA_H & 0x3) >> 0;} + + + + void ReadFromStream(POLE::Stream* pStream) { + m_fA_H = StreamUtils::ReadWORD(pStream); + } +}; + + +CRecordAnimationInfoAtom::CRecordAnimationInfoAtom() +{ + +} + +CRecordAnimationInfoAtom::~CRecordAnimationInfoAtom() +{ + +} + +void CRecordAnimationInfoAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + m_sDimColor.ReadFromStream(pStream); + + SFlagsAH fAH; + fAH.ReadFromStream(pStream); + + m_fReverse = fAH.getA(); + m_fAutomatic = fAH.getB(); + m_fSound = fAH.getC(); + m_fStopSound = fAH.getD(); + m_fPlay = fAH.getE(); + m_fSynchronous = fAH.getF(); + m_fHide = fAH.getG(); + m_fAnimateBg = fAH.getH(); + + m_Reserved = StreamUtils::ReadWORD(pStream); + + m_SoundIdRef = StreamUtils::ReadDWORD(pStream); + m_DelayTime = StreamUtils::ReadDWORD(pStream); + + m_OrderID = StreamUtils::ReadWORD(pStream); + m_SlideCount = StreamUtils::ReadWORD(pStream); + + m_AnimBuildType = StreamUtils::ReadBYTE(pStream); + m_AnimEffect = StreamUtils::ReadBYTE(pStream); + m_AnimEffectDirection = StreamUtils::ReadBYTE(pStream); + m_AnimAfterEffect = StreamUtils::ReadBYTE(pStream); + m_TextBuildSubEffect = StreamUtils::ReadBYTE(pStream); + m_OleVerb = StreamUtils::ReadBYTE(pStream); + + + StreamUtils::StreamSkip(2, pStream); + m_OldSoundIdRef = m_SoundIdRef; + + StreamUtils::StreamSkipBack(36, pStream); + auto tempStr = StreamUtils::ReadStringA(pStream, 36); + std::copy(tempStr.begin(), tempStr.end(), asByteArr.begin()); +} diff --git a/MsBinaryFile/PptFile/Records/Animations/AnimationInfoAtom.h b/MsBinaryFile/PptFile/Records/Animations/AnimationInfoAtom.h index ea3a4ec5c9..a00906b55d 100644 --- a/MsBinaryFile/PptFile/Records/Animations/AnimationInfoAtom.h +++ b/MsBinaryFile/PptFile/Records/Animations/AnimationInfoAtom.h @@ -38,27 +38,6 @@ namespace PPT_FORMAT { -struct SFlagsAH { - - USHORT m_fA_H; - - USHORT getH()const {return (m_fA_H & 0xC000) >> 14;} - USHORT getG()const {return (m_fA_H & 0x3000) >> 12;} - USHORT getF()const {return (m_fA_H & 0xC00) >> 10;} - USHORT getE()const {return (m_fA_H & 0x300) >> 8;} - USHORT getD()const {return (m_fA_H & 0xC0) >> 6;} - USHORT getC()const {return (m_fA_H & 0x30) >> 4;} - USHORT getB()const {return (m_fA_H & 0xC) >> 2;} - USHORT getA()const {return (m_fA_H & 0x3) >> 0;} - - - - void ReadFromStream(POLE::Stream* pStream) { - m_fA_H = StreamUtils::ReadWORD(pStream); - } -}; - - class CRecordAnimationInfoAtom : public CUnknownRecord { public: @@ -90,56 +69,11 @@ public: BYTE m_OleVerb; std::array asByteArr{}; + public: + CRecordAnimationInfoAtom(); + ~CRecordAnimationInfoAtom(); - CRecordAnimationInfoAtom() - { - } - - ~CRecordAnimationInfoAtom() - { - } - - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - m_oHeader = oHeader; - - m_sDimColor.ReadFromStream(pStream); - - SFlagsAH fAH; - fAH.ReadFromStream(pStream); - - m_fReverse = fAH.getA(); - m_fAutomatic = fAH.getB(); - m_fSound = fAH.getC(); - m_fStopSound = fAH.getD(); - m_fPlay = fAH.getE(); - m_fSynchronous = fAH.getF(); - m_fHide = fAH.getG(); - m_fAnimateBg = fAH.getH(); - - m_Reserved = StreamUtils::ReadWORD(pStream); - - m_SoundIdRef = StreamUtils::ReadDWORD(pStream); - m_DelayTime = StreamUtils::ReadDWORD(pStream); - - m_OrderID = StreamUtils::ReadWORD(pStream); - m_SlideCount = StreamUtils::ReadWORD(pStream); - - m_AnimBuildType = StreamUtils::ReadBYTE(pStream); - m_AnimEffect = StreamUtils::ReadBYTE(pStream); - m_AnimEffectDirection = StreamUtils::ReadBYTE(pStream); - m_AnimAfterEffect = StreamUtils::ReadBYTE(pStream); - m_TextBuildSubEffect = StreamUtils::ReadBYTE(pStream); - m_OleVerb = StreamUtils::ReadBYTE(pStream); - - - StreamUtils::StreamSkip(2, pStream); - m_OldSoundIdRef = m_SoundIdRef; - - StreamUtils::StreamSkipBack(36, pStream); - auto tempStr = StreamUtils::ReadStringA(pStream, 36); - std::copy(tempStr.begin(), tempStr.end(), asByteArr.begin()); - } + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream); }; } diff --git a/MsBinaryFile/PptFile/Records/Animations/AnimationInfoContainer.cpp b/MsBinaryFile/PptFile/Records/Animations/AnimationInfoContainer.cpp new file mode 100644 index 0000000000..a58569fec5 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/Animations/AnimationInfoContainer.cpp @@ -0,0 +1,25 @@ +#include "AnimationInfoContainer.h" + + +CRecordAnimationInfoContainer::CRecordAnimationInfoContainer() +{ + +} + +CRecordAnimationInfoContainer::~CRecordAnimationInfoContainer() +{ + +} + +void CRecordAnimationInfoContainer::ReadFromStream(SRecordHeader &thisHeader, POLE::Stream *pStream) +{ + m_oHeader = thisHeader; + + SRecordHeader oHeader; + + if (oHeader.ReadFromStream(pStream)) + m_AnimationAtom.ReadFromStream ( oHeader, pStream ); + + if (m_oHeader.RecLen != 36 && oHeader.ReadFromStream(pStream)) + m_AnimationSound.ReadFromStream ( oHeader, pStream ); +} diff --git a/MsBinaryFile/PptFile/Records/Animations/AnimationInfoContainer.h b/MsBinaryFile/PptFile/Records/Animations/AnimationInfoContainer.h index d946803303..c6cb2f58dc 100644 --- a/MsBinaryFile/PptFile/Records/Animations/AnimationInfoContainer.h +++ b/MsBinaryFile/PptFile/Records/Animations/AnimationInfoContainer.h @@ -45,20 +45,9 @@ public: CRecordAnimationInfoAtom m_AnimationAtom; CRecordSoundContainer m_AnimationSound; - CRecordAnimationInfoContainer(){} - ~CRecordAnimationInfoContainer(){} + CRecordAnimationInfoContainer(); + ~CRecordAnimationInfoContainer(); - virtual void ReadFromStream(SRecordHeader & thisHeader, POLE::Stream* pStream) - { - m_oHeader = thisHeader; - - SRecordHeader oHeader; - - if (oHeader.ReadFromStream(pStream)) - m_AnimationAtom.ReadFromStream ( oHeader, pStream ); - - if (m_oHeader.RecLen != 36 && oHeader.ReadFromStream(pStream)) - m_AnimationSound.ReadFromStream ( oHeader, pStream ); - } + virtual void ReadFromStream(SRecordHeader & thisHeader, POLE::Stream* pStream); }; } diff --git a/MsBinaryFile/PptFile/Records/Animations/BuildAtom.cpp b/MsBinaryFile/PptFile/Records/Animations/BuildAtom.cpp new file mode 100644 index 0000000000..72e060f8fc --- /dev/null +++ b/MsBinaryFile/PptFile/Records/Animations/BuildAtom.cpp @@ -0,0 +1,16 @@ +#include "BuildAtom.h" + + +void CRecordBuildAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + m_nBuildType = StreamUtils::ReadDWORD ( pStream ); + m_nBuildId = StreamUtils::ReadDWORD ( pStream ); + m_nShapeIdRef = StreamUtils::ReadDWORD ( pStream ); + + _UINT32 Value = StreamUtils::ReadDWORD ( pStream ); + + m_fExpanded = ( 0x01 == ( 0x01 & ((BYTE)Value) ) ); + m_fUIExpanded = ( 0x02 == ( 0x02 & ((BYTE)Value) ) ); +} diff --git a/MsBinaryFile/PptFile/Records/Animations/BuildAtom.h b/MsBinaryFile/PptFile/Records/Animations/BuildAtom.h index b1349899fc..0a561505dd 100644 --- a/MsBinaryFile/PptFile/Records/Animations/BuildAtom.h +++ b/MsBinaryFile/PptFile/Records/Animations/BuildAtom.h @@ -40,22 +40,9 @@ namespace PPT_FORMAT class CRecordBuildAtom : public CUnknownRecord { public: - virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ) - { - m_oHeader = oHeader; - - m_nBuildType = StreamUtils::ReadDWORD ( pStream ); - m_nBuildId = StreamUtils::ReadDWORD ( pStream ); - m_nShapeIdRef = StreamUtils::ReadDWORD ( pStream ); - - _UINT32 Value = StreamUtils::ReadDWORD ( pStream ); - - m_fExpanded = ( 0x01 == ( 0x01 & ((BYTE)Value) ) ); - m_fUIExpanded = ( 0x02 == ( 0x02 & ((BYTE)Value) ) ); - } + virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ); public: - _UINT32 m_nBuildType; // 1 - Paragraph build type, 2 - Chart build type, 3 - Diagram build type _UINT32 m_nBuildId; _UINT32 m_nShapeIdRef; diff --git a/MsBinaryFile/PptFile/Records/Animations/BuildListSubContainer.cpp b/MsBinaryFile/PptFile/Records/Animations/BuildListSubContainer.cpp new file mode 100644 index 0000000000..d8ea959d4e --- /dev/null +++ b/MsBinaryFile/PptFile/Records/Animations/BuildListSubContainer.cpp @@ -0,0 +1,21 @@ +#include "BuildListSubContainer.h" + + +CRecordBuildListSubContainer::CRecordBuildListSubContainer() +{ + +} + +CRecordBuildListSubContainer::~CRecordBuildListSubContainer() +{ + +} + +void CRecordBuildListSubContainer::ReadFromStream(SRecordHeader &header, POLE::Stream *pStream) +{ + m_oHeader = header; + + SRecordHeader buildAtomHeader; + if (buildAtomHeader.ReadFromStream(pStream)) + buildAtom.ReadFromStream ( buildAtomHeader, pStream ); +} diff --git a/MsBinaryFile/PptFile/Records/Animations/BuildListSubContainer.h b/MsBinaryFile/PptFile/Records/Animations/BuildListSubContainer.h index e36846aa6d..b7ebea382f 100644 --- a/MsBinaryFile/PptFile/Records/Animations/BuildListSubContainer.h +++ b/MsBinaryFile/PptFile/Records/Animations/BuildListSubContainer.h @@ -41,25 +41,10 @@ namespace PPT_FORMAT class CRecordBuildListSubContainer : public CUnknownRecord { public: - CRecordBuildListSubContainer() - { + CRecordBuildListSubContainer(); + ~CRecordBuildListSubContainer(); - } - - ~CRecordBuildListSubContainer() - { - - } - - virtual void ReadFromStream(SRecordHeader &header, POLE::Stream *pStream) override - { - m_oHeader = header; - - SRecordHeader buildAtomHeader; - if (buildAtomHeader.ReadFromStream(pStream)) - buildAtom.ReadFromStream ( buildAtomHeader, pStream ); - - } + virtual void ReadFromStream(SRecordHeader &header, POLE::Stream *pStream) override; public: CRecordBuildAtom buildAtom; diff --git a/MsBinaryFile/PptFile/Records/Animations/ChartBuildAtom.cpp b/MsBinaryFile/PptFile/Records/Animations/ChartBuildAtom.cpp new file mode 100644 index 0000000000..8daaee2e13 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/Animations/ChartBuildAtom.cpp @@ -0,0 +1,22 @@ +#include "ChartBuildAtom.h" + + +CRecordChartBuildAtom::CRecordChartBuildAtom() +{ + +} + +CRecordChartBuildAtom::~CRecordChartBuildAtom() +{ + +} + +void CRecordChartBuildAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + m_ChartBuild = (ChartBuildEnum)StreamUtils::ReadDWORD(pStream); + m_fAnimBackground = StreamUtils::ReadBYTE(pStream); + + StreamUtils::StreamSkip(3, pStream); +} diff --git a/MsBinaryFile/PptFile/Records/Animations/ChartBuildAtom.h b/MsBinaryFile/PptFile/Records/Animations/ChartBuildAtom.h index bcd7ef1437..2a06b7509a 100644 --- a/MsBinaryFile/PptFile/Records/Animations/ChartBuildAtom.h +++ b/MsBinaryFile/PptFile/Records/Animations/ChartBuildAtom.h @@ -44,17 +44,9 @@ public: ChartBuildEnum m_ChartBuild; BYTE m_fAnimBackground; - CRecordChartBuildAtom(){} - ~CRecordChartBuildAtom(){} + CRecordChartBuildAtom(); + ~CRecordChartBuildAtom(); - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - m_oHeader = oHeader; - - m_ChartBuild = (ChartBuildEnum)StreamUtils::ReadDWORD(pStream); - m_fAnimBackground = StreamUtils::ReadBYTE(pStream); - - StreamUtils::StreamSkip(3, pStream); - } + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) override; }; } diff --git a/MsBinaryFile/PptFile/Records/Animations/ChartBuildContainer.cpp b/MsBinaryFile/PptFile/Records/Animations/ChartBuildContainer.cpp new file mode 100644 index 0000000000..20711c27eb --- /dev/null +++ b/MsBinaryFile/PptFile/Records/Animations/ChartBuildContainer.cpp @@ -0,0 +1,21 @@ +#include "ChartBuildContainer.h" + + +CRecordChartBuildContainer::CRecordChartBuildContainer() +{ + +} + +CRecordChartBuildContainer::~CRecordChartBuildContainer() +{ + +} + +void CRecordChartBuildContainer::ReadFromStream(SRecordHeader &header, POLE::Stream *pStream) +{ + CRecordBuildListSubContainer::ReadFromStream(header, pStream); + + SRecordHeader childHeader; + if (childHeader.ReadFromStream(pStream)) + m_oChartBuildAtom.ReadFromStream ( childHeader, pStream ); +} diff --git a/MsBinaryFile/PptFile/Records/Animations/ChartBuildContainer.h b/MsBinaryFile/PptFile/Records/Animations/ChartBuildContainer.h index c75d27df9a..4de4df1bcc 100644 --- a/MsBinaryFile/PptFile/Records/Animations/ChartBuildContainer.h +++ b/MsBinaryFile/PptFile/Records/Animations/ChartBuildContainer.h @@ -39,24 +39,10 @@ namespace PPT_FORMAT class CRecordChartBuildContainer : public CRecordBuildListSubContainer { public: - CRecordChartBuildContainer() - { + CRecordChartBuildContainer(); + ~CRecordChartBuildContainer(); - } - - ~CRecordChartBuildContainer() - { - - } - - void ReadFromStream(SRecordHeader &header, POLE::Stream *pStream) override - { - CRecordBuildListSubContainer::ReadFromStream(header, pStream); - - SRecordHeader childHeader; - if (childHeader.ReadFromStream(pStream)) - m_oChartBuildAtom.ReadFromStream ( childHeader, pStream ); - } + void ReadFromStream(SRecordHeader &header, POLE::Stream *pStream) override; public: CRecordChartBuildAtom m_oChartBuildAtom; diff --git a/MsBinaryFile/PptFile/Records/Animations/ClientVisualElementContainer.cpp b/MsBinaryFile/PptFile/Records/Animations/ClientVisualElementContainer.cpp new file mode 100644 index 0000000000..c568f65443 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/Animations/ClientVisualElementContainer.cpp @@ -0,0 +1,38 @@ +#include "ClientVisualElementContainer.h" + + +CRecordClientVisualElementContainer::CRecordClientVisualElementContainer() +{ + m_bVisualPageAtom = false; + m_bVisualShapeAtom = false; +} + +CRecordClientVisualElementContainer::~CRecordClientVisualElementContainer() +{ + +} + +void CRecordClientVisualElementContainer::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + LONG lPos = 0; StreamUtils::StreamPosition ( lPos, pStream ); + + SRecordHeader ReadHeader; + if (ReadHeader.ReadFromStream(pStream) ) + { + if ( RT_VisualPageAtom == ReadHeader.RecType ) + { + m_bVisualPageAtom = true; + m_oVisualPageAtom.ReadFromStream ( ReadHeader, pStream ); + } + + if ( RT_VisualShapeAtom == ReadHeader.RecType ) + { + m_bVisualShapeAtom = true; + m_oVisualShapeAtom.ReadFromStream ( ReadHeader, pStream ); + } + } + + StreamUtils::StreamSeek ( lPos + m_oHeader.RecLen, pStream ); +} diff --git a/MsBinaryFile/PptFile/Records/Animations/ClientVisualElementContainer.h b/MsBinaryFile/PptFile/Records/Animations/ClientVisualElementContainer.h index 3fb55edda4..8d46ce4ca4 100644 --- a/MsBinaryFile/PptFile/Records/Animations/ClientVisualElementContainer.h +++ b/MsBinaryFile/PptFile/Records/Animations/ClientVisualElementContainer.h @@ -31,7 +31,6 @@ */ #pragma once - #include "../../Reader/Records.h" #include "VisualPageAtom.h" #include "VisualShapeAtom.h" @@ -42,39 +41,12 @@ namespace PPT_FORMAT class CRecordClientVisualElementContainer : public CUnknownRecord { public: - CRecordClientVisualElementContainer () - { - m_bVisualPageAtom = false; - m_bVisualShapeAtom = false; - } + CRecordClientVisualElementContainer (); + ~CRecordClientVisualElementContainer(); - void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ) override - { - m_oHeader = oHeader; - - LONG lPos = 0; StreamUtils::StreamPosition ( lPos, pStream ); - - SRecordHeader ReadHeader; - if (ReadHeader.ReadFromStream(pStream) ) - { - if ( RT_VisualPageAtom == ReadHeader.RecType ) - { - m_bVisualPageAtom = true; - m_oVisualPageAtom.ReadFromStream ( ReadHeader, pStream ); - } - - if ( RT_VisualShapeAtom == ReadHeader.RecType ) - { - m_bVisualShapeAtom = true; - m_oVisualShapeAtom.ReadFromStream ( ReadHeader, pStream ); - } - } - - StreamUtils::StreamSeek ( lPos + m_oHeader.RecLen, pStream ); - } + void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ) override; public: - CRecordVisualPageAtom m_oVisualPageAtom; CRecordVisualShapeAtom m_oVisualShapeAtom; diff --git a/MsBinaryFile/PptFile/Records/Animations/DiagramBuildAtom.cpp b/MsBinaryFile/PptFile/Records/Animations/DiagramBuildAtom.cpp new file mode 100644 index 0000000000..d7842a1028 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/Animations/DiagramBuildAtom.cpp @@ -0,0 +1,19 @@ +#include "DiagramBuildAtom.h" + + +CRecordDiagramBuildAtom::CRecordDiagramBuildAtom() +{ + +} + +CRecordDiagramBuildAtom::~CRecordDiagramBuildAtom() +{ + +} + +void CRecordDiagramBuildAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + m_oDiagramBuild = (DiagramBuildEnum)StreamUtils::ReadDWORD(pStream); +} diff --git a/MsBinaryFile/PptFile/Records/Animations/DiagramBuildAtom.h b/MsBinaryFile/PptFile/Records/Animations/DiagramBuildAtom.h index 5973528142..e2a4c075d9 100644 --- a/MsBinaryFile/PptFile/Records/Animations/DiagramBuildAtom.h +++ b/MsBinaryFile/PptFile/Records/Animations/DiagramBuildAtom.h @@ -43,14 +43,9 @@ class CRecordDiagramBuildAtom : public CUnknownRecord public: DiagramBuildEnum m_oDiagramBuild; - CRecordDiagramBuildAtom(){} - ~CRecordDiagramBuildAtom(){} + CRecordDiagramBuildAtom(); + ~CRecordDiagramBuildAtom(); - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - m_oHeader = oHeader; - - m_oDiagramBuild = (DiagramBuildEnum)StreamUtils::ReadDWORD(pStream); - } + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) override; }; } diff --git a/MsBinaryFile/PptFile/Records/Animations/DiagramBuildContainer.cpp b/MsBinaryFile/PptFile/Records/Animations/DiagramBuildContainer.cpp new file mode 100644 index 0000000000..ab3316d7c0 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/Animations/DiagramBuildContainer.cpp @@ -0,0 +1,22 @@ +#include"DiagramBuildContainer.h" + + +CRecordDiagramBuildContainer::CRecordDiagramBuildContainer() +{ + +} + +CRecordDiagramBuildContainer::~CRecordDiagramBuildContainer() +{ + +} + +void CRecordDiagramBuildContainer::ReadFromStream(SRecordHeader &header, POLE::Stream *pStream) +{ + CRecordBuildListSubContainer::ReadFromStream(header, pStream); + + SRecordHeader diagramBuildAtomHeader; + + if (diagramBuildAtomHeader.ReadFromStream(pStream)) + m_oDiagramBuildAtom.ReadFromStream (diagramBuildAtomHeader, pStream); +} diff --git a/MsBinaryFile/PptFile/Records/Animations/DiagramBuildContainer.h b/MsBinaryFile/PptFile/Records/Animations/DiagramBuildContainer.h index 7333b02535..118a0e2c62 100644 --- a/MsBinaryFile/PptFile/Records/Animations/DiagramBuildContainer.h +++ b/MsBinaryFile/PptFile/Records/Animations/DiagramBuildContainer.h @@ -41,25 +41,10 @@ namespace PPT_FORMAT class CRecordDiagramBuildContainer : public CRecordBuildListSubContainer { public: - CRecordDiagramBuildContainer() - { + CRecordDiagramBuildContainer(); + ~CRecordDiagramBuildContainer(); - } - - ~CRecordDiagramBuildContainer() - { - - } - - void ReadFromStream(SRecordHeader &header, POLE::Stream *pStream) override - { - CRecordBuildListSubContainer::ReadFromStream(header, pStream); - - SRecordHeader diagramBuildAtomHeader; - - if (diagramBuildAtomHeader.ReadFromStream(pStream)) - m_oDiagramBuildAtom.ReadFromStream (diagramBuildAtomHeader, pStream); - } + void ReadFromStream(SRecordHeader &header, POLE::Stream *pStream) override; public: CRecordDiagramBuildAtom m_oDiagramBuildAtom; diff --git a/MsBinaryFile/PptFile/Records/Animations/ExtTimeNodeContainer.cpp b/MsBinaryFile/PptFile/Records/Animations/ExtTimeNodeContainer.cpp new file mode 100644 index 0000000000..9beea67107 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/Animations/ExtTimeNodeContainer.cpp @@ -0,0 +1,318 @@ +#include "ExtTimeNodeContainer.h" + + + +CRecordExtTimeNodeContainer::CRecordExtTimeNodeContainer(): + m_pTimePropertyList(nullptr), + m_pTimeAnimateBehavior(nullptr), + m_pTimeColorBehavior(nullptr), + m_pTimeEffectBehavior(nullptr), + m_pTimeMotionBehavior(nullptr), + m_pTimeRotationBehavior(nullptr), + m_pTimeScaleBehavior(nullptr), + m_pTimeSetBehavior(nullptr), + m_pTimeCommandBehavior(nullptr), + m_pClientVisualElement(nullptr), + + m_pTimeIterateDataAtom(nullptr), + m_pTimeSequenceDataAtom(nullptr), + + m_pTimeEndSyncTimeCondition(nullptr), + + + m_haveTimePropertyList(false), + m_haveAnimateBehavior(false), + m_haveColorBehavior(false), + m_haveEffectBehavior(false), + m_haveMotionBehavior(false), + m_haveRotationBehavior(false), + m_haveScaleBehavior(false), + m_haveSetBehavior(false), + m_haveCommandBehavior(false), + m_haveClientVisualElement(false), + + m_haveIterateDataAtom(false), + m_haveSequenceAtom(false), + + m_haveTimeEndSyncTime(false) +{ + +} + +CRecordExtTimeNodeContainer::~CRecordExtTimeNodeContainer() +{ + RELEASEOBJECT(m_pTimePropertyList); + RELEASEOBJECT(m_pTimeAnimateBehavior); + RELEASEOBJECT(m_pTimeColorBehavior); + RELEASEOBJECT(m_pTimeEffectBehavior); + RELEASEOBJECT(m_pTimeMotionBehavior); + RELEASEOBJECT(m_pTimeRotationBehavior); + RELEASEOBJECT(m_pTimeScaleBehavior); + RELEASEOBJECT(m_pTimeSetBehavior); + RELEASEOBJECT(m_pTimeCommandBehavior); + RELEASEOBJECT(m_pClientVisualElement); + + RELEASEOBJECT(m_pTimeIterateDataAtom); + RELEASEOBJECT(m_pTimeSequenceDataAtom); + + RELEASEOBJECT(m_pTimeEndSyncTimeCondition); + + for ( size_t i = 0; i < m_arrRgBeginTimeCondition.size(); ++i ) + RELEASEOBJECT ( m_arrRgBeginTimeCondition[i] ); + + for ( size_t i = 0; i < m_arrRgNextTimeCondition.size(); ++i ) + RELEASEOBJECT ( m_arrRgNextTimeCondition[i] ); + + for ( size_t i = 0; i < m_arrRgEndTimeCondition.size(); ++i ) + RELEASEOBJECT ( m_arrRgEndTimeCondition[i] ); + + for ( size_t i = 0; i < m_arrRgTimeModifierAtom.size(); ++i ) + RELEASEOBJECT ( m_arrRgTimeModifierAtom[i] ); + + for ( size_t i = 0; i < m_arrRgSubEffect.size(); ++i ) + RELEASEOBJECT ( m_arrRgSubEffect[i] ); + + for ( size_t i = 0; i < m_arrRgExtTimeNodeChildren.size(); ++i ) + RELEASEOBJECT ( m_arrRgExtTimeNodeChildren[i] ); +} + +void CRecordExtTimeNodeContainer::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + LONG lPos = 0; + StreamUtils::StreamPosition ( lPos, pStream ); + + SRecordHeader rHeader; + + if ( rHeader.ReadFromStream(pStream) ) + m_oTimeNodeAtom.ReadFromStream ( rHeader, pStream ); + + UINT lCurLen = m_oTimeNodeAtom.m_oHeader.RecLen + 8; + + SRecordHeader ReadHeader; + + while ( lCurLen < m_oHeader.RecLen ) + { + LONG lPosExpected = 0; + StreamUtils::StreamPosition ( lPosExpected, pStream ); + + if ( ReadHeader.ReadFromStream(pStream) == false) + break; + + lCurLen += 8 + ReadHeader.RecLen; + lPosExpected += 8 + ReadHeader.RecLen; + + switch (ReadHeader.RecType) + { + case RT_TimePropertyList: + { + + m_pTimePropertyList = new CRecordTimePropertyList4TimeNodeContainer; + m_pTimePropertyList->ReadFromStream(ReadHeader, pStream); + m_haveTimePropertyList = true; + + break; + } + + case RT_TimeAnimateBehaviorContainer: + { + + m_pTimeAnimateBehavior = new CRecordTimeAnimateBehaviorContainer; + m_pTimeAnimateBehavior->ReadFromStream(ReadHeader, pStream); + m_haveAnimateBehavior = true; + + break; + } + + case RT_TimeColorBehaviorContainer: + { + + m_pTimeColorBehavior = new CRecordTimeColorBehaviorContainer; + m_pTimeColorBehavior->ReadFromStream(ReadHeader, pStream); + m_haveColorBehavior = true; + + break; + } + + case RT_TimeEffectBehaviorContainer: + { + + m_pTimeEffectBehavior = new CRecordTimeEffectBehaviorContainer(); + m_pTimeEffectBehavior->ReadFromStream(ReadHeader, pStream); + m_haveEffectBehavior = true; + + break; + } + + case RT_TimeMotionBehaviorContainer: + { + + m_pTimeMotionBehavior = new CRecordTimeMotionBehaviorContainer(); + m_pTimeMotionBehavior->ReadFromStream(ReadHeader, pStream); + m_haveMotionBehavior = true; + + break; + } + + case RT_TimeRotationBehaviorContainer: + { + + m_pTimeRotationBehavior = new CRecordTimeRotationBehaviorContainer(); + m_pTimeRotationBehavior->ReadFromStream(ReadHeader, pStream); + m_haveRotationBehavior = true; + + break; + } + + case RT_TimeScaleBehaviorContainer: + { + + m_pTimeScaleBehavior = new CRecordTimeScaleBehaviorContainer(); + m_pTimeScaleBehavior->ReadFromStream(ReadHeader, pStream); + m_haveScaleBehavior = true; + + break; + } + + case RT_TimeSetBehaviorContainer: + { + + m_pTimeSetBehavior = new CRecordTimeSetBehaviorContainer(); + m_pTimeSetBehavior->ReadFromStream(ReadHeader, pStream); + m_haveSetBehavior = true; + + break; + } + + case RT_TimeCommandBehaviorContainer: + { + + m_pTimeCommandBehavior = new CRecordTimeCommandBehaviorContainer(); + m_pTimeCommandBehavior->ReadFromStream(ReadHeader, pStream); + m_haveCommandBehavior = true; + + break; + } + + case RT_TimeClientVisualElement: + { + + m_pClientVisualElement = new CRecordClientVisualElementContainer(); + m_pClientVisualElement->ReadFromStream(ReadHeader, pStream); + m_haveClientVisualElement = true; + + break; + } + + case RT_TimeIterateData: + { + + m_pTimeIterateDataAtom = new CRecordTimeIterateDataAtom(); + m_pTimeIterateDataAtom->ReadFromStream(ReadHeader, pStream); + m_haveIterateDataAtom = true; + + break; + } + + case RT_TimeSequenceData: + { + + m_pTimeSequenceDataAtom = new CRecordTimeSequenceDataAtom(); + m_pTimeSequenceDataAtom->ReadFromStream(ReadHeader, pStream); + m_haveSequenceAtom = true; + + break; + } + + case RT_TimeConditionContainer: + { + + CRecordTimeConditionContainer* pTimeCondition = + new CRecordTimeConditionContainer(); + pTimeCondition->ReadFromStream(ReadHeader, pStream); + unsigned short recInst = ReadHeader.RecInstance; + + if (recInst == TL_CT_Begin) + { + m_arrRgBeginTimeCondition.push_back(pTimeCondition); + } + else if (recInst == TL_CT_Next) + { + m_arrRgNextTimeCondition.push_back(pTimeCondition); + } + + else if (recInst == TL_CT_End || recInst == TL_CT_Previous) + { + m_arrRgEndTimeCondition.push_back(pTimeCondition); + } + else + { + m_haveTimeEndSyncTime = true; + m_pTimeEndSyncTimeCondition = pTimeCondition; + } + + + break; // A lot of records. Look at instance + } + + + case RT_TimeModifier: + { + + CRecordTimeModifierAtom* pModAtom = new CRecordTimeModifierAtom(); + pModAtom->ReadFromStream(ReadHeader, pStream); + m_arrRgTimeModifierAtom.push_back(pModAtom); + + break; + } + + case RT_TimeSubEffectContainer: + { + + CRecordSubEffectContainer* pSub = new CRecordSubEffectContainer(); + pSub->ReadFromStream(ReadHeader, pStream); + m_arrRgSubEffect.push_back(pSub); + + break; + } + + case RT_TimeExtTimeNodeContainer: + { + + CRecordExtTimeNodeContainer* pExt = new CRecordExtTimeNodeContainer(); + pExt->ReadFromStream(ReadHeader, pStream); + m_arrRgExtTimeNodeChildren.push_back(pExt); + + break; + } + + + default: + break; +// throw ; + } + LONG lPosCurrent = 0; + StreamUtils::StreamPosition ( lPosCurrent, pStream ); + if (lPosExpected != lPosCurrent) + { + StreamUtils::StreamSeek ( lPosExpected, pStream ); + } + + } + StreamUtils::StreamSeek ( lPos + m_oHeader.RecLen, pStream ); +} + +CRecordTimeModifierAtom *CRecordExtTimeNodeContainer::GetModifier(_UINT32 Type) +{ + for ( size_t i = 0; i < m_arrRgTimeModifierAtom.size(); ++i ) + if (m_arrRgTimeModifierAtom[i]->m_nType == Type) + return m_arrRgTimeModifierAtom[i]; + + return nullptr; +} + +int CRecordExtTimeNodeContainer::GetNodeType() const +{ + return m_oTimeNodeAtom.m_dwType; +} diff --git a/MsBinaryFile/PptFile/Records/Animations/ExtTimeNodeContainer.h b/MsBinaryFile/PptFile/Records/Animations/ExtTimeNodeContainer.h index 9c274504f9..a7e8987486 100644 --- a/MsBinaryFile/PptFile/Records/Animations/ExtTimeNodeContainer.h +++ b/MsBinaryFile/PptFile/Records/Animations/ExtTimeNodeContainer.h @@ -106,323 +106,13 @@ public: public: - CRecordExtTimeNodeContainer() : - m_pTimePropertyList(nullptr), - m_pTimeAnimateBehavior(nullptr), - m_pTimeColorBehavior(nullptr), - m_pTimeEffectBehavior(nullptr), - m_pTimeMotionBehavior(nullptr), - m_pTimeRotationBehavior(nullptr), - m_pTimeScaleBehavior(nullptr), - m_pTimeSetBehavior(nullptr), - m_pTimeCommandBehavior(nullptr), - m_pClientVisualElement(nullptr), - - m_pTimeIterateDataAtom(nullptr), - m_pTimeSequenceDataAtom(nullptr), - - m_pTimeEndSyncTimeCondition(nullptr), - - - m_haveTimePropertyList(false), - m_haveAnimateBehavior(false), - m_haveColorBehavior(false), - m_haveEffectBehavior(false), - m_haveMotionBehavior(false), - m_haveRotationBehavior(false), - m_haveScaleBehavior(false), - m_haveSetBehavior(false), - m_haveCommandBehavior(false), - m_haveClientVisualElement(false), - - m_haveIterateDataAtom(false), - m_haveSequenceAtom(false), - - m_haveTimeEndSyncTime(false) - { - } - - virtual ~CRecordExtTimeNodeContainer() - { - RELEASEOBJECT(m_pTimePropertyList); - RELEASEOBJECT(m_pTimeAnimateBehavior); - RELEASEOBJECT(m_pTimeColorBehavior); - RELEASEOBJECT(m_pTimeEffectBehavior); - RELEASEOBJECT(m_pTimeMotionBehavior); - RELEASEOBJECT(m_pTimeRotationBehavior); - RELEASEOBJECT(m_pTimeScaleBehavior); - RELEASEOBJECT(m_pTimeSetBehavior); - RELEASEOBJECT(m_pTimeCommandBehavior); - RELEASEOBJECT(m_pClientVisualElement); - - RELEASEOBJECT(m_pTimeIterateDataAtom); - RELEASEOBJECT(m_pTimeSequenceDataAtom); - - RELEASEOBJECT(m_pTimeEndSyncTimeCondition); - - for ( size_t i = 0; i < m_arrRgBeginTimeCondition.size(); ++i ) - RELEASEOBJECT ( m_arrRgBeginTimeCondition[i] ); - - for ( size_t i = 0; i < m_arrRgNextTimeCondition.size(); ++i ) - RELEASEOBJECT ( m_arrRgNextTimeCondition[i] ); - - for ( size_t i = 0; i < m_arrRgEndTimeCondition.size(); ++i ) - RELEASEOBJECT ( m_arrRgEndTimeCondition[i] ); - - for ( size_t i = 0; i < m_arrRgTimeModifierAtom.size(); ++i ) - RELEASEOBJECT ( m_arrRgTimeModifierAtom[i] ); - - for ( size_t i = 0; i < m_arrRgSubEffect.size(); ++i ) - RELEASEOBJECT ( m_arrRgSubEffect[i] ); - - for ( size_t i = 0; i < m_arrRgExtTimeNodeChildren.size(); ++i ) - RELEASEOBJECT ( m_arrRgExtTimeNodeChildren[i] ); - } - - virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ) - { - m_oHeader = oHeader; - - LONG lPos = 0; - StreamUtils::StreamPosition ( lPos, pStream ); - - SRecordHeader rHeader; - - if ( rHeader.ReadFromStream(pStream) ) - m_oTimeNodeAtom.ReadFromStream ( rHeader, pStream ); - - UINT lCurLen = m_oTimeNodeAtom.m_oHeader.RecLen + 8; - - SRecordHeader ReadHeader; - - while ( lCurLen < m_oHeader.RecLen ) - { - LONG lPosExpected = 0; - StreamUtils::StreamPosition ( lPosExpected, pStream ); - - if ( ReadHeader.ReadFromStream(pStream) == false) - break; - - lCurLen += 8 + ReadHeader.RecLen; - lPosExpected += 8 + ReadHeader.RecLen; - - switch (ReadHeader.RecType) - { - case RT_TimePropertyList: - { - - m_pTimePropertyList = new CRecordTimePropertyList4TimeNodeContainer; - m_pTimePropertyList->ReadFromStream(ReadHeader, pStream); - m_haveTimePropertyList = true; - - break; - } - - case RT_TimeAnimateBehaviorContainer: - { - - m_pTimeAnimateBehavior = new CRecordTimeAnimateBehaviorContainer; - m_pTimeAnimateBehavior->ReadFromStream(ReadHeader, pStream); - m_haveAnimateBehavior = true; - - break; - } - - case RT_TimeColorBehaviorContainer: - { - - m_pTimeColorBehavior = new CRecordTimeColorBehaviorContainer; - m_pTimeColorBehavior->ReadFromStream(ReadHeader, pStream); - m_haveColorBehavior = true; - - break; - } - - case RT_TimeEffectBehaviorContainer: - { - - m_pTimeEffectBehavior = new CRecordTimeEffectBehaviorContainer(); - m_pTimeEffectBehavior->ReadFromStream(ReadHeader, pStream); - m_haveEffectBehavior = true; - - break; - } - - case RT_TimeMotionBehaviorContainer: - { - - m_pTimeMotionBehavior = new CRecordTimeMotionBehaviorContainer(); - m_pTimeMotionBehavior->ReadFromStream(ReadHeader, pStream); - m_haveMotionBehavior = true; - - break; - } - - case RT_TimeRotationBehaviorContainer: - { - - m_pTimeRotationBehavior = new CRecordTimeRotationBehaviorContainer(); - m_pTimeRotationBehavior->ReadFromStream(ReadHeader, pStream); - m_haveRotationBehavior = true; - - break; - } - - case RT_TimeScaleBehaviorContainer: - { - - m_pTimeScaleBehavior = new CRecordTimeScaleBehaviorContainer(); - m_pTimeScaleBehavior->ReadFromStream(ReadHeader, pStream); - m_haveScaleBehavior = true; - - break; - } - - case RT_TimeSetBehaviorContainer: - { - - m_pTimeSetBehavior = new CRecordTimeSetBehaviorContainer(); - m_pTimeSetBehavior->ReadFromStream(ReadHeader, pStream); - m_haveSetBehavior = true; - - break; - } - - case RT_TimeCommandBehaviorContainer: - { - - m_pTimeCommandBehavior = new CRecordTimeCommandBehaviorContainer(); - m_pTimeCommandBehavior->ReadFromStream(ReadHeader, pStream); - m_haveCommandBehavior = true; - - break; - } - - case RT_TimeClientVisualElement: - { - - m_pClientVisualElement = new CRecordClientVisualElementContainer(); - m_pClientVisualElement->ReadFromStream(ReadHeader, pStream); - m_haveClientVisualElement = true; - - break; - } - - case RT_TimeIterateData: - { - - m_pTimeIterateDataAtom = new CRecordTimeIterateDataAtom(); - m_pTimeIterateDataAtom->ReadFromStream(ReadHeader, pStream); - m_haveIterateDataAtom = true; - - break; - } - - case RT_TimeSequenceData: - { - - m_pTimeSequenceDataAtom = new CRecordTimeSequenceDataAtom(); - m_pTimeSequenceDataAtom->ReadFromStream(ReadHeader, pStream); - m_haveSequenceAtom = true; - - break; - } - - case RT_TimeConditionContainer: - { - - CRecordTimeConditionContainer* pTimeCondition = - new CRecordTimeConditionContainer(); - pTimeCondition->ReadFromStream(ReadHeader, pStream); - unsigned short recInst = ReadHeader.RecInstance; - - if (recInst == TL_CT_Begin) - { - m_arrRgBeginTimeCondition.push_back(pTimeCondition); - } - else if (recInst == TL_CT_Next) - { - m_arrRgNextTimeCondition.push_back(pTimeCondition); - } - - else if (recInst == TL_CT_End || recInst == TL_CT_Previous) - { - m_arrRgEndTimeCondition.push_back(pTimeCondition); - } - else - { - m_haveTimeEndSyncTime = true; - m_pTimeEndSyncTimeCondition = pTimeCondition; - } - - - break; // A lot of records. Look at instance - } - - - case RT_TimeModifier: - { - - CRecordTimeModifierAtom* pModAtom = new CRecordTimeModifierAtom(); - pModAtom->ReadFromStream(ReadHeader, pStream); - m_arrRgTimeModifierAtom.push_back(pModAtom); - - break; - } - - case RT_TimeSubEffectContainer: - { - - CRecordSubEffectContainer* pSub = new CRecordSubEffectContainer(); - pSub->ReadFromStream(ReadHeader, pStream); - m_arrRgSubEffect.push_back(pSub); - - break; - } - - case RT_TimeExtTimeNodeContainer: - { - - CRecordExtTimeNodeContainer* pExt = new CRecordExtTimeNodeContainer(); - pExt->ReadFromStream(ReadHeader, pStream); - m_arrRgExtTimeNodeChildren.push_back(pExt); - - break; - } - - - default: - break; -// throw ; - } - LONG lPosCurrent = 0; - StreamUtils::StreamPosition ( lPosCurrent, pStream ); - if (lPosExpected != lPosCurrent) - { - StreamUtils::StreamSeek ( lPosExpected, pStream ); - } - - } - StreamUtils::StreamSeek ( lPos + m_oHeader.RecLen, pStream ); - } - - - // - inline CRecordTimeModifierAtom* GetModifier (_UINT32 Type) - { - for ( size_t i = 0; i < m_arrRgTimeModifierAtom.size(); ++i ) - if (m_arrRgTimeModifierAtom[i]->m_nType == Type) - return m_arrRgTimeModifierAtom[i]; - - return nullptr; - } - - inline int GetNodeType () const - { - return m_oTimeNodeAtom.m_dwType; - } + CRecordExtTimeNodeContainer(); + virtual ~CRecordExtTimeNodeContainer(); + virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ) override; + CRecordTimeModifierAtom* GetModifier (_UINT32 Type); + int GetNodeType () const; }; } diff --git a/MsBinaryFile/PptFile/Records/Animations/HashCode10Atom.cpp b/MsBinaryFile/PptFile/Records/Animations/HashCode10Atom.cpp new file mode 100644 index 0000000000..e2ff6baa2b --- /dev/null +++ b/MsBinaryFile/PptFile/Records/Animations/HashCode10Atom.cpp @@ -0,0 +1,9 @@ +#include "HashCode10Atom.h" + + +void CRecordHashCode10Atom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + m_nHash = StreamUtils::ReadDWORD(pStream); +} diff --git a/MsBinaryFile/PptFile/Records/Animations/HashCode10Atom.h b/MsBinaryFile/PptFile/Records/Animations/HashCode10Atom.h index 401d5e146b..a12bb33c91 100644 --- a/MsBinaryFile/PptFile/Records/Animations/HashCode10Atom.h +++ b/MsBinaryFile/PptFile/Records/Animations/HashCode10Atom.h @@ -41,12 +41,6 @@ class CRecordHashCode10Atom : public CUnknownRecord public: _UINT32 m_nHash; - virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ) - { - m_oHeader = oHeader; - - m_nHash = StreamUtils::ReadDWORD(pStream); - } - + virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ) override; }; } diff --git a/MsBinaryFile/PptFile/Records/Animations/LevelInfoAtom.cpp b/MsBinaryFile/PptFile/Records/Animations/LevelInfoAtom.cpp new file mode 100644 index 0000000000..28a76d9349 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/Animations/LevelInfoAtom.cpp @@ -0,0 +1,19 @@ +#include "LevelInfoAtom.h" + + +CRecordLevelInfoAtom::CRecordLevelInfoAtom() +{ + +} + +CRecordLevelInfoAtom::~CRecordLevelInfoAtom() +{ + +} + +void CRecordLevelInfoAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + m_nLevel = StreamUtils::ReadDWORD ( pStream ); +} diff --git a/MsBinaryFile/PptFile/Records/Animations/LevelInfoAtom.h b/MsBinaryFile/PptFile/Records/Animations/LevelInfoAtom.h index 0cc08cf676..f9f3182447 100644 --- a/MsBinaryFile/PptFile/Records/Animations/LevelInfoAtom.h +++ b/MsBinaryFile/PptFile/Records/Animations/LevelInfoAtom.h @@ -39,24 +39,12 @@ namespace PPT_FORMAT class CRecordLevelInfoAtom : public CUnknownRecord { public: - CRecordLevelInfoAtom() - { - - } - - ~CRecordLevelInfoAtom() - { - - } - - virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ) - { - m_oHeader = oHeader; - - m_nLevel = StreamUtils::ReadDWORD ( pStream ); - } - - _UINT32 m_nLevel; + + CRecordLevelInfoAtom(); + ~CRecordLevelInfoAtom(); + + virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ); + }; } diff --git a/MsBinaryFile/PptFile/Records/Animations/ParaBuildAtom.cpp b/MsBinaryFile/PptFile/Records/Animations/ParaBuildAtom.cpp new file mode 100644 index 0000000000..0a903b819d --- /dev/null +++ b/MsBinaryFile/PptFile/Records/Animations/ParaBuildAtom.cpp @@ -0,0 +1,19 @@ +#include "ParaBuildAtom.h" + + +void CRecordParaBuildAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + m_nParaBuild = StreamUtils::ReadDWORD ( pStream ); + m_nBuildLevel = StreamUtils::ReadDWORD ( pStream ); + + _UINT32 Value = StreamUtils::ReadDWORD ( pStream ); + + m_fAnimBackground = ( 0x01 == ( 0x01 & ((BYTE)Value) ) ); + m_fReverse = ( 0x02 == ( 0x02 & ((BYTE)Value) ) ); + m_fUserSetAnimBackground = ( 0x04 == ( 0x04 & ((BYTE)Value) ) ); + m_fAutomatic = ( 0x08 == ( 0x08 & ((BYTE)Value) ) ); + + m_nDelayTime = StreamUtils::ReadDWORD ( pStream ); +} diff --git a/MsBinaryFile/PptFile/Records/Animations/ParaBuildAtom.h b/MsBinaryFile/PptFile/Records/Animations/ParaBuildAtom.h index a485fde7e7..9f3b909fb8 100644 --- a/MsBinaryFile/PptFile/Records/Animations/ParaBuildAtom.h +++ b/MsBinaryFile/PptFile/Records/Animations/ParaBuildAtom.h @@ -39,22 +39,7 @@ namespace PPT_FORMAT class CRecordParaBuildAtom : public CUnknownRecord { public: - virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ) - { - m_oHeader = oHeader; - - m_nParaBuild = StreamUtils::ReadDWORD ( pStream ); - m_nBuildLevel = StreamUtils::ReadDWORD ( pStream ); - - _UINT32 Value = StreamUtils::ReadDWORD ( pStream ); - - m_fAnimBackground = ( 0x01 == ( 0x01 & ((BYTE)Value) ) ); - m_fReverse = ( 0x02 == ( 0x02 & ((BYTE)Value) ) ); - m_fUserSetAnimBackground = ( 0x04 == ( 0x04 & ((BYTE)Value) ) ); - m_fAutomatic = ( 0x08 == ( 0x08 & ((BYTE)Value) ) ); - - m_nDelayTime = StreamUtils::ReadDWORD ( pStream ); - } + virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ) override; public: diff --git a/MsBinaryFile/PptFile/Records/Animations/ParaBuildContainer.cpp b/MsBinaryFile/PptFile/Records/Animations/ParaBuildContainer.cpp new file mode 100644 index 0000000000..cec28a7366 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/Animations/ParaBuildContainer.cpp @@ -0,0 +1,40 @@ +#include "ParaBuildContainer.h" + + +CRecordParaBuildContainer::CRecordParaBuildContainer() +{ + +} + +CRecordParaBuildContainer::~CRecordParaBuildContainer() +{ + +} + +void CRecordParaBuildContainer::ReadFromStream(SRecordHeader &header, POLE::Stream *pStream) +{ + LONG lPos(0); StreamUtils::StreamPosition(lPos, pStream); + CRecordBuildListSubContainer::ReadFromStream(header, pStream); + + UINT lCurLen = buildAtom.m_oHeader.RecLen + 8 + 24; // BuildAtom - 24 + + + SRecordHeader paraBuildAtomHeader; + if (paraBuildAtomHeader.ReadFromStream(pStream)) + { + m_oParaBuildAtom.ReadFromStream ( paraBuildAtomHeader, pStream ); + lCurLen += paraBuildAtomHeader.RecLen + 8; + } + + while (lCurLen < m_oHeader.RecLen ) + { + CRecordParaBuildLevel buildLevel; + buildLevel.ReadFromStream(pStream); + + rgParaBuildLevel.push_back(buildLevel); + + lCurLen += buildLevel.getRecordLen(); + } + + StreamUtils::StreamSeek(lPos + m_oHeader.RecLen, pStream); +} diff --git a/MsBinaryFile/PptFile/Records/Animations/ParaBuildContainer.h b/MsBinaryFile/PptFile/Records/Animations/ParaBuildContainer.h index 9148900dd6..471c73f951 100644 --- a/MsBinaryFile/PptFile/Records/Animations/ParaBuildContainer.h +++ b/MsBinaryFile/PptFile/Records/Animations/ParaBuildContainer.h @@ -42,42 +42,10 @@ class CRecordParaBuildContainer : public CRecordBuildListSubContainer { public: - CRecordParaBuildContainer() - { + CRecordParaBuildContainer(); + virtual ~CRecordParaBuildContainer(); - } - - virtual ~CRecordParaBuildContainer() - { - } - - virtual void ReadFromStream ( SRecordHeader & header, POLE::Stream* pStream ) override - { - LONG lPos(0); StreamUtils::StreamPosition(lPos, pStream); - CRecordBuildListSubContainer::ReadFromStream(header, pStream); - - UINT lCurLen = buildAtom.m_oHeader.RecLen + 8 + 24; // BuildAtom - 24 - - - SRecordHeader paraBuildAtomHeader; - if (paraBuildAtomHeader.ReadFromStream(pStream)) - { - m_oParaBuildAtom.ReadFromStream ( paraBuildAtomHeader, pStream ); - lCurLen += paraBuildAtomHeader.RecLen + 8; - } - - while (lCurLen < m_oHeader.RecLen ) - { - CRecordParaBuildLevel buildLevel; - buildLevel.ReadFromStream(pStream); - - rgParaBuildLevel.push_back(buildLevel); - - lCurLen += buildLevel.getRecordLen(); - } - - StreamUtils::StreamSeek(lPos + m_oHeader.RecLen, pStream); - } + virtual void ReadFromStream ( SRecordHeader & header, POLE::Stream* pStream ) override; public: CRecordParaBuildAtom m_oParaBuildAtom; diff --git a/MsBinaryFile/PptFile/Records/Animations/ParaBuildLevel.cpp b/MsBinaryFile/PptFile/Records/Animations/ParaBuildLevel.cpp new file mode 100644 index 0000000000..eeb5cf0f2c --- /dev/null +++ b/MsBinaryFile/PptFile/Records/Animations/ParaBuildLevel.cpp @@ -0,0 +1,19 @@ +#include "ParaBuildLevel.h" + + +void CRecordParaBuildLevel::ReadFromStream(POLE::Stream *pStream) +{ + SRecordHeader oHeader; + + if (oHeader.ReadFromStream(pStream)) + { + m_oLevelInfoAtom.ReadFromStream ( oHeader, pStream ); + m_nRecordLen += oHeader.RecLen + 8; + } + + if (oHeader.ReadFromStream(pStream)) + { + m_oTimeNode.ReadFromStream ( oHeader, pStream ); + m_nRecordLen += oHeader.RecLen + 8; + } +} diff --git a/MsBinaryFile/PptFile/Records/Animations/ParaBuildLevel.h b/MsBinaryFile/PptFile/Records/Animations/ParaBuildLevel.h index 5e0c787f4f..575a791827 100644 --- a/MsBinaryFile/PptFile/Records/Animations/ParaBuildLevel.h +++ b/MsBinaryFile/PptFile/Records/Animations/ParaBuildLevel.h @@ -40,30 +40,10 @@ class CRecordParaBuildLevel { public: - CRecordParaBuildLevel () : m_nRecordLen(0) - { - } + CRecordParaBuildLevel (); + ~CRecordParaBuildLevel(); - ~CRecordParaBuildLevel() - { - } - - virtual void ReadFromStream ( POLE::Stream* pStream ) - { - SRecordHeader oHeader; - - if (oHeader.ReadFromStream(pStream)) - { - m_oLevelInfoAtom.ReadFromStream ( oHeader, pStream ); - m_nRecordLen += oHeader.RecLen + 8; - } - - if (oHeader.ReadFromStream(pStream)) - { - m_oTimeNode.ReadFromStream ( oHeader, pStream ); - m_nRecordLen += oHeader.RecLen + 8; - } - } + virtual void ReadFromStream ( POLE::Stream* pStream ); _UINT32 getRecordLen()const {return m_nRecordLen;} @@ -71,5 +51,5 @@ public: CRecordExtTimeNodeContainer m_oTimeNode; // ExtTimeNodeContainer private: - _UINT32 m_nRecordLen; + _UINT32 m_nRecordLen = 0; }; diff --git a/MsBinaryFile/PptFile/Records/Animations/SubEffectContainer.cpp b/MsBinaryFile/PptFile/Records/Animations/SubEffectContainer.cpp new file mode 100644 index 0000000000..4e0e95eabe --- /dev/null +++ b/MsBinaryFile/PptFile/Records/Animations/SubEffectContainer.cpp @@ -0,0 +1,108 @@ +#include "SubEffectContainer.h" + + +//-------------------------------------------------------------------------------- +#define SUBEFFECT_CASE(RECORD_TYPE, P_VAR, CLASS_RECORD_NAME, FLAG) \ + case RECORD_TYPE: { P_VAR = new CLASS_RECORD_NAME(); \ + P_VAR->ReadFromStream(ReadHeader, pStream); \ + FLAG = true; \ + break; } \ +//------------------------------------------------------------------------------- + +CRecordSubEffectContainer::CRecordSubEffectContainer() : + m_pTimePropertyList(nullptr), + m_pTimeColorBehavior(nullptr), + m_pTimeSetBehavior(nullptr), + m_pTimeCommandBehavior(nullptr), + m_pClientVisualElement(nullptr), + + m_haveTimePropertyList(false), + m_haveColorBehavior(false), + m_haveSetBehavior(false), + m_haveCommandBehavior(false), + m_haveClientVisualElement(false) +{ + +} + +CRecordSubEffectContainer::~CRecordSubEffectContainer() +{ + RELEASEOBJECT(m_pTimePropertyList); + RELEASEOBJECT(m_pTimeColorBehavior); + RELEASEOBJECT(m_pTimeSetBehavior); + RELEASEOBJECT(m_pTimeCommandBehavior); + RELEASEOBJECT(m_pClientVisualElement); + + for (auto pRecord : m_arrRgBeginTimeCondition) + RELEASEOBJECT(pRecord); + for (auto pRecord : m_arrRgEndTimeCondition) + RELEASEOBJECT(pRecord); + for (auto pRecord : m_arrRgTimeModifierAtom) + RELEASEOBJECT(pRecord); +} + +void CRecordSubEffectContainer::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + LONG lPos(0); StreamUtils::StreamPosition(lPos, pStream); + + SRecordHeader ReadHeader; + + if ( ReadHeader.ReadFromStream(pStream) ) + m_oTimeNodeAtom.ReadFromStream ( ReadHeader, pStream ); + + UINT lCurLen = m_oTimeNodeAtom.m_oHeader.RecLen + 8; + while ( lCurLen < m_oHeader.RecLen ) + { + if ( ReadHeader.ReadFromStream(pStream) == false) + break; + + lCurLen += 8 + ReadHeader.RecLen; + + switch (ReadHeader.RecType) + { + SUBEFFECT_CASE(RT_TimePropertyList, m_pTimePropertyList, + CRecordTimePropertyList4TimeNodeContainer, m_haveTimePropertyList) + SUBEFFECT_CASE(RT_TimeColorBehaviorContainer, m_pTimeColorBehavior, + CRecordTimeColorBehaviorContainer, m_haveColorBehavior) + SUBEFFECT_CASE(RT_TimeSetBehaviorContainer, m_pTimeSetBehavior, + CRecordTimeSetBehaviorContainer, m_haveSetBehavior) + SUBEFFECT_CASE(RT_TimeCommandBehaviorContainer, m_pTimeCommandBehavior, + CRecordTimeCommandBehaviorContainer, m_haveCommandBehavior) + SUBEFFECT_CASE(RT_TimeClientVisualElement, m_pClientVisualElement, + CRecordClientVisualElementContainer, m_haveClientVisualElement) + + case RT_TimeConditionContainer: + { + CRecordTimeConditionContainer* pTimeCondition = + new CRecordTimeConditionContainer(); + pTimeCondition->ReadFromStream(ReadHeader, pStream); + unsigned short recInst = ReadHeader.RecInstance; + + if (recInst == TL_CT_Begin) + m_arrRgBeginTimeCondition.push_back(pTimeCondition); + + else if (recInst == TL_CT_End) + m_arrRgEndTimeCondition.push_back(pTimeCondition); + else + throw ; + + break; // A lot of records. Look at instance + } + + case RT_TimeModifier: + { + CRecordTimeModifierAtom* pModAtom = new CRecordTimeModifierAtom(); + pModAtom->ReadFromStream(ReadHeader, pStream); + m_arrRgTimeModifierAtom.push_back(pModAtom); + break; + } + + default: + throw ; + } + } + StreamUtils::StreamSeek(lPos + m_oHeader.RecLen, pStream); + +} diff --git a/MsBinaryFile/PptFile/Records/Animations/SubEffectContainer.h b/MsBinaryFile/PptFile/Records/Animations/SubEffectContainer.h index 84747e29ed..ecb8efe58c 100644 --- a/MsBinaryFile/PptFile/Records/Animations/SubEffectContainer.h +++ b/MsBinaryFile/PptFile/Records/Animations/SubEffectContainer.h @@ -31,7 +31,6 @@ */ #pragma once - #include "../../Reader/Records.h" #include "TimeNodeAtom.h" #include "TimePropertyList4TimeNodeContainer.h" @@ -43,117 +42,16 @@ #include "TimeModifierAtom.h" -//-------------------------------------------------------------------------------- -#define SUBEFFECT_CASE(RECORD_TYPE, P_VAR, CLASS_RECORD_NAME, FLAG) \ - case RECORD_TYPE: { P_VAR = new CLASS_RECORD_NAME(); \ - P_VAR->ReadFromStream(ReadHeader, pStream); \ - FLAG = true; \ - break; } \ -//------------------------------------------------------------------------------- - - namespace PPT_FORMAT { struct CRecordSubEffectContainer : public CUnknownRecord { public: - CRecordSubEffectContainer () : - m_pTimePropertyList(nullptr), - m_pTimeColorBehavior(nullptr), - m_pTimeSetBehavior(nullptr), - m_pTimeCommandBehavior(nullptr), - m_pClientVisualElement(nullptr), + CRecordSubEffectContainer (); + virtual ~CRecordSubEffectContainer (); - m_haveTimePropertyList(false), - m_haveColorBehavior(false), - m_haveSetBehavior(false), - m_haveCommandBehavior(false), - m_haveClientVisualElement(false) - { - } - - virtual ~CRecordSubEffectContainer () - { - RELEASEOBJECT(m_pTimePropertyList); - RELEASEOBJECT(m_pTimeColorBehavior); - RELEASEOBJECT(m_pTimeSetBehavior); - RELEASEOBJECT(m_pTimeCommandBehavior); - RELEASEOBJECT(m_pClientVisualElement); - - for (auto pRecord : m_arrRgBeginTimeCondition) - RELEASEOBJECT(pRecord); - for (auto pRecord : m_arrRgEndTimeCondition) - RELEASEOBJECT(pRecord); - for (auto pRecord : m_arrRgTimeModifierAtom) - RELEASEOBJECT(pRecord); - } - - virtual void ReadFromStream (SRecordHeader & oHeader, POLE::Stream* pStream) - { - m_oHeader = oHeader; - - LONG lPos(0); StreamUtils::StreamPosition(lPos, pStream); - - SRecordHeader ReadHeader; - - if ( ReadHeader.ReadFromStream(pStream) ) - m_oTimeNodeAtom.ReadFromStream ( ReadHeader, pStream ); - - UINT lCurLen = m_oTimeNodeAtom.m_oHeader.RecLen + 8; - while ( lCurLen < m_oHeader.RecLen ) - { - if ( ReadHeader.ReadFromStream(pStream) == false) - break; - - lCurLen += 8 + ReadHeader.RecLen; - - switch (ReadHeader.RecType) - { - SUBEFFECT_CASE(RT_TimePropertyList, m_pTimePropertyList, - CRecordTimePropertyList4TimeNodeContainer, m_haveTimePropertyList) - SUBEFFECT_CASE(RT_TimeColorBehaviorContainer, m_pTimeColorBehavior, - CRecordTimeColorBehaviorContainer, m_haveColorBehavior) - SUBEFFECT_CASE(RT_TimeSetBehaviorContainer, m_pTimeSetBehavior, - CRecordTimeSetBehaviorContainer, m_haveSetBehavior) - SUBEFFECT_CASE(RT_TimeCommandBehaviorContainer, m_pTimeCommandBehavior, - CRecordTimeCommandBehaviorContainer, m_haveCommandBehavior) - SUBEFFECT_CASE(RT_TimeClientVisualElement, m_pClientVisualElement, - CRecordClientVisualElementContainer, m_haveClientVisualElement) - - case RT_TimeConditionContainer: - { - CRecordTimeConditionContainer* pTimeCondition = - new CRecordTimeConditionContainer(); - pTimeCondition->ReadFromStream(ReadHeader, pStream); - unsigned short recInst = ReadHeader.RecInstance; - - if (recInst == TL_CT_Begin) - m_arrRgBeginTimeCondition.push_back(pTimeCondition); - - else if (recInst == TL_CT_End) - m_arrRgEndTimeCondition.push_back(pTimeCondition); - else - throw ; - - break; // A lot of records. Look at instance - } - - case RT_TimeModifier: - { - CRecordTimeModifierAtom* pModAtom = new CRecordTimeModifierAtom(); - pModAtom->ReadFromStream(ReadHeader, pStream); - m_arrRgTimeModifierAtom.push_back(pModAtom); - break; - } - - default: - throw ; - } - } - StreamUtils::StreamSeek(lPos + m_oHeader.RecLen, pStream); - - } + virtual void ReadFromStream (SRecordHeader & oHeader, POLE::Stream* pStream) override; public: diff --git a/MsBinaryFile/PptFile/Records/Animations/TimeAnimateBehaviorAtom.cpp b/MsBinaryFile/PptFile/Records/Animations/TimeAnimateBehaviorAtom.cpp new file mode 100644 index 0000000000..89fa8df338 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/Animations/TimeAnimateBehaviorAtom.cpp @@ -0,0 +1,20 @@ +#include "TimeAnimateBehaviorAtom.h" + + +void CRecordTimeAnimateBehaviorAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + m_nCalcMode = StreamUtils::ReadDWORD ( pStream ); + + _UINT32 Value = StreamUtils::ReadDWORD ( pStream ); + + m_bByPropertyUsed = ( 0x01 == ( 0x01 & ((BYTE)Value) ) ); + m_bFromPropertyUsed = ( 0x02 == ( 0x02 & ((BYTE)Value) ) ); + m_bToPropertyUsed = ( 0x04 == ( 0x04 & ((BYTE)Value) ) ); + m_bCalcModePropertyUsed = ( 0x08 == ( 0x08 & ((BYTE)Value) ) ); + m_bAnimationValuesPropertyUsed = ( 0x10 == ( 0x10 & ((BYTE)Value) ) ); + m_bValueTypePropertyUsed = ( 0x20 == ( 0x20 & ((BYTE)Value) ) ); + + m_ValueType = (TimeAnimateBehaviorValueTypeEnum)StreamUtils::ReadDWORD ( pStream ); +} diff --git a/MsBinaryFile/PptFile/Records/Animations/TimeAnimateBehaviorAtom.h b/MsBinaryFile/PptFile/Records/Animations/TimeAnimateBehaviorAtom.h index 6a20e886d9..3d6cb72681 100644 --- a/MsBinaryFile/PptFile/Records/Animations/TimeAnimateBehaviorAtom.h +++ b/MsBinaryFile/PptFile/Records/Animations/TimeAnimateBehaviorAtom.h @@ -31,7 +31,6 @@ */ #pragma once - #include "../../Reader/Records.h" #include "../../Enums/_includer.h" @@ -41,23 +40,7 @@ namespace PPT_FORMAT class CRecordTimeAnimateBehaviorAtom : public CUnknownRecord { public: - virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ) - { - m_oHeader = oHeader; - - m_nCalcMode = StreamUtils::ReadDWORD ( pStream ); - - _UINT32 Value = StreamUtils::ReadDWORD ( pStream ); - - m_bByPropertyUsed = ( 0x01 == ( 0x01 & ((BYTE)Value) ) ); - m_bFromPropertyUsed = ( 0x02 == ( 0x02 & ((BYTE)Value) ) ); - m_bToPropertyUsed = ( 0x04 == ( 0x04 & ((BYTE)Value) ) ); - m_bCalcModePropertyUsed = ( 0x08 == ( 0x08 & ((BYTE)Value) ) ); - m_bAnimationValuesPropertyUsed = ( 0x10 == ( 0x10 & ((BYTE)Value) ) ); - m_bValueTypePropertyUsed = ( 0x20 == ( 0x20 & ((BYTE)Value) ) ); - - m_ValueType = (TimeAnimateBehaviorValueTypeEnum)StreamUtils::ReadDWORD ( pStream ); - } + virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ) override; public: diff --git a/MsBinaryFile/PptFile/Records/Animations/TimeAnimateBehaviorContainer.cpp b/MsBinaryFile/PptFile/Records/Animations/TimeAnimateBehaviorContainer.cpp new file mode 100644 index 0000000000..0c94daae2d --- /dev/null +++ b/MsBinaryFile/PptFile/Records/Animations/TimeAnimateBehaviorContainer.cpp @@ -0,0 +1,40 @@ +#include "TimeAnimateBehaviorContainer.h" + + +void CRecordTimeAnimateBehaviorContainer::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + SRecordHeader ReadHeader; + + if ( ReadHeader.ReadFromStream(pStream) ) + m_oAnimateBehaviorAtom.ReadFromStream ( ReadHeader, pStream ); + + ReadHeader.ReadFromStream(pStream) ; + if (ReadHeader.RecType == RT_TimeAnimationValueList) + m_oAnimateValueList.ReadFromStream ( ReadHeader, pStream ); + else + StreamUtils::StreamSkipBack(8, pStream); + + + if ( m_oAnimateBehaviorAtom.m_bByPropertyUsed ) + { + if ( ReadHeader.ReadFromStream(pStream) ) + m_oVarBy.ReadFromStream ( ReadHeader, pStream ); + } + + if ( m_oAnimateBehaviorAtom.m_bFromPropertyUsed ) + { + if ( ReadHeader.ReadFromStream(pStream) ) + m_oVarFrom.ReadFromStream ( ReadHeader, pStream ); + } + + if ( m_oAnimateBehaviorAtom.m_bToPropertyUsed ) + { + if ( ReadHeader.ReadFromStream(pStream) ) + m_oVarTo.ReadFromStream ( ReadHeader, pStream ); + } + + if ( ReadHeader.ReadFromStream(pStream) ) + m_oBehavior.ReadFromStream ( ReadHeader, pStream ); +} diff --git a/MsBinaryFile/PptFile/Records/Animations/TimeAnimateBehaviorContainer.h b/MsBinaryFile/PptFile/Records/Animations/TimeAnimateBehaviorContainer.h index bf4712f9b1..bca3423d7a 100644 --- a/MsBinaryFile/PptFile/Records/Animations/TimeAnimateBehaviorContainer.h +++ b/MsBinaryFile/PptFile/Records/Animations/TimeAnimateBehaviorContainer.h @@ -45,43 +45,7 @@ namespace PPT_FORMAT class CRecordTimeAnimateBehaviorContainer : public CUnknownRecord { public: - virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ) - { - m_oHeader = oHeader; - - SRecordHeader ReadHeader; - - if ( ReadHeader.ReadFromStream(pStream) ) - m_oAnimateBehaviorAtom.ReadFromStream ( ReadHeader, pStream ); - - ReadHeader.ReadFromStream(pStream) ; - if (ReadHeader.RecType == RT_TimeAnimationValueList) - m_oAnimateValueList.ReadFromStream ( ReadHeader, pStream ); - else - StreamUtils::StreamSkipBack(8, pStream); - - - if ( m_oAnimateBehaviorAtom.m_bByPropertyUsed ) - { - if ( ReadHeader.ReadFromStream(pStream) ) - m_oVarBy.ReadFromStream ( ReadHeader, pStream ); - } - - if ( m_oAnimateBehaviorAtom.m_bFromPropertyUsed ) - { - if ( ReadHeader.ReadFromStream(pStream) ) - m_oVarFrom.ReadFromStream ( ReadHeader, pStream ); - } - - if ( m_oAnimateBehaviorAtom.m_bToPropertyUsed ) - { - if ( ReadHeader.ReadFromStream(pStream) ) - m_oVarTo.ReadFromStream ( ReadHeader, pStream ); - } - - if ( ReadHeader.ReadFromStream(pStream) ) - m_oBehavior.ReadFromStream ( ReadHeader, pStream ); - } + virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ); public: diff --git a/MsBinaryFile/PptFile/Records/Animations/TimeAnimateColor.cpp b/MsBinaryFile/PptFile/Records/Animations/TimeAnimateColor.cpp new file mode 100644 index 0000000000..c8a5dd9d95 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/Animations/TimeAnimateColor.cpp @@ -0,0 +1,7 @@ +#include "TimeAnimateColor.h" + + +unsigned long TimeAnimateColor::FRGB(BYTE alpha) +{ + return ((component2 << 16) | (component1 << 8) | (component0 << 0) | (alpha << 24)); +} diff --git a/MsBinaryFile/PptFile/Records/Animations/TimeAnimateColor.h b/MsBinaryFile/PptFile/Records/Animations/TimeAnimateColor.h index 89b4165058..9f6d3c31e8 100644 --- a/MsBinaryFile/PptFile/Records/Animations/TimeAnimateColor.h +++ b/MsBinaryFile/PptFile/Records/Animations/TimeAnimateColor.h @@ -44,9 +44,6 @@ struct TimeAnimateColor _UINT32 component1; _UINT32 component2; - inline unsigned long FRGB (BYTE alpha = 0xFF) - { - return ((component2 << 16) | (component1 << 8) | (component0 << 0) | (alpha << 24)); - } + unsigned long FRGB (BYTE alpha = 0xFF); }; } diff --git a/MsBinaryFile/PptFile/Records/Animations/TimeAnimateColorBy.cpp b/MsBinaryFile/PptFile/Records/Animations/TimeAnimateColorBy.cpp new file mode 100644 index 0000000000..3f80dd4e93 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/Animations/TimeAnimateColorBy.cpp @@ -0,0 +1,7 @@ +#include "TimeAnimateColorBy.h" + + +unsigned long TimeAnimateColorBy::FRGB(BYTE alpha) +{ + return ((component2 << 16) | (component1 << 8) | (component0 << 0) | (alpha << 24)); +} diff --git a/MsBinaryFile/PptFile/Records/Animations/TimeAnimateColorBy.h b/MsBinaryFile/PptFile/Records/Animations/TimeAnimateColorBy.h index 9cac62106d..b2b445dd3d 100644 --- a/MsBinaryFile/PptFile/Records/Animations/TimeAnimateColorBy.h +++ b/MsBinaryFile/PptFile/Records/Animations/TimeAnimateColorBy.h @@ -44,9 +44,6 @@ struct TimeAnimateColorBy _UINT32 component1; _UINT32 component2; - inline unsigned long FRGB (BYTE alpha = 0xFF) // - { - return ((component2 << 16) | (component1 << 8) | (component0 << 0) | (alpha << 24)); - } + unsigned long FRGB (BYTE alpha = 0xFF); }; } diff --git a/MsBinaryFile/PptFile/Records/Animations/TimeAnimationValueAtom.cpp b/MsBinaryFile/PptFile/Records/Animations/TimeAnimationValueAtom.cpp new file mode 100644 index 0000000000..c20b3001c7 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/Animations/TimeAnimationValueAtom.cpp @@ -0,0 +1,9 @@ +#include "TimeAnimationValueAtom.h" + + +void CRecordTimeAnimationValueAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + m_nTime = StreamUtils::ReadDWORD ( pStream ); +} diff --git a/MsBinaryFile/PptFile/Records/Animations/TimeAnimationValueAtom.h b/MsBinaryFile/PptFile/Records/Animations/TimeAnimationValueAtom.h index c9787eba46..0e1a30ecfb 100644 --- a/MsBinaryFile/PptFile/Records/Animations/TimeAnimationValueAtom.h +++ b/MsBinaryFile/PptFile/Records/Animations/TimeAnimationValueAtom.h @@ -39,15 +39,9 @@ namespace PPT_FORMAT class CRecordTimeAnimationValueAtom : public CUnknownRecord { public: - virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ) - { - m_oHeader = oHeader; - - m_nTime = StreamUtils::ReadDWORD ( pStream ); - } + virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ) override; public: - long m_nTime; }; diff --git a/MsBinaryFile/PptFile/Records/Animations/TimeAnimationValueListContainer.cpp b/MsBinaryFile/PptFile/Records/Animations/TimeAnimationValueListContainer.cpp new file mode 100644 index 0000000000..6fff618e93 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/Animations/TimeAnimationValueListContainer.cpp @@ -0,0 +1,44 @@ +#include "TimeAnimationValueListContainer.h" + + +CRecordTimeAnimationValueListContainer::CRecordTimeAnimationValueListContainer() +{ + +} + +CRecordTimeAnimationValueListContainer::~CRecordTimeAnimationValueListContainer() +{ + for (auto pEntry : m_arrEntry) + { + RELEASEOBJECT(pEntry); + } +} + +void CRecordTimeAnimationValueListContainer::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + LONG lPos = 0; + StreamUtils::StreamPosition ( lPos, pStream ); + + UINT lCurLen = 0; + + SRecordHeader ReadHeader; + while ( lCurLen < m_oHeader.RecLen ) + { + if ( ReadHeader.ReadFromStream(pStream) == false ) + { + break; + } + + lCurLen += 8 + ReadHeader.RecLen; + + auto Entry = new CRecordTimeAnimationValueListEntry; + Entry->ReadFromStream ( lCurLen, ReadHeader, pStream ); + + m_arrEntry.push_back ( Entry ); + + } + + StreamUtils::StreamSeek ( lPos + m_oHeader.RecLen, pStream ); +} diff --git a/MsBinaryFile/PptFile/Records/Animations/TimeAnimationValueListContainer.h b/MsBinaryFile/PptFile/Records/Animations/TimeAnimationValueListContainer.h index 35ca133d33..fe4c3d0a8f 100644 --- a/MsBinaryFile/PptFile/Records/Animations/TimeAnimationValueListContainer.h +++ b/MsBinaryFile/PptFile/Records/Animations/TimeAnimationValueListContainer.h @@ -43,45 +43,13 @@ class CRecordTimeAnimationValueListContainer : public CUnknownRecord { public: - ~CRecordTimeAnimationValueListContainer() - { - for (auto pEntry : m_arrEntry) - { - RELEASEOBJECT(pEntry); - } - } - virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ) - { - m_oHeader = oHeader; - - LONG lPos = 0; - StreamUtils::StreamPosition ( lPos, pStream ); - - UINT lCurLen = 0; - - SRecordHeader ReadHeader; - while ( lCurLen < m_oHeader.RecLen ) - { - if ( ReadHeader.ReadFromStream(pStream) == false ) - { - break; - } - - lCurLen += 8 + ReadHeader.RecLen; - - auto Entry = new CRecordTimeAnimationEntry; - Entry->ReadFromStream ( lCurLen, ReadHeader, pStream ); - - m_arrEntry.push_back ( Entry ); - - } - - StreamUtils::StreamSeek ( lPos + m_oHeader.RecLen, pStream ); - } + CRecordTimeAnimationValueListContainer(); + ~CRecordTimeAnimationValueListContainer(); + virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ) override; public: - std::vector m_arrEntry; + std::vector m_arrEntry; }; } diff --git a/MsBinaryFile/PptFile/Records/Animations/TimeAnimationValueListEntry.cpp b/MsBinaryFile/PptFile/Records/Animations/TimeAnimationValueListEntry.cpp new file mode 100644 index 0000000000..998d212805 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/Animations/TimeAnimationValueListEntry.cpp @@ -0,0 +1,44 @@ +#include "TimeAnimationValueListEntry.h" + + +CRecordTimeAnimationValueListEntry::CRecordTimeAnimationValueListEntry() +{ + +} + +CRecordTimeAnimationValueListEntry::~CRecordTimeAnimationValueListEntry() +{ + +} + +void CRecordTimeAnimationValueListEntry::ReadFromStream(UINT &CurLen, SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oTimeAnimationValueAtom.ReadFromStream ( oHeader, pStream ); + CurLen += 4; + +// UINT res = 0; + SRecordHeader ReadHeader; + + ReadHeader.ReadFromStream(pStream); + if ( ReadHeader.RecInstance == 0 && + ReadHeader.RecType == RT_TimeVariant ) + { + m_pVarValue = TimeVariantFactoryMethod( ReadHeader, pStream ); + CurLen += 8 + ReadHeader.RecLen; + }else + { + StreamUtils::StreamSkipBack(8, pStream); + } + + ReadHeader.ReadFromStream(pStream); + if ( ReadHeader.RecInstance == 1 && + ReadHeader.RecType == RT_TimeVariant) + { + m_VarFormula.ReadFromStream ( ReadHeader, pStream ); + CurLen += 8 + ReadHeader.RecLen; + } else + { + StreamUtils::StreamSkipBack(8, pStream); + } + +} diff --git a/MsBinaryFile/PptFile/Records/Animations/TimeAnimationValueListEntry.h b/MsBinaryFile/PptFile/Records/Animations/TimeAnimationValueListEntry.h index d144a486f0..8477eea7ba 100644 --- a/MsBinaryFile/PptFile/Records/Animations/TimeAnimationValueListEntry.h +++ b/MsBinaryFile/PptFile/Records/Animations/TimeAnimationValueListEntry.h @@ -40,50 +40,14 @@ namespace PPT_FORMAT { -class CRecordTimeAnimationEntry +class CRecordTimeAnimationValueListEntry { public: - CRecordTimeAnimationEntry() - { + CRecordTimeAnimationValueListEntry(); + virtual ~CRecordTimeAnimationValueListEntry(); - } - - virtual ~CRecordTimeAnimationEntry() - { - } - - virtual void ReadFromStream ( UINT& CurLen, SRecordHeader & oHeader, POLE::Stream* pStream ) - { - m_oTimeAnimationValueAtom.ReadFromStream ( oHeader, pStream ); - CurLen += 4; - -// UINT res = 0; - SRecordHeader ReadHeader; - - ReadHeader.ReadFromStream(pStream); - if ( ReadHeader.RecInstance == 0 && - ReadHeader.RecType == RT_TimeVariant ) - { - m_pVarValue = TimeVariantFactoryMethod( ReadHeader, pStream ); - CurLen += 8 + ReadHeader.RecLen; - }else - { - StreamUtils::StreamSkipBack(8, pStream); - } - - ReadHeader.ReadFromStream(pStream); - if ( ReadHeader.RecInstance == 1 && - ReadHeader.RecType == RT_TimeVariant) - { - m_VarFormula.ReadFromStream ( ReadHeader, pStream ); - CurLen += 8 + ReadHeader.RecLen; - } else - { - StreamUtils::StreamSkipBack(8, pStream); - } - - } + virtual void ReadFromStream ( UINT& CurLen, SRecordHeader & oHeader, POLE::Stream* pStream ); CRecordTimeAnimationValueAtom m_oTimeAnimationValueAtom; nullable m_pVarValue; diff --git a/MsBinaryFile/PptFile/Records/Animations/TimeBehaviorAtom.cpp b/MsBinaryFile/PptFile/Records/Animations/TimeBehaviorAtom.cpp new file mode 100644 index 0000000000..8e49321d39 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/Animations/TimeBehaviorAtom.cpp @@ -0,0 +1,20 @@ +#include "TimeBehaviorAtom.h" + + +void CRecordTimeBehaviorAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + // LONG lPos = 0; StreamUtils::StreamPosition ( lPos, pStream ); + + _UINT32 dwFlags = StreamUtils::ReadDWORD ( pStream ); + + m_bAdditivePropertyUsed = ( 0x01 == ( 0x01 & ((BYTE)dwFlags) ) ); + m_bAttributeNamesPropertyUsed = ( 0x04 == ( 0x04 & ((BYTE)dwFlags) ) ); + + m_nBehaviorAdditive = StreamUtils::ReadDWORD ( pStream ); + m_nBehaviorAccumulate = StreamUtils::ReadDWORD ( pStream ); + m_nBehaviorTransform = StreamUtils::ReadDWORD ( pStream ); + + // StreamUtils::StreamSeek ( lPos + m_oHeader.RecLen, pStream ); +} diff --git a/MsBinaryFile/PptFile/Records/Animations/TimeBehaviorAtom.h b/MsBinaryFile/PptFile/Records/Animations/TimeBehaviorAtom.h index 10fcb5f9a0..0e1e82e392 100644 --- a/MsBinaryFile/PptFile/Records/Animations/TimeBehaviorAtom.h +++ b/MsBinaryFile/PptFile/Records/Animations/TimeBehaviorAtom.h @@ -31,7 +31,6 @@ */ #pragma once - #include "../../Reader/Records.h" @@ -41,25 +40,8 @@ namespace PPT_FORMAT class CRecordTimeBehaviorAtom : public CUnknownRecord { public: - virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ) - { - m_oHeader = oHeader; + virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ); - // LONG lPos = 0; StreamUtils::StreamPosition ( lPos, pStream ); - - _UINT32 dwFlags = StreamUtils::ReadDWORD ( pStream ); - - m_bAdditivePropertyUsed = ( 0x01 == ( 0x01 & ((BYTE)dwFlags) ) ); - m_bAttributeNamesPropertyUsed = ( 0x04 == ( 0x04 & ((BYTE)dwFlags) ) ); - - m_nBehaviorAdditive = StreamUtils::ReadDWORD ( pStream ); - m_nBehaviorAccumulate = StreamUtils::ReadDWORD ( pStream ); - m_nBehaviorTransform = StreamUtils::ReadDWORD ( pStream ); - - // StreamUtils::StreamSeek ( lPos + m_oHeader.RecLen, pStream ); - } - -public: bool m_bAdditivePropertyUsed; bool m_bAttributeNamesPropertyUsed; diff --git a/MsBinaryFile/PptFile/Records/Animations/TimeBehaviorContainer.cpp b/MsBinaryFile/PptFile/Records/Animations/TimeBehaviorContainer.cpp new file mode 100644 index 0000000000..2512f89890 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/Animations/TimeBehaviorContainer.cpp @@ -0,0 +1,75 @@ +#include "TimeBehaviorContainer.h" + + +CRecordTimeBehaviorContainer::CRecordTimeBehaviorContainer() : + m_pStringList(nullptr), + m_pPropertyList(nullptr), + + m_haveStringList(false), + m_havePropertyList(false) +{ + +} + +CRecordTimeBehaviorContainer::~CRecordTimeBehaviorContainer() +{ + RELEASEOBJECT (m_pStringList); + RELEASEOBJECT (m_pPropertyList); +} + +void CRecordTimeBehaviorContainer::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + LONG lPos(0); StreamUtils::StreamPosition(lPos, pStream); + + SRecordHeader ReadHeader; + + if ( ReadHeader.ReadFromStream(pStream) ) + m_oBehaviorAtom.ReadFromStream ( ReadHeader, pStream ); + + UINT lCurLen = 8 + ReadHeader.RecLen; + + while ( lCurLen < m_oHeader.RecLen ) + { + if (ReadHeader.ReadFromStream(pStream) == false) + break; + + lCurLen += 8 + ReadHeader.RecLen; + + RecordType nRecord = ReadHeader.RecType; + + switch (nRecord) + { + case RT_TimeVariantList: + { + m_pStringList = new CRecordTimeStringListContainer(); + m_pStringList->ReadFromStream(ReadHeader, pStream); + m_haveStringList = true; + break; + } + + case RT_TimePropertyList: + { + m_pPropertyList = new CRecordTimePropertyList4TimeBehavior(); + m_pPropertyList->ReadFromStream(ReadHeader, pStream); + m_havePropertyList = true; + break; + } + + case RT_TimeClientVisualElement: + { + m_oClientVisualElement.ReadFromStream( ReadHeader, pStream ); + } + + default: + break ; + } + } + StreamUtils::StreamSeek(lPos + m_oHeader.RecLen, pStream); +} + +_UINT32 CRecordTimeBehaviorContainer::GetObjectID() +{ + return m_oClientVisualElement.m_oVisualShapeAtom.m_nObjectIdRef; +} diff --git a/MsBinaryFile/PptFile/Records/Animations/TimeBehaviorContainer.h b/MsBinaryFile/PptFile/Records/Animations/TimeBehaviorContainer.h index d1bec44236..83440cd770 100644 --- a/MsBinaryFile/PptFile/Records/Animations/TimeBehaviorContainer.h +++ b/MsBinaryFile/PptFile/Records/Animations/TimeBehaviorContainer.h @@ -45,78 +45,11 @@ namespace PPT_FORMAT class CRecordTimeBehaviorContainer : public CUnknownRecord { public: - CRecordTimeBehaviorContainer () : - m_pStringList(nullptr), - m_pPropertyList(nullptr), + CRecordTimeBehaviorContainer (); + virtual ~CRecordTimeBehaviorContainer (); + virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ); - m_haveStringList(false), - m_havePropertyList(false) - { - } - - virtual ~CRecordTimeBehaviorContainer () - { - RELEASEOBJECT (m_pStringList); - RELEASEOBJECT (m_pPropertyList); - } - - virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ) - { - m_oHeader = oHeader; - - LONG lPos(0); StreamUtils::StreamPosition(lPos, pStream); - - SRecordHeader ReadHeader; - - if ( ReadHeader.ReadFromStream(pStream) ) - m_oBehaviorAtom.ReadFromStream ( ReadHeader, pStream ); - - UINT lCurLen = 8 + ReadHeader.RecLen; - - while ( lCurLen < m_oHeader.RecLen ) - { - if (ReadHeader.ReadFromStream(pStream) == false) - break; - - lCurLen += 8 + ReadHeader.RecLen; - - RecordType nRecord = ReadHeader.RecType; - - switch (nRecord) - { - case RT_TimeVariantList: - { - m_pStringList = new CRecordTimeStringListContainer(); - m_pStringList->ReadFromStream(ReadHeader, pStream); - m_haveStringList = true; - break; - } - - case RT_TimePropertyList: - { - m_pPropertyList = new CRecordTimePropertyList4TimeBehavior(); - m_pPropertyList->ReadFromStream(ReadHeader, pStream); - m_havePropertyList = true; - break; - } - - case RT_TimeClientVisualElement: - { - m_oClientVisualElement.ReadFromStream( ReadHeader, pStream ); - } - - default: - break ; - } - } - StreamUtils::StreamSeek(lPos + m_oHeader.RecLen, pStream); - } - - - inline _UINT32 GetObjectID () - { - return m_oClientVisualElement.m_oVisualShapeAtom.m_nObjectIdRef; - } + _UINT32 GetObjectID (); public: CRecordTimeBehaviorAtom m_oBehaviorAtom; diff --git a/MsBinaryFile/PptFile/Records/Animations/TimeColorBehaviorAtom.cpp b/MsBinaryFile/PptFile/Records/Animations/TimeColorBehaviorAtom.cpp new file mode 100644 index 0000000000..bc0444c772 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/Animations/TimeColorBehaviorAtom.cpp @@ -0,0 +1,19 @@ +#include "TimeColorBehaviorAtom.h" + + +void CRecordTimeColorBehaviorAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + _UINT32 flag = StreamUtils::ReadDWORD ( pStream ); + + m_fByPropertyUsed = ( 0x01 == ( 0x01 & ((BYTE)flag) ) ); + m_fFromPropertyUsed = ( 0x02 == ( 0x02 & ((BYTE)flag) ) ); + m_fToPropertyUsed = ( 0x04 == ( 0x04 & ((BYTE)flag) ) ); + m_fColorSpacePropertyUsed = ( 0x08 == ( 0x08 & ((BYTE)flag) ) ); + m_fDirectionPropertyUsed = ( 0x10 == ( 0x10 & ((BYTE)flag) ) ); + + pStream->read ((unsigned char*) &m_sColorBy , sizeof ( TimeAnimateColorBy ) ); + pStream->read ((unsigned char*) &m_sColorFrom , sizeof ( TimeAnimateColor ) ); + pStream->read ((unsigned char*) &m_sColorTo , sizeof ( TimeAnimateColor ) ); +} diff --git a/MsBinaryFile/PptFile/Records/Animations/TimeColorBehaviorAtom.h b/MsBinaryFile/PptFile/Records/Animations/TimeColorBehaviorAtom.h index fc6fe97213..3d6a33067d 100644 --- a/MsBinaryFile/PptFile/Records/Animations/TimeColorBehaviorAtom.h +++ b/MsBinaryFile/PptFile/Records/Animations/TimeColorBehaviorAtom.h @@ -43,22 +43,7 @@ namespace PPT_FORMAT class CRecordTimeColorBehaviorAtom: public CUnknownRecord { public: - virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ) - { - m_oHeader = oHeader; - - _UINT32 flag = StreamUtils::ReadDWORD ( pStream ); - - m_fByPropertyUsed = ( 0x01 == ( 0x01 & ((BYTE)flag) ) ); - m_fFromPropertyUsed = ( 0x02 == ( 0x02 & ((BYTE)flag) ) ); - m_fToPropertyUsed = ( 0x04 == ( 0x04 & ((BYTE)flag) ) ); - m_fColorSpacePropertyUsed = ( 0x08 == ( 0x08 & ((BYTE)flag) ) ); - m_fDirectionPropertyUsed = ( 0x10 == ( 0x10 & ((BYTE)flag) ) ); - - pStream->read ((unsigned char*) &m_sColorBy , sizeof ( TimeAnimateColorBy ) ); - pStream->read ((unsigned char*) &m_sColorFrom , sizeof ( TimeAnimateColor ) ); - pStream->read ((unsigned char*) &m_sColorTo , sizeof ( TimeAnimateColor ) ); - } + virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ) override; public: diff --git a/MsBinaryFile/PptFile/Records/Animations/TimeColorBehaviorContainer.cpp b/MsBinaryFile/PptFile/Records/Animations/TimeColorBehaviorContainer.cpp new file mode 100644 index 0000000000..1855696e65 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/Animations/TimeColorBehaviorContainer.cpp @@ -0,0 +1,14 @@ +#include "TimeColorBehaviorContainer.h" + + +void CRecordTimeColorBehaviorContainer::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + SRecordHeader ReadHeader; + if (ReadHeader.ReadFromStream(pStream) ) + m_oColorBehaviorAtom.ReadFromStream ( ReadHeader, pStream ); + + if (ReadHeader.ReadFromStream(pStream) ) + m_oBehavior.ReadFromStream (ReadHeader, pStream ); +} diff --git a/MsBinaryFile/PptFile/Records/Animations/TimeColorBehaviorContainer.h b/MsBinaryFile/PptFile/Records/Animations/TimeColorBehaviorContainer.h index 08fde48cd7..5c89586535 100644 --- a/MsBinaryFile/PptFile/Records/Animations/TimeColorBehaviorContainer.h +++ b/MsBinaryFile/PptFile/Records/Animations/TimeColorBehaviorContainer.h @@ -43,17 +43,7 @@ namespace PPT_FORMAT class CRecordTimeColorBehaviorContainer : public CUnknownRecord { public: - virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ) - { - m_oHeader = oHeader; - - SRecordHeader ReadHeader; - if (ReadHeader.ReadFromStream(pStream) ) - m_oColorBehaviorAtom.ReadFromStream ( ReadHeader, pStream ); - - if (ReadHeader.ReadFromStream(pStream) ) - m_oBehavior.ReadFromStream (ReadHeader, pStream ); - } + virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ) override; public: diff --git a/MsBinaryFile/PptFile/Records/Animations/TimeCommandBehaviorAtom.cpp b/MsBinaryFile/PptFile/Records/Animations/TimeCommandBehaviorAtom.cpp new file mode 100644 index 0000000000..344aa8a4e7 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/Animations/TimeCommandBehaviorAtom.cpp @@ -0,0 +1,16 @@ +#include "TimeCommandBehaviorAtom.h" + + +void CRecordTimeCommandBehaviorAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + _UINT32 flags = StreamUtils::ReadLONG(pStream); + + m_fTypePropertyUsed = ( 0x01 == ( 0x01 & (flags) ) ); + m_fCommandPropertyUsed = ( 0x02 == ( 0x02 & (flags) ) ); + + + m_eCommandBehaviorType = (TimeCommandBehaviorTypeEnum) + StreamUtils::ReadLONG(pStream); +} diff --git a/MsBinaryFile/PptFile/Records/Animations/TimeCommandBehaviorAtom.h b/MsBinaryFile/PptFile/Records/Animations/TimeCommandBehaviorAtom.h index cf0ba1dc55..69f8f19f62 100644 --- a/MsBinaryFile/PptFile/Records/Animations/TimeCommandBehaviorAtom.h +++ b/MsBinaryFile/PptFile/Records/Animations/TimeCommandBehaviorAtom.h @@ -41,30 +41,8 @@ namespace PPT_FORMAT class CRecordTimeCommandBehaviorAtom : public CUnknownRecord { public: - CRecordTimeCommandBehaviorAtom () - { + void ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) override; - } - - ~CRecordTimeCommandBehaviorAtom() - { - - } - - void ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) override - { - m_oHeader = oHeader; - - _UINT32 flags = StreamUtils::ReadLONG(pStream); - - m_fTypePropertyUsed = ( 0x01 == ( 0x01 & (flags) ) ); - m_fCommandPropertyUsed = ( 0x02 == ( 0x02 & (flags) ) ); - - - m_eCommandBehaviorType = (TimeCommandBehaviorTypeEnum) - StreamUtils::ReadLONG(pStream); - - } public: bool m_fTypePropertyUsed; bool m_fCommandPropertyUsed; diff --git a/MsBinaryFile/PptFile/Records/Animations/TimeCommandBehaviorContainer.cpp b/MsBinaryFile/PptFile/Records/Animations/TimeCommandBehaviorContainer.cpp new file mode 100644 index 0000000000..30c9ea1b65 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/Animations/TimeCommandBehaviorContainer.cpp @@ -0,0 +1,17 @@ +#include "TimeCommandBehaviorContainer.h" + + +void CRecordTimeCommandBehaviorContainer::ReadFromStream(SRecordHeader &thisHeader, POLE::Stream *pStream) +{ + m_oHeader = thisHeader; + + SRecordHeader oHeader; + if (oHeader.ReadFromStream(pStream)) + m_oCommandBehaviorAtom.ReadFromStream ( oHeader, pStream ); + + if (oHeader.ReadFromStream(pStream)) + m_oVarCommand.ReadFromStream ( oHeader, pStream ); + + if (oHeader.ReadFromStream(pStream)) + m_oBevavior.ReadFromStream ( oHeader, pStream ); +} diff --git a/MsBinaryFile/PptFile/Records/Animations/TimeCommandBehaviorContainer.h b/MsBinaryFile/PptFile/Records/Animations/TimeCommandBehaviorContainer.h index 5c305a91aa..5dc21d520d 100644 --- a/MsBinaryFile/PptFile/Records/Animations/TimeCommandBehaviorContainer.h +++ b/MsBinaryFile/PptFile/Records/Animations/TimeCommandBehaviorContainer.h @@ -42,32 +42,9 @@ namespace PPT_FORMAT class CRecordTimeCommandBehaviorContainer : public CUnknownRecord { public: - CRecordTimeCommandBehaviorContainer () - { + void ReadFromStream(SRecordHeader &thisHeader, POLE::Stream *pStream) override; - } - ~CRecordTimeCommandBehaviorContainer () - { - - } - - void ReadFromStream(SRecordHeader &thisHeader, POLE::Stream *pStream) override - { - m_oHeader = thisHeader; - - SRecordHeader oHeader; - if (oHeader.ReadFromStream(pStream)) - m_oCommandBehaviorAtom.ReadFromStream ( oHeader, pStream ); - - if (oHeader.ReadFromStream(pStream)) - m_oVarCommand.ReadFromStream ( oHeader, pStream ); - - if (oHeader.ReadFromStream(pStream)) - m_oBevavior.ReadFromStream ( oHeader, pStream ); - } - -public: CRecordTimeCommandBehaviorAtom m_oCommandBehaviorAtom; CRecordTimeVariantString m_oVarCommand; CRecordTimeBehaviorContainer m_oBevavior; diff --git a/MsBinaryFile/PptFile/Records/Animations/TimeConditionAtom.cpp b/MsBinaryFile/PptFile/Records/Animations/TimeConditionAtom.cpp new file mode 100644 index 0000000000..5da2337968 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/Animations/TimeConditionAtom.cpp @@ -0,0 +1,13 @@ +#include "TimeConditionAtom.h" + + +void CRecordTimeConditionAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + m_TriggerObject = ( TriggerObjectEnum )StreamUtils::ReadDWORD ( pStream ); + + m_nTriggerEvent = StreamUtils::ReadDWORD ( pStream ); + m_nID = StreamUtils::ReadDWORD ( pStream ); + m_nTimeDelay = StreamUtils::ReadLONG ( pStream ); +} diff --git a/MsBinaryFile/PptFile/Records/Animations/TimeConditionAtom.h b/MsBinaryFile/PptFile/Records/Animations/TimeConditionAtom.h index eb01a386e9..2e985af4c2 100644 --- a/MsBinaryFile/PptFile/Records/Animations/TimeConditionAtom.h +++ b/MsBinaryFile/PptFile/Records/Animations/TimeConditionAtom.h @@ -41,18 +41,8 @@ namespace PPT_FORMAT class CRecordTimeConditionAtom : public CUnknownRecord { public: - virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ) - { - m_oHeader = oHeader; + virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ); - m_TriggerObject = ( TriggerObjectEnum )StreamUtils::ReadDWORD ( pStream ); - - m_nTriggerEvent = StreamUtils::ReadDWORD ( pStream ); - m_nID = StreamUtils::ReadDWORD ( pStream ); - m_nTimeDelay = StreamUtils::ReadLONG ( pStream ); - } - -public: TriggerObjectEnum m_TriggerObject; _UINT32 m_nTriggerEvent; diff --git a/MsBinaryFile/PptFile/Records/Animations/TimeConditionContainer.cpp b/MsBinaryFile/PptFile/Records/Animations/TimeConditionContainer.cpp new file mode 100644 index 0000000000..910bbac13a --- /dev/null +++ b/MsBinaryFile/PptFile/Records/Animations/TimeConditionContainer.cpp @@ -0,0 +1,26 @@ +#include "TimeConditionContainer.h" + + +void CRecordTimeConditionContainer::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + LONG lPos = 0; StreamUtils::StreamPosition ( lPos, pStream ); + + SRecordHeader header; + + if ( header.ReadFromStream(pStream) ) + { + m_oTimeConditionAtom.ReadFromStream ( header, pStream ); + + if ( TL_TOT_VisualElement == m_oTimeConditionAtom.m_TriggerObject ) + { + if ( header.ReadFromStream(pStream) ) + { + m_oVisualElement.ReadFromStream ( header, pStream ); + } + } + } + + StreamUtils::StreamSeek ( lPos + m_oHeader.RecLen, pStream ); +} diff --git a/MsBinaryFile/PptFile/Records/Animations/TimeConditionContainer.h b/MsBinaryFile/PptFile/Records/Animations/TimeConditionContainer.h index 802614d116..6e90d8c1d0 100644 --- a/MsBinaryFile/PptFile/Records/Animations/TimeConditionContainer.h +++ b/MsBinaryFile/PptFile/Records/Animations/TimeConditionContainer.h @@ -31,7 +31,6 @@ */ #pragma once - #include "../../Reader/Records.h" #include "TimeConditionAtom.h" #include "ClientVisualElementContainer.h" @@ -42,31 +41,8 @@ namespace PPT_FORMAT class CRecordTimeConditionContainer : public CUnknownRecord { public: - virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ) - { - m_oHeader = oHeader; + virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ) override; - LONG lPos = 0; StreamUtils::StreamPosition ( lPos, pStream ); - - SRecordHeader header; - - if ( header.ReadFromStream(pStream) ) - { - m_oTimeConditionAtom.ReadFromStream ( header, pStream ); - - if ( TL_TOT_VisualElement == m_oTimeConditionAtom.m_TriggerObject ) - { - if ( header.ReadFromStream(pStream) ) - { - m_oVisualElement.ReadFromStream ( header, pStream ); - } - } - } - - StreamUtils::StreamSeek ( lPos + m_oHeader.RecLen, pStream ); - } - -public: CRecordTimeConditionAtom m_oTimeConditionAtom; CRecordClientVisualElementContainer m_oVisualElement; diff --git a/MsBinaryFile/PptFile/Records/Animations/TimeEffectBehaviorAtom.cpp b/MsBinaryFile/PptFile/Records/Animations/TimeEffectBehaviorAtom.cpp new file mode 100644 index 0000000000..6271a08a81 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/Animations/TimeEffectBehaviorAtom.cpp @@ -0,0 +1,20 @@ +#include "TimeEffectBehaviorAtom.h" + + +void CRecordTimeEffectBehaviorAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + // LONG lPos = 0; StreamUtils::StreamPosition ( lPos, pStream ); + + _UINT32 dwFlags = StreamUtils::ReadDWORD ( pStream ); + + m_bTransitionPropertyUsed = ( 0x01 == ( 0x01 & ((BYTE)dwFlags) ) ); + m_bTypePropertyUsed = ( 0x02 == ( 0x02 & ((BYTE)dwFlags) ) ); + m_bProgressPropertyUsed = ( 0x04 == ( 0x04 & ((BYTE)dwFlags) ) ); + m_bRuntimeContextObsolete = ( 0x08 == ( 0x08 & ((BYTE)dwFlags) ) ); + + m_nEffectTransition = StreamUtils::ReadDWORD ( pStream ); + + // StreamUtils::StreamSeek ( lPos + m_oHeader.RecLen, pStream ); +} diff --git a/MsBinaryFile/PptFile/Records/Animations/TimeEffectBehaviorAtom.h b/MsBinaryFile/PptFile/Records/Animations/TimeEffectBehaviorAtom.h index 6f0a9c5e69..01d6aed07c 100644 --- a/MsBinaryFile/PptFile/Records/Animations/TimeEffectBehaviorAtom.h +++ b/MsBinaryFile/PptFile/Records/Animations/TimeEffectBehaviorAtom.h @@ -31,33 +31,15 @@ */ #pragma once - #include "../../Reader/Records.h" namespace PPT_FORMAT { - class CRecordTimeEffectBehaviorAtom : public CUnknownRecord { public: - virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ) - { - m_oHeader = oHeader; - - // LONG lPos = 0; StreamUtils::StreamPosition ( lPos, pStream ); - - _UINT32 dwFlags = StreamUtils::ReadDWORD ( pStream ); - - m_bTransitionPropertyUsed = ( 0x01 == ( 0x01 & ((BYTE)dwFlags) ) ); - m_bTypePropertyUsed = ( 0x02 == ( 0x02 & ((BYTE)dwFlags) ) ); - m_bProgressPropertyUsed = ( 0x04 == ( 0x04 & ((BYTE)dwFlags) ) ); - m_bRuntimeContextObsolete = ( 0x08 == ( 0x08 & ((BYTE)dwFlags) ) ); - - m_nEffectTransition = StreamUtils::ReadDWORD ( pStream ); - - // StreamUtils::StreamSeek ( lPos + m_oHeader.RecLen, pStream ); - } + virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ); public: bool m_bTransitionPropertyUsed; diff --git a/MsBinaryFile/PptFile/Records/Animations/TimeEffectBehaviorContainer.cpp b/MsBinaryFile/PptFile/Records/Animations/TimeEffectBehaviorContainer.cpp new file mode 100644 index 0000000000..ac1ce318fe --- /dev/null +++ b/MsBinaryFile/PptFile/Records/Animations/TimeEffectBehaviorContainer.cpp @@ -0,0 +1,49 @@ +#include "TimeEffectBehaviorContainer.h" + + +void CRecordTimeEffectBehaviorContainer::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + LONG lPos = 0; StreamUtils::StreamPosition ( lPos, pStream ); + + SRecordHeader header; + if ( header.ReadFromStream(pStream) ) + m_effectBehaviorAtom.ReadFromStream ( header, pStream ); + + if ( m_effectBehaviorAtom.m_bTypePropertyUsed ) + { + if ( header.ReadFromStream(pStream) ) + m_oVarType.ReadFromStream ( header, pStream ); + } + + if ( m_effectBehaviorAtom.m_bProgressPropertyUsed ) + { + if ( header.ReadFromStream(pStream) ) + m_oVarProgress.ReadFromStream ( header, pStream ); + } + + if ( m_effectBehaviorAtom.m_bRuntimeContextObsolete ) + { + if ( header.ReadFromStream(pStream) ) + m_oVarRuntimeContext.ReadFromStream ( header, pStream ); + } + + if ( header.ReadFromStream(pStream) ) + { + if (header.RecType == 0xF12A) + { + m_oBehavior.ReadFromStream (header, pStream); + } + else + { + StreamUtils::StreamSkip (header.RecLen, pStream); + if ( header.ReadFromStream(pStream) ) + { + m_oBehavior.ReadFromStream ( header, pStream ); + } + } + } + + StreamUtils::StreamSeek ( lPos + m_oHeader.RecLen, pStream ); +} diff --git a/MsBinaryFile/PptFile/Records/Animations/TimeEffectBehaviorContainer.h b/MsBinaryFile/PptFile/Records/Animations/TimeEffectBehaviorContainer.h index 933ab0f695..03d5716e3d 100644 --- a/MsBinaryFile/PptFile/Records/Animations/TimeEffectBehaviorContainer.h +++ b/MsBinaryFile/PptFile/Records/Animations/TimeEffectBehaviorContainer.h @@ -42,54 +42,8 @@ namespace PPT_FORMAT class CRecordTimeEffectBehaviorContainer : public CUnknownRecord { public: - virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ) - { - m_oHeader = oHeader; + virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ) override; - LONG lPos = 0; StreamUtils::StreamPosition ( lPos, pStream ); - - SRecordHeader header; - if ( header.ReadFromStream(pStream) ) - m_effectBehaviorAtom.ReadFromStream ( header, pStream ); - - if ( m_effectBehaviorAtom.m_bTypePropertyUsed ) - { - if ( header.ReadFromStream(pStream) ) - m_oVarType.ReadFromStream ( header, pStream ); - } - - if ( m_effectBehaviorAtom.m_bProgressPropertyUsed ) - { - if ( header.ReadFromStream(pStream) ) - m_oVarProgress.ReadFromStream ( header, pStream ); - } - - if ( m_effectBehaviorAtom.m_bRuntimeContextObsolete ) - { - if ( header.ReadFromStream(pStream) ) - m_oVarRuntimeContext.ReadFromStream ( header, pStream ); - } - - if ( header.ReadFromStream(pStream) ) - { - if (header.RecType == 0xF12A) - { - m_oBehavior.ReadFromStream (header, pStream); - } - else - { - StreamUtils::StreamSkip (header.RecLen, pStream); - if ( header.ReadFromStream(pStream) ) - { - m_oBehavior.ReadFromStream ( header, pStream ); - } - } - } - - StreamUtils::StreamSeek ( lPos + m_oHeader.RecLen, pStream ); - } - -public: CRecordTimeEffectBehaviorAtom m_effectBehaviorAtom; diff --git a/MsBinaryFile/PptFile/Records/Animations/TimeIterateDataAtom.cpp b/MsBinaryFile/PptFile/Records/Animations/TimeIterateDataAtom.cpp new file mode 100644 index 0000000000..c092ad092e --- /dev/null +++ b/MsBinaryFile/PptFile/Records/Animations/TimeIterateDataAtom.cpp @@ -0,0 +1,19 @@ +#include "TimeIterateDataAtom.h" + + +void CRecordTimeIterateDataAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + m_nIterateInterval = StreamUtils::ReadDWORD ( pStream ); + m_nIterateType = StreamUtils::ReadDWORD ( pStream ); + m_nIterateDirection = StreamUtils::ReadDWORD ( pStream ); + m_nIterateIntervalType = StreamUtils::ReadDWORD ( pStream ); + + _UINT32 Value = StreamUtils::ReadDWORD ( pStream ); + + m_fIterateDirectionPropertyUsed = ( 0x01 == ( 0x01 & ((BYTE)Value) ) ); + m_fIterateTypePropertyUsed = ( 0x02 == ( 0x02 & ((BYTE)Value) ) ); + m_fIterateIntervalPropertyUsed = ( 0x04 == ( 0x04 & ((BYTE)Value) ) ); + m_fIterateIntervalTypePropertyUsed = ( 0x08 == ( 0x08 & ((BYTE)Value) ) ); +} diff --git a/MsBinaryFile/PptFile/Records/Animations/TimeIterateDataAtom.h b/MsBinaryFile/PptFile/Records/Animations/TimeIterateDataAtom.h index 33240b0eca..7b5e28d452 100644 --- a/MsBinaryFile/PptFile/Records/Animations/TimeIterateDataAtom.h +++ b/MsBinaryFile/PptFile/Records/Animations/TimeIterateDataAtom.h @@ -31,32 +31,16 @@ */ #pragma once - #include "../../Reader/Records.h" + namespace PPT_FORMAT { class CRecordTimeIterateDataAtom: public CUnknownRecord { public: - virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ) - { - m_oHeader = oHeader; + virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ) override; - m_nIterateInterval = StreamUtils::ReadDWORD ( pStream ); - m_nIterateType = StreamUtils::ReadDWORD ( pStream ); - m_nIterateDirection = StreamUtils::ReadDWORD ( pStream ); - m_nIterateIntervalType = StreamUtils::ReadDWORD ( pStream ); - - _UINT32 Value = StreamUtils::ReadDWORD ( pStream ); - - m_fIterateDirectionPropertyUsed = ( 0x01 == ( 0x01 & ((BYTE)Value) ) ); - m_fIterateTypePropertyUsed = ( 0x02 == ( 0x02 & ((BYTE)Value) ) ); - m_fIterateIntervalPropertyUsed = ( 0x04 == ( 0x04 & ((BYTE)Value) ) ); - m_fIterateIntervalTypePropertyUsed = ( 0x08 == ( 0x08 & ((BYTE)Value) ) ); - } - -public: _UINT32 m_nIterateInterval; _UINT32 m_nIterateType; diff --git a/MsBinaryFile/PptFile/Records/Animations/TimeModifierAtom.cpp b/MsBinaryFile/PptFile/Records/Animations/TimeModifierAtom.cpp new file mode 100644 index 0000000000..d45274e0d5 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/Animations/TimeModifierAtom.cpp @@ -0,0 +1,10 @@ +#include "TimeModifierAtom.h" + + +void CRecordTimeModifierAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + m_nType = StreamUtils::ReadDWORD(pStream); + m_Value = StreamUtils::ReadFLOAT(pStream); +} diff --git a/MsBinaryFile/PptFile/Records/Animations/TimeModifierAtom.h b/MsBinaryFile/PptFile/Records/Animations/TimeModifierAtom.h index a94faed0ea..fd123a3ca4 100644 --- a/MsBinaryFile/PptFile/Records/Animations/TimeModifierAtom.h +++ b/MsBinaryFile/PptFile/Records/Animations/TimeModifierAtom.h @@ -40,15 +40,8 @@ namespace PPT_FORMAT class CRecordTimeModifierAtom : public CUnknownRecord { public: - virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ) - { - m_oHeader = oHeader; + virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ) override; - m_nType = StreamUtils::ReadDWORD(pStream); - m_Value = StreamUtils::ReadFLOAT(pStream); - } - -public: unsigned long m_nType; // 0x00000000 Repeat count. // 0x00000001 Repeat duration. diff --git a/MsBinaryFile/PptFile/Records/Animations/TimeMotionBehaviorAtom.cpp b/MsBinaryFile/PptFile/Records/Animations/TimeMotionBehaviorAtom.cpp new file mode 100644 index 0000000000..9bee1c8b98 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/Animations/TimeMotionBehaviorAtom.cpp @@ -0,0 +1,26 @@ +#include "TimeMotionBehaviorAtom.h" + + +void CRecordTimeMotionBehaviorAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + _UINT32 Value = StreamUtils::ReadDWORD ( pStream ); + + m_bByPropertyUsed = ( 0x01 == ( 0x01 & ((BYTE)Value) ) ); + m_bFromPropertyUsed = ( 0x02 == ( 0x02 & ((BYTE)Value) ) ); + m_bToPropertyUsed = ( 0x04 == ( 0x04 & ((BYTE)Value) ) ); + m_bOriginPropertyUsed = ( 0x08 == ( 0x08 & ((BYTE)Value) ) ); + m_bPathPropertyUsed = ( 0x10 == ( 0x10 & ((BYTE)Value) ) ); + + m_bEditRotationPropertyUsed = ( 0x40 == ( 0x40 & ((BYTE)Value) ) ); + m_bPointsTypesPropertyUsed = ( 0x80 == ( 0x80 & ((BYTE)Value) ) ); + + m_nXBY = StreamUtils::ReadFLOAT ( pStream ); + m_nYBY = StreamUtils::ReadFLOAT ( pStream ); + m_nXFROM = StreamUtils::ReadFLOAT ( pStream ); + m_nYFROM = StreamUtils::ReadFLOAT ( pStream ); + m_nXTO = StreamUtils::ReadFLOAT ( pStream ); + m_nYTO = StreamUtils::ReadFLOAT ( pStream ); + m_nBehaviorOrigin = StreamUtils::ReadDWORD ( pStream ); +} diff --git a/MsBinaryFile/PptFile/Records/Animations/TimeMotionBehaviorAtom.h b/MsBinaryFile/PptFile/Records/Animations/TimeMotionBehaviorAtom.h index 215f629790..24693fd468 100644 --- a/MsBinaryFile/PptFile/Records/Animations/TimeMotionBehaviorAtom.h +++ b/MsBinaryFile/PptFile/Records/Animations/TimeMotionBehaviorAtom.h @@ -40,31 +40,8 @@ namespace PPT_FORMAT class CRecordTimeMotionBehaviorAtom : public CUnknownRecord { public: - virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ) - { - m_oHeader = oHeader; + virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ) override; - _UINT32 Value = StreamUtils::ReadDWORD ( pStream ); - - m_bByPropertyUsed = ( 0x01 == ( 0x01 & ((BYTE)Value) ) ); - m_bFromPropertyUsed = ( 0x02 == ( 0x02 & ((BYTE)Value) ) ); - m_bToPropertyUsed = ( 0x04 == ( 0x04 & ((BYTE)Value) ) ); - m_bOriginPropertyUsed = ( 0x08 == ( 0x08 & ((BYTE)Value) ) ); - m_bPathPropertyUsed = ( 0x10 == ( 0x10 & ((BYTE)Value) ) ); - - m_bEditRotationPropertyUsed = ( 0x40 == ( 0x40 & ((BYTE)Value) ) ); - m_bPointsTypesPropertyUsed = ( 0x80 == ( 0x80 & ((BYTE)Value) ) ); - - m_nXBY = StreamUtils::ReadFLOAT ( pStream ); - m_nYBY = StreamUtils::ReadFLOAT ( pStream ); - m_nXFROM = StreamUtils::ReadFLOAT ( pStream ); - m_nYFROM = StreamUtils::ReadFLOAT ( pStream ); - m_nXTO = StreamUtils::ReadFLOAT ( pStream ); - m_nYTO = StreamUtils::ReadFLOAT ( pStream ); - m_nBehaviorOrigin = StreamUtils::ReadDWORD ( pStream ); - } - -public: bool m_bByPropertyUsed; bool m_bFromPropertyUsed; diff --git a/MsBinaryFile/PptFile/Records/Animations/TimeMotionBehaviorContainer.cpp b/MsBinaryFile/PptFile/Records/Animations/TimeMotionBehaviorContainer.cpp new file mode 100644 index 0000000000..1077595ba1 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/Animations/TimeMotionBehaviorContainer.cpp @@ -0,0 +1,53 @@ +#include "TimeMotionBehaviorContainer.h" + + +CRecordTimeMotionBehaviorContainer::~CRecordTimeMotionBehaviorContainer() +{ + RELEASEOBJECT(m_pVarPath) +} + +void CRecordTimeMotionBehaviorContainer::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + LONG lPos = 0; StreamUtils::StreamPosition ( lPos, pStream ); + + //UINT res = 0; + + SRecordHeader header; + if ( header.ReadFromStream(pStream) ) + { + m_oMotionBehaviorAtom.ReadFromStream ( header, pStream ); + } + + UINT lCurLen = m_oMotionBehaviorAtom.m_oHeader.RecLen + 8; + while ( lCurLen < m_oHeader.RecLen ) + { + header.ReadFromStream(pStream); + + lCurLen += header.RecLen + 8; + + switch (header.RecType) { + case RT_TimeVariant: + { + if (header.RecLen > 5 ) { + m_pVarPath = new CRecordTimeVariantString(); + m_pVarPath->ReadFromStream(header, pStream); + }else if (header.RecLen == 5){ + StreamUtils::StreamSkip(5, pStream); + } else + StreamUtils::StreamSkip(header.RecLen, pStream); + break; + } + + case RT_TimeBehaviorContainer: + { + m_oTimeBehavior.ReadFromStream(header, pStream); + break; + } + default: + break; + } + } + StreamUtils::StreamSeek(lPos + m_oHeader.RecLen, pStream); +} diff --git a/MsBinaryFile/PptFile/Records/Animations/TimeMotionBehaviorContainer.h b/MsBinaryFile/PptFile/Records/Animations/TimeMotionBehaviorContainer.h index f73c48d87a..7f8b1d84ac 100644 --- a/MsBinaryFile/PptFile/Records/Animations/TimeMotionBehaviorContainer.h +++ b/MsBinaryFile/PptFile/Records/Animations/TimeMotionBehaviorContainer.h @@ -43,59 +43,10 @@ namespace PPT_FORMAT class CRecordTimeMotionBehaviorContainer : public CUnknownRecord { public: - virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ) - { - m_oHeader = oHeader; + ~CRecordTimeMotionBehaviorContainer(); - LONG lPos = 0; StreamUtils::StreamPosition ( lPos, pStream ); + virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ) override; - //UINT res = 0; - - SRecordHeader header; - if ( header.ReadFromStream(pStream) ) - { - m_oMotionBehaviorAtom.ReadFromStream ( header, pStream ); - } - - UINT lCurLen = m_oMotionBehaviorAtom.m_oHeader.RecLen + 8; - while ( lCurLen < m_oHeader.RecLen ) - { - header.ReadFromStream(pStream); - - lCurLen += header.RecLen + 8; - - switch (header.RecType) { - case RT_TimeVariant: - { - if (header.RecLen > 5 ) { - m_pVarPath = new CRecordTimeVariantString(); - m_pVarPath->ReadFromStream(header, pStream); - }else if (header.RecLen == 5){ - StreamUtils::StreamSkip(5, pStream); - } else - StreamUtils::StreamSkip(header.RecLen, pStream); - break; - } - - case RT_TimeBehaviorContainer: - { - m_oTimeBehavior.ReadFromStream(header, pStream); - break; - } - default: - break; - } - } - StreamUtils::StreamSeek(lPos + m_oHeader.RecLen, pStream); - } - - - ~CRecordTimeMotionBehaviorContainer() - { - RELEASEOBJECT(m_pVarPath) - } - -public: CRecordTimeMotionBehaviorAtom m_oMotionBehaviorAtom; CRecordTimeVariantString* m_pVarPath; // OPTIONAL diff --git a/MsBinaryFile/PptFile/Records/Animations/TimeNodeAtom.cpp b/MsBinaryFile/PptFile/Records/Animations/TimeNodeAtom.cpp new file mode 100644 index 0000000000..440e7b62e9 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/Animations/TimeNodeAtom.cpp @@ -0,0 +1,44 @@ +#include "TimeNodeAtom.h" + + +void CRecordTimeNodeAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + // LONG lPos = 0; StreamUtils::StreamPosition(lPos, pStream); + + StreamUtils::StreamSkip ( sizeof ( _UINT32 ), pStream ); + + // 0x00000000 Does not restart. + // 0x00000001 Can restart at any time. + // 0x00000002 Can restart when the corresponding time node is not active. + // 0x00000003 Same as 0x00000000. + m_dwRestart = StreamUtils::ReadDWORD ( pStream ); + // 0x00000000 specifies that this time node is a parallel time node, + // which allows all of its child nodes to start at the same time. + m_dwType = (TimeNodeTypeEnum)StreamUtils::ReadDWORD ( pStream ); + + // 0x00000000 The properties remain at their ending values while the parent time node is still running or holding. After which, the properties reset to their original values. + // 0x00000001 The properties reset to their original values after the time node becomes inactive. + // 0x00000002 The properties remain at their ending values while the parent time node is still running or holding, or until another sibling time node is started under a sequential time node as specified in the type field. After which, the properties reset to their original values. + // 0x00000003 Same as 0x00000000. + // 0x00000004 Same as 0x00000001. + m_dwFill = StreamUtils::ReadDWORD ( pStream ); + + StreamUtils::StreamSkip ( sizeof ( _UINT32 ), pStream ); + StreamUtils::StreamSkip ( sizeof ( _UINT32 ), pStream ); + + // duration: 0xFFFFFFFF specifies that the duration of the time node is infinite, + // and that its actual duration is determined by the durations of its child nodes. + m_nDuration = StreamUtils::ReadLONG ( pStream ); + + _UINT32 Value = StreamUtils::ReadDWORD ( pStream ); + + m_fFillProperty = ( 0x01 == ( 0x01 & ((BYTE)Value) ) ); + m_fRestartProperty = ( 0x02 == ( 0x02 & ((BYTE)Value) ) ); + + m_fGroupingTypeProperty = ( 0x08 == ( 0x08 & ((BYTE)Value) ) ); + m_fDurationProperty = ( 0x10 == ( 0x10 & ((BYTE)Value) ) ); + + // StreamUtils::StreamSeek ( lPos + m_oHeader.RecLen, pStream ); +} diff --git a/MsBinaryFile/PptFile/Records/Animations/TimeNodeAtom.h b/MsBinaryFile/PptFile/Records/Animations/TimeNodeAtom.h index c5ead4aae6..e60f974bf1 100644 --- a/MsBinaryFile/PptFile/Records/Animations/TimeNodeAtom.h +++ b/MsBinaryFile/PptFile/Records/Animations/TimeNodeAtom.h @@ -41,49 +41,8 @@ namespace PPT_FORMAT class CRecordTimeNodeAtom : public CUnknownRecord { public: - virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ) - { - m_oHeader = oHeader; + virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ) override; - // LONG lPos = 0; StreamUtils::StreamPosition(lPos, pStream); - - StreamUtils::StreamSkip ( sizeof ( _UINT32 ), pStream ); - - // 0x00000000 Does not restart. - // 0x00000001 Can restart at any time. - // 0x00000002 Can restart when the corresponding time node is not active. - // 0x00000003 Same as 0x00000000. - m_dwRestart = StreamUtils::ReadDWORD ( pStream ); - // 0x00000000 specifies that this time node is a parallel time node, - // which allows all of its child nodes to start at the same time. - m_dwType = (TimeNodeTypeEnum)StreamUtils::ReadDWORD ( pStream ); - - // 0x00000000 The properties remain at their ending values while the parent time node is still running or holding. After which, the properties reset to their original values. - // 0x00000001 The properties reset to their original values after the time node becomes inactive. - // 0x00000002 The properties remain at their ending values while the parent time node is still running or holding, or until another sibling time node is started under a sequential time node as specified in the type field. After which, the properties reset to their original values. - // 0x00000003 Same as 0x00000000. - // 0x00000004 Same as 0x00000001. - m_dwFill = StreamUtils::ReadDWORD ( pStream ); - - StreamUtils::StreamSkip ( sizeof ( _UINT32 ), pStream ); - StreamUtils::StreamSkip ( sizeof ( _UINT32 ), pStream ); - - // duration: 0xFFFFFFFF specifies that the duration of the time node is infinite, - // and that its actual duration is determined by the durations of its child nodes. - m_nDuration = StreamUtils::ReadLONG ( pStream ); - - _UINT32 Value = StreamUtils::ReadDWORD ( pStream ); - - m_fFillProperty = ( 0x01 == ( 0x01 & ((BYTE)Value) ) ); - m_fRestartProperty = ( 0x02 == ( 0x02 & ((BYTE)Value) ) ); - - m_fGroupingTypeProperty = ( 0x08 == ( 0x08 & ((BYTE)Value) ) ); - m_fDurationProperty = ( 0x10 == ( 0x10 & ((BYTE)Value) ) ); - - // StreamUtils::StreamSeek ( lPos + m_oHeader.RecLen, pStream ); - } - -public: _UINT32 m_dwRestart; TimeNodeTypeEnum m_dwType; diff --git a/MsBinaryFile/PptFile/Records/Animations/TimePropertyList4TimeBehavior.cpp b/MsBinaryFile/PptFile/Records/Animations/TimePropertyList4TimeBehavior.cpp new file mode 100644 index 0000000000..001edb1778 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/Animations/TimePropertyList4TimeBehavior.cpp @@ -0,0 +1,31 @@ +#include "TimePropertyList4TimeBehavior.h" + + +CRecordTimePropertyList4TimeBehavior::~CRecordTimePropertyList4TimeBehavior() +{ + CRecordsContainer::Clear(); +} + + +void CRecordTimePropertyList4TimeBehavior::ReadFromStream(SRecordHeader &thisHeader, POLE::Stream *pStream) +{ + m_oHeader = thisHeader; + + UINT lCurLen = 0; + SRecordHeader oHeader; + + while (lCurLen < m_oHeader.RecLen) + { + if (oHeader.ReadFromStream(pStream)) { + lCurLen += 8 + oHeader.RecLen; + IRecord* pRecord = FactoryTimeVariant4Behavior::createByInstanse(oHeader.RecInstance); + if (pRecord) + { + pRecord->ReadFromStream(oHeader, pStream); + m_arRecords.push_back(pRecord); + } + else + break; + } + } +} diff --git a/MsBinaryFile/PptFile/Records/Animations/TimePropertyList4TimeBehavior.h b/MsBinaryFile/PptFile/Records/Animations/TimePropertyList4TimeBehavior.h index 412f0b5418..1f3c4bafc8 100644 --- a/MsBinaryFile/PptFile/Records/Animations/TimePropertyList4TimeBehavior.h +++ b/MsBinaryFile/PptFile/Records/Animations/TimePropertyList4TimeBehavior.h @@ -42,46 +42,8 @@ namespace PPT_FORMAT class CRecordTimePropertyList4TimeBehavior : public CRecordsContainer { public: - //static const _UINT32 RT_TimePropertyList = 0xF13D; // Specifies a TimePropertyList4TimeNodeContainer or TimePropertyList4TimeBehavior. + virtual ~CRecordTimePropertyList4TimeBehavior (); - CRecordTimePropertyList4TimeBehavior () - { - } - - virtual ~CRecordTimePropertyList4TimeBehavior () - { - CRecordsContainer::Clear(); - } - - virtual void ReadFromStream ( SRecordHeader & thisHeader, POLE::Stream* pStream ) - { - m_oHeader = thisHeader; - - UINT lCurLen = 0; - SRecordHeader oHeader; - - while (lCurLen < m_oHeader.RecLen) - { -// if (oHeader.ReadFromStream(pStream) == FALSE) -// { -// break; -// } - - if (oHeader.ReadFromStream(pStream)) { - lCurLen += 8 + oHeader.RecLen; - IRecord* pRecord = FactoryTimeVariant4Behavior::createByInstanse(oHeader.RecInstance); - if (pRecord) - { - pRecord->ReadFromStream(oHeader, pStream); - m_arRecords.push_back(pRecord); - } - else - break; - } - } - } - -public: - // Empty + virtual void ReadFromStream ( SRecordHeader & thisHeader, POLE::Stream* pStream ) override; }; } diff --git a/MsBinaryFile/PptFile/Records/Animations/TimePropertyList4TimeNodeContainer.cpp b/MsBinaryFile/PptFile/Records/Animations/TimePropertyList4TimeNodeContainer.cpp new file mode 100644 index 0000000000..a4a1e6dbdf --- /dev/null +++ b/MsBinaryFile/PptFile/Records/Animations/TimePropertyList4TimeNodeContainer.cpp @@ -0,0 +1,80 @@ +#include "TimePropertyList4TimeNodeContainer.h" + + +CRecordTimePropertyList4TimeNodeContainer::CRecordTimePropertyList4TimeNodeContainer() +{ + m_bEmtyNode = false; +} +CRecordTimePropertyList4TimeNodeContainer::~CRecordTimePropertyList4TimeNodeContainer() +{ + ClearNodes (); +} + +void CRecordTimePropertyList4TimeNodeContainer::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + LONG lPos = 0; + StreamUtils::StreamPosition ( lPos, pStream ); + + UINT lCurLen = 0; + + SRecordHeader ReadHeader; + + if ( 0 == m_oHeader.RecLen ) + m_bEmtyNode = true; + + while ( lCurLen < m_oHeader.RecLen ) + { + if (ReadHeader.ReadFromStream(pStream) == false) + break; + + CRecordTimeVariant* pRecord = NULL; + + TimePropertyID4TimeNode VariableType = ( TimePropertyID4TimeNode ) ReadHeader.RecInstance; + + switch ( VariableType ) + { + case TL_TPID_Display: pRecord = new CRecordTimeDisplayType (); break; + case TL_TPID_MasterPos: pRecord = new CRecordTimeMasterRelType (); break; + case TL_TPID_SubType: pRecord = new CRecordTimeSubType (); break; + case TL_TPID_EffectID: pRecord = new CRecordTimeEffectID (); break; + case TL_TPID_EffectDir: pRecord = new CRecordTimeEffectDir (); break; + case TL_TPID_EffectType: pRecord = new CRecordTimeEffectType (); break; + case TL_TPID_AfterEffect: pRecord = new CRecordTimeAfterEffect (); break; + case TL_TPID_SlideCount: pRecord = new CRecordTimeSlideCount (); break; + case TL_TPID_TimeFilter: pRecord = new CRecordTimeNodeTimeFilter (); break; + case TL_TPID_EventFilter: pRecord = new CRecordTimeEventFilter (); break; + case TL_TPID_HideWhenStopped: pRecord = new CRecordTimeHideWhenStopped (); break; + case TL_TPID_GroupID: pRecord = new CRecordTimeGroupID (); break; + case TL_TPID_EffectNodeType: pRecord = new CRecordTimeEffectNodeType (); break; + case TL_TPID_PlaceholderNode: pRecord = new CRecordTimePlaceholderNode (); break; + case TL_TPID_MediaVolume: pRecord = new CRecordTimeMediaVolume (); break; + case TL_TPID_MediaMute: pRecord = new CRecordTimeMediaMute (); break; + case TL_TPID_ZoomToFullScreen: pRecord = new CRecordTimeZoomToFullScreen (); break; + default : + break; + } + + pRecord->ReadFromStream ( ReadHeader, pStream ); + lCurLen += 8 + ReadHeader.RecLen; + + m_arrElements.push_back ( pRecord ); + } + + StreamUtils::StreamSeek ( lPos + m_oHeader.RecLen, pStream ); +} + +bool CRecordTimePropertyList4TimeNodeContainer::IsEmpty() +{ + return m_bEmtyNode; +} + +void CRecordTimePropertyList4TimeNodeContainer::ClearNodes() +{ + for ( size_t i = 0; i < m_arrElements.size(); ++i ) + { + RELEASEOBJECT ( m_arrElements[i] ); + } + m_arrElements.clear (); +} diff --git a/MsBinaryFile/PptFile/Records/Animations/TimePropertyList4TimeNodeContainer.h b/MsBinaryFile/PptFile/Records/Animations/TimePropertyList4TimeNodeContainer.h index 9f0f31ab3a..9d71b37ff0 100644 --- a/MsBinaryFile/PptFile/Records/Animations/TimePropertyList4TimeNodeContainer.h +++ b/MsBinaryFile/PptFile/Records/Animations/TimePropertyList4TimeNodeContainer.h @@ -44,87 +44,15 @@ class CRecordTimePropertyList4TimeNodeContainer : public CUnknownRecord public: //static const _UINT32 RT_TimePropertyList = 0xF13D; // Specifies a CRecordTimePropertyList4TimeNodeContainer or TimePropertyList4TimeBehavior. - CRecordTimePropertyList4TimeNodeContainer () - { - m_bEmtyNode = false; - } + CRecordTimePropertyList4TimeNodeContainer (); + virtual ~CRecordTimePropertyList4TimeNodeContainer (); - virtual ~CRecordTimePropertyList4TimeNodeContainer () - { - ClearNodes (); - } + virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ) override; - virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ) - { - m_oHeader = oHeader; - - LONG lPos = 0; - StreamUtils::StreamPosition ( lPos, pStream ); - - UINT lCurLen = 0; - - SRecordHeader ReadHeader; - - if ( 0 == m_oHeader.RecLen ) - m_bEmtyNode = true; - - while ( lCurLen < m_oHeader.RecLen ) - { - if (ReadHeader.ReadFromStream(pStream) == false) - break; - - CRecordTimeVariant* pRecord = NULL; - - TimePropertyID4TimeNode VariableType = ( TimePropertyID4TimeNode ) ReadHeader.RecInstance; - - switch ( VariableType ) - { - case TL_TPID_Display: pRecord = new CRecordTimeDisplayType (); break; - case TL_TPID_MasterPos: pRecord = new CRecordTimeMasterRelType (); break; - case TL_TPID_SubType: pRecord = new CRecordTimeSubType (); break; - case TL_TPID_EffectID: pRecord = new CRecordTimeEffectID (); break; - case TL_TPID_EffectDir: pRecord = new CRecordTimeEffectDir (); break; - case TL_TPID_EffectType: pRecord = new CRecordTimeEffectType (); break; - case TL_TPID_AfterEffect: pRecord = new CRecordTimeAfterEffect (); break; - case TL_TPID_SlideCount: pRecord = new CRecordTimeSlideCount (); break; - case TL_TPID_TimeFilter: pRecord = new CRecordTimeNodeTimeFilter (); break; - case TL_TPID_EventFilter: pRecord = new CRecordTimeEventFilter (); break; - case TL_TPID_HideWhenStopped: pRecord = new CRecordTimeHideWhenStopped (); break; - case TL_TPID_GroupID: pRecord = new CRecordTimeGroupID (); break; - case TL_TPID_EffectNodeType: pRecord = new CRecordTimeEffectNodeType (); break; - case TL_TPID_PlaceholderNode: pRecord = new CRecordTimePlaceholderNode (); break; - case TL_TPID_MediaVolume: pRecord = new CRecordTimeMediaVolume (); break; - case TL_TPID_MediaMute: pRecord = new CRecordTimeMediaMute (); break; - case TL_TPID_ZoomToFullScreen: pRecord = new CRecordTimeZoomToFullScreen (); break; - default : - break; - } - - pRecord->ReadFromStream ( ReadHeader, pStream ); - lCurLen += 8 + ReadHeader.RecLen; - - m_arrElements.push_back ( pRecord ); - } - - StreamUtils::StreamSeek ( lPos + m_oHeader.RecLen, pStream ); - } - - inline bool IsEmpty () - { - return m_bEmtyNode; - } - - void ClearNodes () - { - for ( size_t i = 0; i < m_arrElements.size(); ++i ) - { - RELEASEOBJECT ( m_arrElements[i] ); - } - m_arrElements.clear (); - } + bool IsEmpty (); + void ClearNodes (); public: - bool m_bEmtyNode; std::vector m_arrElements; diff --git a/MsBinaryFile/PptFile/Records/Animations/TimeRotationBehaviorAtom.cpp b/MsBinaryFile/PptFile/Records/Animations/TimeRotationBehaviorAtom.cpp new file mode 100644 index 0000000000..5d5962c695 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/Animations/TimeRotationBehaviorAtom.cpp @@ -0,0 +1,20 @@ +#include "TimeRotationBehaviorAtom.h" + + +void CRecordTimeRotationBehaviorAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + _UINT32 src = StreamUtils::ReadDWORD ( pStream ); + + m_fByPropertyUsed = ( 0x01 == ( 0x01 & ((BYTE)src) ) ); + m_fFromPropertyUsed = ( 0x02 == ( 0x02 & ((BYTE)src) ) ); + m_fToPropertyUsed = ( 0x04 == ( 0x04 & ((BYTE)src) ) ); + m_fDirectionPropertyUsed = ( 0x08 == ( 0x08 & ((BYTE)src) ) ); + + m_By = StreamUtils::ReadFLOAT ( pStream ); + m_From = StreamUtils::ReadFLOAT ( pStream ); + m_To = StreamUtils::ReadFLOAT ( pStream ); + + m_nRotationDirection = StreamUtils::ReadDWORD ( pStream ); +} diff --git a/MsBinaryFile/PptFile/Records/Animations/TimeRotationBehaviorAtom.h b/MsBinaryFile/PptFile/Records/Animations/TimeRotationBehaviorAtom.h index 72996eee08..28f7806a9b 100644 --- a/MsBinaryFile/PptFile/Records/Animations/TimeRotationBehaviorAtom.h +++ b/MsBinaryFile/PptFile/Records/Animations/TimeRotationBehaviorAtom.h @@ -39,23 +39,7 @@ namespace PPT_FORMAT class CRecordTimeRotationBehaviorAtom : public CUnknownRecord { public: - virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ) - { - m_oHeader = oHeader; - - _UINT32 src = StreamUtils::ReadDWORD ( pStream ); - - m_fByPropertyUsed = ( 0x01 == ( 0x01 & ((BYTE)src) ) ); - m_fFromPropertyUsed = ( 0x02 == ( 0x02 & ((BYTE)src) ) ); - m_fToPropertyUsed = ( 0x04 == ( 0x04 & ((BYTE)src) ) ); - m_fDirectionPropertyUsed = ( 0x08 == ( 0x08 & ((BYTE)src) ) ); - - m_By = StreamUtils::ReadFLOAT ( pStream ); - m_From = StreamUtils::ReadFLOAT ( pStream ); - m_To = StreamUtils::ReadFLOAT ( pStream ); - - m_nRotationDirection = StreamUtils::ReadDWORD ( pStream ); - } + virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ); public: diff --git a/MsBinaryFile/PptFile/Records/Animations/TimeRotationBehaviorContainer.cpp b/MsBinaryFile/PptFile/Records/Animations/TimeRotationBehaviorContainer.cpp new file mode 100644 index 0000000000..2eaf9a4830 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/Animations/TimeRotationBehaviorContainer.cpp @@ -0,0 +1,15 @@ +#include "TimeRotationBehaviorContainer.h" + + +void CRecordTimeRotationBehaviorContainer::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + SRecordHeader ReadHeader; + + if ( ReadHeader.ReadFromStream(pStream) ) + m_oRotationBehaviorAtom.ReadFromStream ( ReadHeader, pStream ); + + if ( ReadHeader.ReadFromStream(pStream) ) + m_oBehavior.ReadFromStream ( ReadHeader, pStream ); +} diff --git a/MsBinaryFile/PptFile/Records/Animations/TimeRotationBehaviorContainer.h b/MsBinaryFile/PptFile/Records/Animations/TimeRotationBehaviorContainer.h index 679f13dae0..e5ca52acc7 100644 --- a/MsBinaryFile/PptFile/Records/Animations/TimeRotationBehaviorContainer.h +++ b/MsBinaryFile/PptFile/Records/Animations/TimeRotationBehaviorContainer.h @@ -42,22 +42,8 @@ namespace PPT_FORMAT class CRecordTimeRotationBehaviorContainer : public CUnknownRecord { public: - virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ) - { - m_oHeader = oHeader; + virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ); - SRecordHeader ReadHeader; - - if ( ReadHeader.ReadFromStream(pStream) ) - m_oRotationBehaviorAtom.ReadFromStream ( ReadHeader, pStream ); - - if ( ReadHeader.ReadFromStream(pStream) ) - m_oBehavior.ReadFromStream ( ReadHeader, pStream ); - } - - - -public: CRecordTimeRotationBehaviorAtom m_oRotationBehaviorAtom; CRecordTimeBehaviorContainer m_oBehavior; diff --git a/MsBinaryFile/PptFile/Records/Animations/TimeScaleBehaviorAtom.cpp b/MsBinaryFile/PptFile/Records/Animations/TimeScaleBehaviorAtom.cpp new file mode 100644 index 0000000000..07a6885a53 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/Animations/TimeScaleBehaviorAtom.cpp @@ -0,0 +1,24 @@ +#include "TimeScaleBehaviorAtom.h" + + +void CRecordTimeScaleBehaviorAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + _UINT32 src = StreamUtils::ReadDWORD ( pStream ); + + m_fByPropertyUsed = ( 0x01 == ( 0x01 & ((BYTE)src) ) ); + m_fFromPropertyUsed = ( 0x02 == ( 0x02 & ((BYTE)src) ) ); + m_fToPropertyUsed = ( 0x04 == ( 0x04 & ((BYTE)src) ) ); + m_fZoomContentsUsed = ( 0x08 == ( 0x08 & ((BYTE)src) ) ); + + m_XBy = StreamUtils::ReadFLOAT ( pStream ); + m_YBy = StreamUtils::ReadFLOAT ( pStream ); + m_XFrom = StreamUtils::ReadFLOAT ( pStream ); + m_YFrom = StreamUtils::ReadFLOAT ( pStream ); + m_XTo = StreamUtils::ReadFLOAT ( pStream ); + m_YTo = StreamUtils::ReadFLOAT ( pStream ); + + src = StreamUtils::ReadDWORD ( pStream ); + m_fZoomContents = ( 0x01 == ( 0x01 & ((BYTE)src) ) ); +} diff --git a/MsBinaryFile/PptFile/Records/Animations/TimeScaleBehaviorAtom.h b/MsBinaryFile/PptFile/Records/Animations/TimeScaleBehaviorAtom.h index 76512eeb64..9eeac07e0c 100644 --- a/MsBinaryFile/PptFile/Records/Animations/TimeScaleBehaviorAtom.h +++ b/MsBinaryFile/PptFile/Records/Animations/TimeScaleBehaviorAtom.h @@ -40,27 +40,7 @@ namespace PPT_FORMAT class CRecordTimeScaleBehaviorAtom : public CUnknownRecord { public: - virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ) - { - m_oHeader = oHeader; - - _UINT32 src = StreamUtils::ReadDWORD ( pStream ); - - m_fByPropertyUsed = ( 0x01 == ( 0x01 & ((BYTE)src) ) ); - m_fFromPropertyUsed = ( 0x02 == ( 0x02 & ((BYTE)src) ) ); - m_fToPropertyUsed = ( 0x04 == ( 0x04 & ((BYTE)src) ) ); - m_fZoomContentsUsed = ( 0x08 == ( 0x08 & ((BYTE)src) ) ); - - m_XBy = StreamUtils::ReadFLOAT ( pStream ); - m_YBy = StreamUtils::ReadFLOAT ( pStream ); - m_XFrom = StreamUtils::ReadFLOAT ( pStream ); - m_YFrom = StreamUtils::ReadFLOAT ( pStream ); - m_XTo = StreamUtils::ReadFLOAT ( pStream ); - m_YTo = StreamUtils::ReadFLOAT ( pStream ); - - src = StreamUtils::ReadDWORD ( pStream ); - m_fZoomContents = ( 0x01 == ( 0x01 & ((BYTE)src) ) ); - } + virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ) override; public: diff --git a/MsBinaryFile/PptFile/Records/Animations/TimeScaleBehaviorContainer.cpp b/MsBinaryFile/PptFile/Records/Animations/TimeScaleBehaviorContainer.cpp new file mode 100644 index 0000000000..ac14a33357 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/Animations/TimeScaleBehaviorContainer.cpp @@ -0,0 +1,15 @@ +#include "TimeScaleBehaviorContainer.h" + + +void CRecordTimeScaleBehaviorContainer::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + SRecordHeader ReadHeader; + + if ( ReadHeader.ReadFromStream(pStream) ) + m_oScaleBehaviorAtom.ReadFromStream ( ReadHeader, pStream ); + + if ( ReadHeader.ReadFromStream(pStream) ) + m_oBehavior.ReadFromStream ( ReadHeader, pStream ); +} diff --git a/MsBinaryFile/PptFile/Records/Animations/TimeScaleBehaviorContainer.h b/MsBinaryFile/PptFile/Records/Animations/TimeScaleBehaviorContainer.h index f0259c4e0e..00c2be3908 100644 --- a/MsBinaryFile/PptFile/Records/Animations/TimeScaleBehaviorContainer.h +++ b/MsBinaryFile/PptFile/Records/Animations/TimeScaleBehaviorContainer.h @@ -42,18 +42,7 @@ namespace PPT_FORMAT class CRecordTimeScaleBehaviorContainer : public CUnknownRecord { public: - virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ) - { - m_oHeader = oHeader; - - SRecordHeader ReadHeader; - - if ( ReadHeader.ReadFromStream(pStream) ) - m_oScaleBehaviorAtom.ReadFromStream ( ReadHeader, pStream ); - - if ( ReadHeader.ReadFromStream(pStream) ) - m_oBehavior.ReadFromStream ( ReadHeader, pStream ); - } + virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ) override; public: CRecordTimeScaleBehaviorAtom m_oScaleBehaviorAtom; diff --git a/MsBinaryFile/PptFile/Records/Animations/TimeSequenceDataAtom.cpp b/MsBinaryFile/PptFile/Records/Animations/TimeSequenceDataAtom.cpp new file mode 100644 index 0000000000..5d8cc5533e --- /dev/null +++ b/MsBinaryFile/PptFile/Records/Animations/TimeSequenceDataAtom.cpp @@ -0,0 +1,23 @@ +#include "TimeSequenceDataAtom.h" + + +void CRecordTimeSequenceDataAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + // LONG lPos = 0; StreamUtils::StreamPosition ( lPos, pStream ); + + m_nConcurrency = StreamUtils::ReadDWORD ( pStream ); + m_nNextAction = StreamUtils::ReadDWORD ( pStream ); + m_nPreviousAction = StreamUtils::ReadDWORD ( pStream ); + + StreamUtils::StreamSkip ( sizeof ( _UINT32 ), pStream ); + + _UINT32 Value = StreamUtils::ReadDWORD ( pStream ); + + m_fConcurrencyPropertyUsed = ( 0x01 == ( 0x01 & ((BYTE)Value) ) ); + m_fNextActionPropertyUsed = ( 0x02 == ( 0x02 & ((BYTE)Value) ) ); + m_fPreviousActionPropertyUsed = ( 0x04 == ( 0x04 & ((BYTE)Value) ) ); + + // StreamUtils::StreamSeek ( lPos + m_oHeader.RecLen, pStream ); +} diff --git a/MsBinaryFile/PptFile/Records/Animations/TimeSequenceDataAtom.h b/MsBinaryFile/PptFile/Records/Animations/TimeSequenceDataAtom.h index f4f93c903c..bf617f754e 100644 --- a/MsBinaryFile/PptFile/Records/Animations/TimeSequenceDataAtom.h +++ b/MsBinaryFile/PptFile/Records/Animations/TimeSequenceDataAtom.h @@ -39,26 +39,7 @@ namespace PPT_FORMAT class CRecordTimeSequenceDataAtom : public CUnknownRecord { public: - virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ) - { - m_oHeader = oHeader; - - // LONG lPos = 0; StreamUtils::StreamPosition ( lPos, pStream ); - - m_nConcurrency = StreamUtils::ReadDWORD ( pStream ); - m_nNextAction = StreamUtils::ReadDWORD ( pStream ); - m_nPreviousAction = StreamUtils::ReadDWORD ( pStream ); - - StreamUtils::StreamSkip ( sizeof ( _UINT32 ), pStream ); - - _UINT32 Value = StreamUtils::ReadDWORD ( pStream ); - - m_fConcurrencyPropertyUsed = ( 0x01 == ( 0x01 & ((BYTE)Value) ) ); - m_fNextActionPropertyUsed = ( 0x02 == ( 0x02 & ((BYTE)Value) ) ); - m_fPreviousActionPropertyUsed = ( 0x04 == ( 0x04 & ((BYTE)Value) ) ); - - // StreamUtils::StreamSeek ( lPos + m_oHeader.RecLen, pStream ); - } + virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ) override; public: diff --git a/MsBinaryFile/PptFile/Records/Animations/TimeSetBehaviorAtom.cpp b/MsBinaryFile/PptFile/Records/Animations/TimeSetBehaviorAtom.cpp new file mode 100644 index 0000000000..24f15e613a --- /dev/null +++ b/MsBinaryFile/PptFile/Records/Animations/TimeSetBehaviorAtom.cpp @@ -0,0 +1,14 @@ +#include "TimeSetBehaviorAtom.h" + + +void CRecordTimeSetBehaviorAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + _UINT32 Value = StreamUtils::ReadDWORD ( pStream ); + + m_bToPropertyUsed = ( 0x01 == ( 0x01 & ((BYTE)Value) ) ); + m_bValueTypePropertyUsed = ( 0x02 == ( 0x02 & ((BYTE)Value) ) ); + + m_eValueType = (TimeAnimateBehaviorValueTypeEnum)StreamUtils::ReadDWORD ( pStream ); +} diff --git a/MsBinaryFile/PptFile/Records/Animations/TimeSetBehaviorAtom.h b/MsBinaryFile/PptFile/Records/Animations/TimeSetBehaviorAtom.h index 649ca44227..c900f0e578 100644 --- a/MsBinaryFile/PptFile/Records/Animations/TimeSetBehaviorAtom.h +++ b/MsBinaryFile/PptFile/Records/Animations/TimeSetBehaviorAtom.h @@ -41,19 +41,8 @@ namespace PPT_FORMAT class CRecordTimeSetBehaviorAtom : public CUnknownRecord { public: - virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ) - { - m_oHeader = oHeader; + virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ) override; - _UINT32 Value = StreamUtils::ReadDWORD ( pStream ); - - m_bToPropertyUsed = ( 0x01 == ( 0x01 & ((BYTE)Value) ) ); - m_bValueTypePropertyUsed = ( 0x02 == ( 0x02 & ((BYTE)Value) ) ); - - m_eValueType = (TimeAnimateBehaviorValueTypeEnum)StreamUtils::ReadDWORD ( pStream ); - } - -public: bool m_bToPropertyUsed; bool m_bValueTypePropertyUsed; diff --git a/MsBinaryFile/PptFile/Records/Animations/TimeSetBehaviorContainer.cpp b/MsBinaryFile/PptFile/Records/Animations/TimeSetBehaviorContainer.cpp new file mode 100644 index 0000000000..339dd27dbd --- /dev/null +++ b/MsBinaryFile/PptFile/Records/Animations/TimeSetBehaviorContainer.cpp @@ -0,0 +1,25 @@ +#include "TimeSetBehaviorContainer.h" + + +void CRecordTimeSetBehaviorContainer::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + LONG lPos = 0; StreamUtils::StreamPosition ( lPos, pStream ); + + //UINT res = 0; + SRecordHeader ReadHeader; + if ( ReadHeader.ReadFromStream(pStream) ) + m_oSetBehaviorAtom.ReadFromStream ( ReadHeader, pStream ); + + //if ( m_oSetBehaviorAtom.m_bToPropertyUsed ) + //{ + if ( ReadHeader.ReadFromStream(pStream) ) + m_oVarTo.ReadFromStream ( ReadHeader, pStream ); + //} + + if ( ReadHeader.ReadFromStream(pStream) ) + m_oBehavior.ReadFromStream ( ReadHeader, pStream ); + + StreamUtils::StreamSeek ( lPos + m_oHeader.RecLen, pStream ); +} diff --git a/MsBinaryFile/PptFile/Records/Animations/TimeSetBehaviorContainer.h b/MsBinaryFile/PptFile/Records/Animations/TimeSetBehaviorContainer.h index dcfa34853e..ade6300947 100644 --- a/MsBinaryFile/PptFile/Records/Animations/TimeSetBehaviorContainer.h +++ b/MsBinaryFile/PptFile/Records/Animations/TimeSetBehaviorContainer.h @@ -43,28 +43,7 @@ namespace PPT_FORMAT class CRecordTimeSetBehaviorContainer : public CUnknownRecord { public: - virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ) - { - m_oHeader = oHeader; - - LONG lPos = 0; StreamUtils::StreamPosition ( lPos, pStream ); - - //UINT res = 0; - SRecordHeader ReadHeader; - if ( ReadHeader.ReadFromStream(pStream) ) - m_oSetBehaviorAtom.ReadFromStream ( ReadHeader, pStream ); - - //if ( m_oSetBehaviorAtom.m_bToPropertyUsed ) - //{ - if ( ReadHeader.ReadFromStream(pStream) ) - m_oVarTo.ReadFromStream ( ReadHeader, pStream ); - //} - - if ( ReadHeader.ReadFromStream(pStream) ) - m_oBehavior.ReadFromStream ( ReadHeader, pStream ); - - StreamUtils::StreamSeek ( lPos + m_oHeader.RecLen, pStream ); - } + virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ) override; public: diff --git a/MsBinaryFile/PptFile/Records/Animations/TimeStringListContainer.cpp b/MsBinaryFile/PptFile/Records/Animations/TimeStringListContainer.cpp new file mode 100644 index 0000000000..288bb3b956 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/Animations/TimeStringListContainer.cpp @@ -0,0 +1,26 @@ +#include "TimeStringListContainer.h" + + +void CRecordTimeStringListContainer::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + LONG lPos(0); StreamUtils::StreamPosition(lPos, pStream); + + UINT lCurLen = 0; + SRecordHeader ReadHeader; + + while ( lCurLen < m_oHeader.RecLen ) + { + if (ReadHeader.ReadFromStream(pStream) == false) + break; + + CRecordTimeVariantString Element; + Element.ReadFromStream ( ReadHeader, pStream ); + lCurLen += 8 + ReadHeader.RecLen; + + + m_arrRgChildRec.push_back ( Element ); + } + StreamUtils::StreamSeek(lPos + m_oHeader.RecLen, pStream); +} diff --git a/MsBinaryFile/PptFile/Records/Animations/TimeStringListContainer.h b/MsBinaryFile/PptFile/Records/Animations/TimeStringListContainer.h index d777f44232..230411e87d 100644 --- a/MsBinaryFile/PptFile/Records/Animations/TimeStringListContainer.h +++ b/MsBinaryFile/PptFile/Records/Animations/TimeStringListContainer.h @@ -31,7 +31,6 @@ */ #pragma once - #include "../../Reader/Records.h" #include "TimeVariant.h" @@ -41,31 +40,8 @@ namespace PPT_FORMAT class CRecordTimeStringListContainer : public CUnknownRecord { public: - virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ) - { - m_oHeader = oHeader; + virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ) override; - LONG lPos(0); StreamUtils::StreamPosition(lPos, pStream); - - UINT lCurLen = 0; - SRecordHeader ReadHeader; - - while ( lCurLen < m_oHeader.RecLen ) - { - if (ReadHeader.ReadFromStream(pStream) == false) - break; - - CRecordTimeVariantString Element; - Element.ReadFromStream ( ReadHeader, pStream ); - lCurLen += 8 + ReadHeader.RecLen; - - - m_arrRgChildRec.push_back ( Element ); - } - StreamUtils::StreamSeek(lPos + m_oHeader.RecLen, pStream); - } - -public: std::vector m_arrRgChildRec; }; diff --git a/MsBinaryFile/PptFile/Records/Animations/TimeVariant.cpp b/MsBinaryFile/PptFile/Records/Animations/TimeVariant.cpp index e97a885a64..7b31e895ad 100644 --- a/MsBinaryFile/PptFile/Records/Animations/TimeVariant.cpp +++ b/MsBinaryFile/PptFile/Records/Animations/TimeVariant.cpp @@ -73,3 +73,90 @@ CRecordTimeVariant* PPT_FORMAT::TimeVariantFactoryMethod(SRecordHeader & oHeader return pTimeVariant; } + +void CRecordTimeVariant::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + m_Type = ( TimeVariantTypeEnum )StreamUtils::ReadBYTE ( pStream ); +} + +CRecordTimeVariant::~CRecordTimeVariant() +{ + +} + +CRecordTimeVariant &CRecordTimeVariant::operator=(const CRecordTimeVariant &src) +{ + CUnknownRecord::operator=(src); + m_Type = src.m_Type; + + return *this; +} + +void CRecordTimeVariantBool::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + CRecordTimeVariant::ReadFromStream(oHeader, pStream); + m_Value = ( 0x1 == StreamUtils::ReadBYTE ( pStream ) ); +} + +CRecordTimeVariant &CRecordTimeVariantBool::operator=(const CRecordTimeVariant &src) +{ + CRecordTimeVariant::operator=(src); + m_Value = dynamic_cast(src).m_Value; + + return *this; +} + +void CRecordTimeVariantInt::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + CRecordTimeVariant::ReadFromStream(oHeader, pStream); + m_Value = StreamUtils::ReadDWORD ( pStream ); +} + +CRecordTimeVariant &CRecordTimeVariantInt::operator=(const CRecordTimeVariant &src) +{ + CRecordTimeVariant::operator=(src); + m_Value = dynamic_cast(src).m_Value; + + return *this; +} + +void CRecordTimeVariantFloat::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + CRecordTimeVariant::ReadFromStream(oHeader, pStream); + m_Value = StreamUtils::ReadFLOAT ( pStream ); +} + +CRecordTimeVariant &CRecordTimeVariantFloat::operator=(const CRecordTimeVariant &src) +{ + CRecordTimeVariant::operator=(src); + m_Value = dynamic_cast(src).m_Value; + + return *this; +} + +void CRecordTimeVariantString::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + if (oHeader.RecLen == 0) + return; + + LONG lPos; StreamUtils::StreamPosition(lPos, pStream); + lPos += oHeader.RecLen; + + CRecordTimeVariant::ReadFromStream(oHeader, pStream); + int strLen = m_oHeader.RecLen / 2 - 1; + if (strLen > 0) + { + m_Value = StreamUtils::ReadStringW(pStream, strLen); + } + StreamUtils::StreamSeek(lPos, pStream); +} + +CRecordTimeVariant &CRecordTimeVariantString::operator=(const CRecordTimeVariant &src) +{ + CRecordTimeVariant::operator=(src); + m_Value = dynamic_cast(src).m_Value; + + return *this; +} diff --git a/MsBinaryFile/PptFile/Records/Animations/TimeVariant.h b/MsBinaryFile/PptFile/Records/Animations/TimeVariant.h index ecd702a2f6..119b2a00e1 100644 --- a/MsBinaryFile/PptFile/Records/Animations/TimeVariant.h +++ b/MsBinaryFile/PptFile/Records/Animations/TimeVariant.h @@ -43,22 +43,11 @@ class CRecordTimeVariant : public CUnknownRecord { public: - virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ) - { - m_oHeader = oHeader; + virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream )override; - m_Type = ( TimeVariantTypeEnum )StreamUtils::ReadBYTE ( pStream ); - } + virtual ~CRecordTimeVariant(); - virtual ~CRecordTimeVariant(){} - - virtual CRecordTimeVariant& operator=(const CRecordTimeVariant& src) - { - CUnknownRecord::operator=(src); - m_Type = src.m_Type; - - return *this; - } + virtual CRecordTimeVariant &operator=(const CRecordTimeVariant& src) ; public: TimeVariantTypeEnum m_Type; @@ -68,19 +57,9 @@ public: class CRecordTimeVariantBool : public CRecordTimeVariant { public: - virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ) - { - CRecordTimeVariant::ReadFromStream(oHeader, pStream); - m_Value = ( 0x1 == StreamUtils::ReadBYTE ( pStream ) ); - } + virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ) override; - virtual CRecordTimeVariant& operator=(const CRecordTimeVariant& src) - { - CRecordTimeVariant::operator=(src); - m_Value = dynamic_cast(src).m_Value; - - return *this; - } + virtual CRecordTimeVariant& operator=(const CRecordTimeVariant& src) override; virtual ~CRecordTimeVariantBool(){} @@ -91,19 +70,9 @@ public: class CRecordTimeVariantInt : public CRecordTimeVariant { public: - virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ) - { - CRecordTimeVariant::ReadFromStream(oHeader, pStream); - m_Value = StreamUtils::ReadDWORD ( pStream ); - } + virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream )override; - virtual CRecordTimeVariant& operator=(const CRecordTimeVariant& src) - { - CRecordTimeVariant::operator=(src); - m_Value = dynamic_cast(src).m_Value; - - return *this; - } + virtual CRecordTimeVariant& operator=(const CRecordTimeVariant& src) override; virtual ~CRecordTimeVariantInt(){} @@ -114,21 +83,9 @@ public: class CRecordTimeVariantFloat : public CRecordTimeVariant { public: - virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ) - { - CRecordTimeVariant::ReadFromStream(oHeader, pStream); - m_Value = StreamUtils::ReadFLOAT ( pStream ); - } + virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ) override; - virtual CRecordTimeVariant& operator=(const CRecordTimeVariant& src) - { - CRecordTimeVariant::operator=(src); - m_Value = dynamic_cast(src).m_Value; - - return *this; - } - - virtual ~CRecordTimeVariantFloat(){} + virtual CRecordTimeVariant& operator=(const CRecordTimeVariant& src) override; public: FLOAT m_Value; @@ -137,33 +94,9 @@ public: class CRecordTimeVariantString : public CRecordTimeVariant { public: - virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ) - { - if (oHeader.RecLen == 0) - return; - - LONG lPos; StreamUtils::StreamPosition(lPos, pStream); - lPos += oHeader.RecLen; - - CRecordTimeVariant::ReadFromStream(oHeader, pStream); - int strLen = m_oHeader.RecLen / 2 - 1; - if (strLen > 0) - { - m_Value = StreamUtils::ReadStringW(pStream, strLen); - } - StreamUtils::StreamSeek(lPos, pStream); - } - - virtual CRecordTimeVariant& operator=(const CRecordTimeVariant& src) - { - CRecordTimeVariant::operator=(src); - m_Value = dynamic_cast(src).m_Value; - - return *this; - } - - virtual ~CRecordTimeVariantString(){} + virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ) override; + virtual CRecordTimeVariant& operator=(const CRecordTimeVariant& src) override; public: std::wstring m_Value; diff --git a/MsBinaryFile/PptFile/Records/Animations/TimeVariant4Behavior.cpp b/MsBinaryFile/PptFile/Records/Animations/TimeVariant4Behavior.cpp new file mode 100644 index 0000000000..2bb6ba2a92 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/Animations/TimeVariant4Behavior.cpp @@ -0,0 +1,29 @@ +#include "TimeVariant4Behavior.h" + + +//------------------------------------------------------------------------------- +#define CREATE_BY_Instanse(RECORD_Instanse, CLASS_RECORD_NAME) \ + case RECORD_Instanse: { pRecord = new CLASS_RECORD_NAME(); break; } \ +//------------------------------------------------------------------------------- + + +IRecord *FactoryTimeVariant4Behavior::createByInstanse(unsigned short recInstance) +{ + IRecord* pRecord = nullptr; + + switch (recInstance) + { + CREATE_BY_Instanse(TL_TBPID_UnknownPropertyList, CRecordTimeVariantString) + CREATE_BY_Instanse(TL_TBPID_RuntimeContext, CRecordTimeRuntimeContext) + CREATE_BY_Instanse(TL_TBPID_MotionPathEditRelative, CRecordTimeVariantBool) + CREATE_BY_Instanse(TL_TBPID_ColorColorModel, CRecordTimeColorModel) + CREATE_BY_Instanse(TL_TBPID_ColorDirection, CRecordTimeColorDirection) + CREATE_BY_Instanse(TL_TBPID_Override, CRecordTimeOverride) + CREATE_BY_Instanse(TL_TBPID_PathEditRotationAngle, CRecordTimeVariantFloat) + CREATE_BY_Instanse(TL_TBPID_PathEditRotationX, CRecordTimeVariantFloat) + CREATE_BY_Instanse(TL_TBPID_PathEditRotationY, CRecordTimeVariantFloat) + CREATE_BY_Instanse(TL_TBPID_PointsTypes, CRecordTimePointsTypes) + } + + return pRecord; +} diff --git a/MsBinaryFile/PptFile/Records/Animations/TimeVariant4Behavior.h b/MsBinaryFile/PptFile/Records/Animations/TimeVariant4Behavior.h index 2d632a5754..07bae9d168 100644 --- a/MsBinaryFile/PptFile/Records/Animations/TimeVariant4Behavior.h +++ b/MsBinaryFile/PptFile/Records/Animations/TimeVariant4Behavior.h @@ -31,43 +31,16 @@ */ #pragma once - #include "../../Reader/Records.h" #include "../../Enums/_includer.h" #include "TimeVariant.h" -//------------------------------------------------------------------------------- -#define CREATE_BY_Instanse(RECORD_Instanse, CLASS_RECORD_NAME) \ - case RECORD_Instanse: { pRecord = new CLASS_RECORD_NAME(); break; } \ -//------------------------------------------------------------------------------- - - namespace PPT_FORMAT { -//TODO class FactoryTimeVariant4Behavior { public: - static IRecord* createByInstanse(unsigned short recInstance) - { - IRecord* pRecord = nullptr; - - switch (recInstance) - { - CREATE_BY_Instanse(TL_TBPID_UnknownPropertyList, CRecordTimeVariantString) - CREATE_BY_Instanse(TL_TBPID_RuntimeContext, CRecordTimeRuntimeContext) - CREATE_BY_Instanse(TL_TBPID_MotionPathEditRelative, CRecordTimeVariantBool) - CREATE_BY_Instanse(TL_TBPID_ColorColorModel, CRecordTimeColorModel) - CREATE_BY_Instanse(TL_TBPID_ColorDirection, CRecordTimeColorDirection) - CREATE_BY_Instanse(TL_TBPID_Override, CRecordTimeOverride) - CREATE_BY_Instanse(TL_TBPID_PathEditRotationAngle, CRecordTimeVariantFloat) - CREATE_BY_Instanse(TL_TBPID_PathEditRotationX, CRecordTimeVariantFloat) - CREATE_BY_Instanse(TL_TBPID_PathEditRotationY, CRecordTimeVariantFloat) - CREATE_BY_Instanse(TL_TBPID_PointsTypes, CRecordTimePointsTypes) - } - - return pRecord; - } + static IRecord* createByInstanse(unsigned short recInstance); }; } diff --git a/MsBinaryFile/PptFile/Records/Animations/VisualPageAtom.cpp b/MsBinaryFile/PptFile/Records/Animations/VisualPageAtom.cpp new file mode 100644 index 0000000000..df0ee5f727 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/Animations/VisualPageAtom.cpp @@ -0,0 +1,9 @@ +#include "VisualPageAtom.h" + + +void CRecordVisualPageAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + m_eType = (TimeVisualElementEnum) StreamUtils::ReadDWORD ( pStream ); +} diff --git a/MsBinaryFile/PptFile/Records/Animations/VisualPageAtom.h b/MsBinaryFile/PptFile/Records/Animations/VisualPageAtom.h index 1703a27bcc..bf6d717059 100644 --- a/MsBinaryFile/PptFile/Records/Animations/VisualPageAtom.h +++ b/MsBinaryFile/PptFile/Records/Animations/VisualPageAtom.h @@ -31,24 +31,17 @@ */ #pragma once - #include "../../Reader/Records.h" #include "../../Enums/_includer.h" + namespace PPT_FORMAT { class CRecordVisualPageAtom : public CUnknownRecord { public: - virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ) - { - m_oHeader = oHeader; + virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ) override; - m_eType = (TimeVisualElementEnum) StreamUtils::ReadDWORD ( pStream ); - } - - -public: TimeVisualElementEnum m_eType; }; diff --git a/MsBinaryFile/PptFile/Records/Animations/VisualShapeAtom.cpp b/MsBinaryFile/PptFile/Records/Animations/VisualShapeAtom.cpp new file mode 100644 index 0000000000..f4f7abd52a --- /dev/null +++ b/MsBinaryFile/PptFile/Records/Animations/VisualShapeAtom.cpp @@ -0,0 +1,13 @@ +#include "VisualShapeAtom.h" + + +void CRecordVisualShapeAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + m_Type = (TimeVisualElementEnum) StreamUtils::ReadDWORD ( pStream ); + m_RefType = (ElementTypeEnum) StreamUtils::ReadDWORD ( pStream ); + m_nObjectIdRef = StreamUtils::ReadDWORD ( pStream ); + m_nData1 = StreamUtils::ReadDWORD ( pStream ); + m_nData2 = StreamUtils::ReadDWORD ( pStream ); +} diff --git a/MsBinaryFile/PptFile/Records/Animations/VisualShapeAtom.h b/MsBinaryFile/PptFile/Records/Animations/VisualShapeAtom.h index 651e9f186c..8ced72392a 100644 --- a/MsBinaryFile/PptFile/Records/Animations/VisualShapeAtom.h +++ b/MsBinaryFile/PptFile/Records/Animations/VisualShapeAtom.h @@ -42,19 +42,8 @@ class CRecordVisualShapeAtom : public CUnknownRecord { public: // Привязка анимации через этот объект к ID объекту + virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ) override; - virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ) - { - m_oHeader = oHeader; - - m_Type = (TimeVisualElementEnum) StreamUtils::ReadDWORD ( pStream ); - m_RefType = (ElementTypeEnum) StreamUtils::ReadDWORD ( pStream ); - m_nObjectIdRef = StreamUtils::ReadDWORD ( pStream ); - m_nData1 = StreamUtils::ReadDWORD ( pStream ); - m_nData2 = StreamUtils::ReadDWORD ( pStream ); - } - -public: TimeVisualElementEnum m_Type; ElementTypeEnum m_RefType; diff --git a/MsBinaryFile/PptFile/Records/Animations/VisualShapeChartElementAtom.cpp b/MsBinaryFile/PptFile/Records/Animations/VisualShapeChartElementAtom.cpp new file mode 100644 index 0000000000..85db6688d9 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/Animations/VisualShapeChartElementAtom.cpp @@ -0,0 +1,14 @@ +#include "VisualShapeChartElementAtom.h" + + +void CRecordVisualShapeChartElementAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + m_eType = (TimeVisualElementEnum)StreamUtils::ReadDWORD(pStream); + m_eRefType = (ElementTypeEnum)StreamUtils::ReadDWORD(pStream); + + m_nShapeIdRef = StreamUtils::ReadDWORD(pStream); + m_nData1 = StreamUtils::ReadDWORD(pStream); + m_nData2 = StreamUtils::ReadDWORD(pStream); +} diff --git a/MsBinaryFile/PptFile/Records/Animations/VisualShapeChartElementAtom.h b/MsBinaryFile/PptFile/Records/Animations/VisualShapeChartElementAtom.h index af56b35ea8..7cb425646a 100644 --- a/MsBinaryFile/PptFile/Records/Animations/VisualShapeChartElementAtom.h +++ b/MsBinaryFile/PptFile/Records/Animations/VisualShapeChartElementAtom.h @@ -40,17 +40,7 @@ namespace PPT_FORMAT class CRecordVisualShapeChartElementAtom : public CUnknownRecord { public: - virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ) - { - m_oHeader = oHeader; - - m_eType = (TimeVisualElementEnum)StreamUtils::ReadDWORD(pStream); - m_eRefType = (ElementTypeEnum)StreamUtils::ReadDWORD(pStream); - - m_nShapeIdRef = StreamUtils::ReadDWORD(pStream); - m_nData1 = StreamUtils::ReadDWORD(pStream); - m_nData2 = StreamUtils::ReadDWORD(pStream); - } + virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ) override; public: TimeVisualElementEnum m_eType; diff --git a/MsBinaryFile/PptFile/Records/Animations/VisualShapeGeneralAtom.cpp b/MsBinaryFile/PptFile/Records/Animations/VisualShapeGeneralAtom.cpp new file mode 100644 index 0000000000..0c572f68f3 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/Animations/VisualShapeGeneralAtom.cpp @@ -0,0 +1,13 @@ +#include "VisualShapeGeneralAtom.h" + + +void CRecordVisualShapeGeneralAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + m_eType = (TimeVisualElementEnum)StreamUtils::ReadDWORD(pStream); + m_eRefType = (ElementTypeEnum)StreamUtils::ReadDWORD(pStream); + + m_nShapeIdRef = StreamUtils::ReadDWORD(pStream); + m_nData1 = StreamUtils::ReadDWORD(pStream); + m_nData2 = StreamUtils::ReadDWORD(pStream); +} diff --git a/MsBinaryFile/PptFile/Records/Animations/VisualShapeGeneralAtom.h b/MsBinaryFile/PptFile/Records/Animations/VisualShapeGeneralAtom.h index db01eecb88..93cc1228f1 100644 --- a/MsBinaryFile/PptFile/Records/Animations/VisualShapeGeneralAtom.h +++ b/MsBinaryFile/PptFile/Records/Animations/VisualShapeGeneralAtom.h @@ -31,7 +31,6 @@ */ #pragma once - #include "../../Reader/Records.h" #include "../../Enums/_includer.h" @@ -41,24 +40,14 @@ namespace PPT_FORMAT class CRecordVisualShapeGeneralAtom : public CUnknownRecord { public: - virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ) - { - m_oHeader = oHeader; - m_eType = (TimeVisualElementEnum)StreamUtils::ReadDWORD(pStream); - m_eRefType = (ElementTypeEnum)StreamUtils::ReadDWORD(pStream); + virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ) override; - m_nShapeIdRef = StreamUtils::ReadDWORD(pStream); - m_nData1 = StreamUtils::ReadDWORD(pStream); - m_nData2 = StreamUtils::ReadDWORD(pStream); - } -public: TimeVisualElementEnum m_eType; ElementTypeEnum m_eRefType; _UINT32 m_nShapeIdRef; _INT32 m_nData1; _INT32 m_nData2; - }; } diff --git a/MsBinaryFile/PptFile/Records/Animations/VisualSoundAtom.cpp b/MsBinaryFile/PptFile/Records/Animations/VisualSoundAtom.cpp new file mode 100644 index 0000000000..b3baeb52e0 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/Animations/VisualSoundAtom.cpp @@ -0,0 +1,13 @@ +#include "VisualSoundAtom.h" + + +void CRecordVisualSoundAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + m_eType = (TimeVisualElementEnum) StreamUtils::ReadDWORD ( pStream ); + m_eRefType = (ElementTypeEnum) StreamUtils::ReadDWORD ( pStream ); + m_nSoundIdRef = StreamUtils::ReadDWORD ( pStream ); + m_nData1 = StreamUtils::ReadDWORD ( pStream ); + m_nData2 = StreamUtils::ReadDWORD ( pStream ); +} diff --git a/MsBinaryFile/PptFile/Records/Animations/VisualSoundAtom.h b/MsBinaryFile/PptFile/Records/Animations/VisualSoundAtom.h index b34844d482..dacb4726bc 100644 --- a/MsBinaryFile/PptFile/Records/Animations/VisualSoundAtom.h +++ b/MsBinaryFile/PptFile/Records/Animations/VisualSoundAtom.h @@ -42,19 +42,8 @@ class CRecordVisualSoundAtom : public CUnknownRecord { public: // Привязка звука через этот объект к ID объекту + virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ) override; - virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ) - { - m_oHeader = oHeader; - - m_eType = (TimeVisualElementEnum) StreamUtils::ReadDWORD ( pStream ); - m_eRefType = (ElementTypeEnum) StreamUtils::ReadDWORD ( pStream ); - m_nSoundIdRef = StreamUtils::ReadDWORD ( pStream ); - m_nData1 = StreamUtils::ReadDWORD ( pStream ); - m_nData2 = StreamUtils::ReadDWORD ( pStream ); - } - -public: TimeVisualElementEnum m_eType; ElementTypeEnum m_eRefType; diff --git a/MsBinaryFile/PptFile/Records/BlipCollection9Container.cpp b/MsBinaryFile/PptFile/Records/BlipCollection9Container.cpp new file mode 100644 index 0000000000..b81c196dc6 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/BlipCollection9Container.cpp @@ -0,0 +1,26 @@ +#include "BlipCollection9Container.h" + + +void CRecordBlipCollection9Container::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + LONG lPos = 0; + StreamUtils::StreamPosition ( lPos, pStream ); + + _UINT32 lCurLen = 0; + + SRecordHeader ReadHeader; + + while ( lCurLen < m_oHeader.RecLen ) + { + if ( ReadHeader.ReadFromStream(pStream) == false) + break; + + lCurLen += 8 + ReadHeader.RecLen; + + std::shared_ptr pRec(new CRecordBlipEntityAtom); + pRec->ReadFromStream(ReadHeader, pStream); + m_rgBlipEntityAtom.push_back(pRec); + } + StreamUtils::StreamSeek(lPos + m_oHeader.RecLen, pStream); +} diff --git a/MsBinaryFile/PptFile/Records/BlipCollection9Container.h b/MsBinaryFile/PptFile/Records/BlipCollection9Container.h index 28f18444e4..e0f3ee3b76 100644 --- a/MsBinaryFile/PptFile/Records/BlipCollection9Container.h +++ b/MsBinaryFile/PptFile/Records/BlipCollection9Container.h @@ -41,37 +41,7 @@ class CRecordBlipCollection9Container : public CUnknownRecord public: std::vector > m_rgBlipEntityAtom; - CRecordBlipCollection9Container() - { - } - - ~CRecordBlipCollection9Container() - { - } - - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - m_oHeader = oHeader; - LONG lPos = 0; - StreamUtils::StreamPosition ( lPos, pStream ); - - _UINT32 lCurLen = 0; - - SRecordHeader ReadHeader; - - while ( lCurLen < m_oHeader.RecLen ) - { - if ( ReadHeader.ReadFromStream(pStream) == false) - break; - - lCurLen += 8 + ReadHeader.RecLen; - - std::shared_ptr pRec(new CRecordBlipEntityAtom); - pRec->ReadFromStream(ReadHeader, pStream); - m_rgBlipEntityAtom.push_back(pRec); - } - StreamUtils::StreamSeek(lPos + m_oHeader.RecLen, pStream); - } + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream); }; } diff --git a/MsBinaryFile/PptFile/Records/BookmarkEntityAtom.cpp b/MsBinaryFile/PptFile/Records/BookmarkEntityAtom.cpp new file mode 100644 index 0000000000..aa282fad90 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/BookmarkEntityAtom.cpp @@ -0,0 +1,7 @@ +#include "BookmarkEntityAtom.h" + + +void CRecordBookmarkEntityAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + return CUnknownRecord::ReadFromStream(oHeader, pStream); +} diff --git a/MsBinaryFile/PptFile/Records/BookmarkEntityAtom.h b/MsBinaryFile/PptFile/Records/BookmarkEntityAtom.h index 2c0756a628..47cbc6187f 100644 --- a/MsBinaryFile/PptFile/Records/BookmarkEntityAtom.h +++ b/MsBinaryFile/PptFile/Records/BookmarkEntityAtom.h @@ -35,20 +35,8 @@ class CRecordBookmarkEntityAtom : public CUnknownRecord { public: - UINT m_nID; + UINT m_nID = 0; std::wstring m_strName; - - CRecordBookmarkEntityAtom() - { - } - - ~CRecordBookmarkEntityAtom() - { - } - - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - return CUnknownRecord::ReadFromStream(oHeader, pStream); - } + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream); }; diff --git a/MsBinaryFile/PptFile/Records/BookmarkSeedAtom.cpp b/MsBinaryFile/PptFile/Records/BookmarkSeedAtom.cpp new file mode 100644 index 0000000000..b8cc765c17 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/BookmarkSeedAtom.cpp @@ -0,0 +1,7 @@ +#include "BookmarkSeedAtom.h" + + +void CRecordBookmarkSeedAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + return CUnknownRecord::ReadFromStream(oHeader, pStream); +} diff --git a/MsBinaryFile/PptFile/Records/BookmarkSeedAtom.h b/MsBinaryFile/PptFile/Records/BookmarkSeedAtom.h index 9b04809cca..6aff1a43f8 100644 --- a/MsBinaryFile/PptFile/Records/BookmarkSeedAtom.h +++ b/MsBinaryFile/PptFile/Records/BookmarkSeedAtom.h @@ -35,19 +35,8 @@ class CRecordBookmarkSeedAtom : public CUnknownRecord { public: - INT m_nBookmarkID; - - CRecordBookmarkSeedAtom() - { - } + INT m_nBookmarkID = -1; - ~CRecordBookmarkSeedAtom() - { - } - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - return CUnknownRecord::ReadFromStream(oHeader, pStream); - } - -}; \ No newline at end of file + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream); +}; diff --git a/MsBinaryFile/PptFile/Records/BuildAtom.cpp b/MsBinaryFile/PptFile/Records/BuildAtom.cpp new file mode 100644 index 0000000000..c9da8733b2 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/BuildAtom.cpp @@ -0,0 +1,15 @@ +#include "BuildAtom.h" + +void CRecordBuildAtom::ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) +{ + m_oHeader = oHeader; + + m_BuildType = (BuildTypeEnum)StreamUtils::ReadDWORD(pStream); + m_BuildId = StreamUtils::ReadDWORD(pStream); + m_ShapeIdRef = StreamUtils::ReadDWORD(pStream); + + m_fExpanded = StreamUtils::ReadBYTE(pStream); + m_fUIExpanded = StreamUtils::ReadBYTE(pStream); + + StreamUtils::StreamSkip(2, pStream); +} diff --git a/MsBinaryFile/PptFile/Records/BuildAtom.h b/MsBinaryFile/PptFile/Records/BuildAtom.h index e6efb23b2e..a9f67eba31 100644 --- a/MsBinaryFile/PptFile/Records/BuildAtom.h +++ b/MsBinaryFile/PptFile/Records/BuildAtom.h @@ -42,32 +42,12 @@ enum BuildTypeEnum : _UINT32 class CRecordBuildAtom : public CUnknownRecord { public: - BuildTypeEnum m_BuildType; - _UINT32 m_BuildId; - _UINT32 m_ShapeIdRef; - bool m_fExpanded; - bool m_fUIExpanded; -public: + BuildTypeEnum m_BuildType = TL_BuildParagraph; + _UINT32 m_BuildId = 0; + _UINT32 m_ShapeIdRef = 0; + bool m_fExpanded = false; + bool m_fUIExpanded = false; - CRecordBuildAtom() - { - } - ~CRecordBuildAtom() - { - } - - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - m_oHeader = oHeader; - - m_BuildType = (BuildTypeEnum)StreamUtils::ReadDWORD(pStream); - m_BuildId = StreamUtils::ReadDWORD(pStream); - m_ShapeIdRef = StreamUtils::ReadDWORD(pStream); - - m_fExpanded = StreamUtils::ReadBYTE(pStream); - m_fUIExpanded = StreamUtils::ReadBYTE(pStream); - - StreamUtils::StreamSkip(2, pStream); - } + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream)override; }; diff --git a/MsBinaryFile/PptFile/Records/CFMasks.cpp b/MsBinaryFile/PptFile/Records/CFMasks.cpp new file mode 100644 index 0000000000..d2e750a351 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/CFMasks.cpp @@ -0,0 +1,38 @@ +#include "CFMasks.h" + + +void SCFMasks::ReadFromStream(POLE::Stream *pStream) +{ + BYTE data1 = StreamUtils::ReadBYTE(pStream); + BYTE data2 = StreamUtils::ReadBYTE(pStream); + BYTE data3 = StreamUtils::ReadBYTE(pStream); + BYTE data4 = StreamUtils::ReadBYTE(pStream); + + m_bold = 0x01 == (0x01 & data1); + m_italic = 0x02 == (0x02 & data1); + m_underline = 0x04 == (0x04 & data1); + // unused + m_shadow = 0x10 == (0x10 & data1); + m_fehint = 0x20 == (0x20 & data1); + // unused2 + m_kumi = 0x80 == (0x80 & data1); + // unused3 + + m_emboss = 0x02 == (0x02 & data2); + m_fHasStyle = 0x3C & data2; // 4 bits + // unused 2 bits + + m_typeface = 0x01 == (0x01 & data3); + m_size = 0x02 == (0x02 & data3); + m_color = 0x04 == (0x04 & data3); + m_position = 0x08 == (0x08 & data3); + m_pp10ext = 0x10 == (0x10 & data3); + m_oldEATypeface = 0x20 == (0x20 & data3); + m_ansiTypeface = 0x40 == (0x40 & data3); + m_symbolTypeface = 0x80 == (0x80 & data3); + + m_newEATypeface = 0x01 == (0x01 & data4); + m_csTypeface = 0x02 == (0x02 & data4); + m_pp11ext = 0x04 == (0x04 & data4); + // reserved 5 bits +} diff --git a/MsBinaryFile/PptFile/Records/CFMasks.h b/MsBinaryFile/PptFile/Records/CFMasks.h index f27e86d278..ef59b559c0 100644 --- a/MsBinaryFile/PptFile/Records/CFMasks.h +++ b/MsBinaryFile/PptFile/Records/CFMasks.h @@ -63,40 +63,6 @@ struct SCFMasks // reserved 5 bits - void ReadFromStream(POLE::Stream* pStream) - { - BYTE data1 = StreamUtils::ReadBYTE(pStream); - BYTE data2 = StreamUtils::ReadBYTE(pStream); - BYTE data3 = StreamUtils::ReadBYTE(pStream); - BYTE data4 = StreamUtils::ReadBYTE(pStream); - - m_bold = 0x01 == (0x01 & data1); - m_italic = 0x02 == (0x02 & data1); - m_underline = 0x04 == (0x04 & data1); - // unused - m_shadow = 0x10 == (0x10 & data1); - m_fehint = 0x20 == (0x20 & data1); - // unused2 - m_kumi = 0x80 == (0x80 & data1); - // unused3 - - m_emboss = 0x02 == (0x02 & data2); - m_fHasStyle = 0x3C & data2; // 4 bits - // unused 2 bits - - m_typeface = 0x01 == (0x01 & data3); - m_size = 0x02 == (0x02 & data3); - m_color = 0x04 == (0x04 & data3); - m_position = 0x08 == (0x08 & data3); - m_pp10ext = 0x10 == (0x10 & data3); - m_oldEATypeface = 0x20 == (0x20 & data3); - m_ansiTypeface = 0x40 == (0x40 & data3); - m_symbolTypeface = 0x80 == (0x80 & data3); - - m_newEATypeface = 0x01 == (0x01 & data4); - m_csTypeface = 0x02 == (0x02 & data4); - m_pp11ext = 0x04 == (0x04 & data4); - // reserved 5 bits - } + void ReadFromStream(POLE::Stream* pStream); }; } diff --git a/MsBinaryFile/PptFile/Records/CString.cpp b/MsBinaryFile/PptFile/Records/CString.cpp new file mode 100644 index 0000000000..32176bad19 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/CString.cpp @@ -0,0 +1,8 @@ +#include "CString.h" + + +void CRecordCString::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + m_strText = StreamUtils::ReadStringW(pStream, m_oHeader.RecLen / 2); +} diff --git a/MsBinaryFile/PptFile/Records/CString.h b/MsBinaryFile/PptFile/Records/CString.h index 003eeb5240..c8dde5d4da 100644 --- a/MsBinaryFile/PptFile/Records/CString.h +++ b/MsBinaryFile/PptFile/Records/CString.h @@ -37,19 +37,7 @@ class CRecordCString : public CUnknownRecord { public: std::wstring m_strText; - - CRecordCString() - { - } - ~CRecordCString() - { - } - - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - m_oHeader = oHeader; - m_strText = StreamUtils::ReadStringW(pStream, m_oHeader.RecLen / 2); - } + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) override; }; diff --git a/MsBinaryFile/PptFile/Records/ColorSchemeAtom.cpp b/MsBinaryFile/PptFile/Records/ColorSchemeAtom.cpp new file mode 100644 index 0000000000..cb82268483 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/ColorSchemeAtom.cpp @@ -0,0 +1,62 @@ +#include "ColorSchemeAtom.h" + + +void CRecordColorSchemeAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + NSStreamReader::Read(pStream, m_oBackgroundColor); + NSStreamReader::Read(pStream, m_oTextAndLinesColor); + NSStreamReader::Read(pStream, m_oShadowsColor); + NSStreamReader::Read(pStream, m_oTitleTextColor); + NSStreamReader::Read(pStream, m_oFillsColor); + NSStreamReader::Read(pStream, m_oAccentColor); + NSStreamReader::Read(pStream, m_oAccentAndHyperlinkColor); + NSStreamReader::Read(pStream, m_oAccentAndFollowingHyperlinkColor); +} + +void CRecordColorSchemeAtom::ToArray(std::vector *pArray) +{ + if (NULL != pArray) + { + pArray->push_back(m_oBackgroundColor); + pArray->push_back(m_oTextAndLinesColor); + pArray->push_back(m_oShadowsColor); + pArray->push_back(m_oTitleTextColor); + pArray->push_back(m_oFillsColor); + pArray->push_back(m_oAccentColor); + pArray->push_back(m_oAccentAndHyperlinkColor); + pArray->push_back(m_oAccentAndFollowingHyperlinkColor); + } +} + +void CRecordColorSchemeAtom::ToArray(std::vector *pArray) +{ + CColor oColor; + if (NULL != pArray) + { + m_oBackgroundColor.ToColor(&oColor); + pArray->push_back(oColor); + + m_oTextAndLinesColor.ToColor(&oColor); + pArray->push_back(oColor); + + m_oShadowsColor.ToColor(&oColor); + pArray->push_back(oColor); + + m_oTitleTextColor.ToColor(&oColor); + pArray->push_back(oColor); + + m_oFillsColor.ToColor(&oColor); + pArray->push_back(oColor); + + m_oAccentColor.ToColor(&oColor); + pArray->push_back(oColor); + + m_oAccentAndHyperlinkColor.ToColor(&oColor); + pArray->push_back(oColor); + + m_oAccentAndFollowingHyperlinkColor.ToColor(&oColor); + pArray->push_back(oColor); + } +} diff --git a/MsBinaryFile/PptFile/Records/ColorSchemeAtom.h b/MsBinaryFile/PptFile/Records/ColorSchemeAtom.h index 6074fd520b..f3d0faf40c 100644 --- a/MsBinaryFile/PptFile/Records/ColorSchemeAtom.h +++ b/MsBinaryFile/PptFile/Records/ColorSchemeAtom.h @@ -34,6 +34,7 @@ class CRecordColorSchemeAtom : public CUnknownRecord { +public: SColorAtom m_oBackgroundColor; SColorAtom m_oTextAndLinesColor; SColorAtom m_oShadowsColor; @@ -43,72 +44,9 @@ class CRecordColorSchemeAtom : public CUnknownRecord SColorAtom m_oAccentAndHyperlinkColor; SColorAtom m_oAccentAndFollowingHyperlinkColor; -public: - - CRecordColorSchemeAtom() - { - } - ~CRecordColorSchemeAtom() - { - } + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream); - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - m_oHeader = oHeader; - - NSStreamReader::Read(pStream, m_oBackgroundColor); - NSStreamReader::Read(pStream, m_oTextAndLinesColor); - NSStreamReader::Read(pStream, m_oShadowsColor); - NSStreamReader::Read(pStream, m_oTitleTextColor); - NSStreamReader::Read(pStream, m_oFillsColor); - NSStreamReader::Read(pStream, m_oAccentColor); - NSStreamReader::Read(pStream, m_oAccentAndHyperlinkColor); - NSStreamReader::Read(pStream, m_oAccentAndFollowingHyperlinkColor); - } - - void ToArray(std::vector* pArray) - { - if (NULL != pArray) - { - pArray->push_back(m_oBackgroundColor); - pArray->push_back(m_oTextAndLinesColor); - pArray->push_back(m_oShadowsColor); - pArray->push_back(m_oTitleTextColor); - pArray->push_back(m_oFillsColor); - pArray->push_back(m_oAccentColor); - pArray->push_back(m_oAccentAndHyperlinkColor); - pArray->push_back(m_oAccentAndFollowingHyperlinkColor); - } - } - void ToArray(std::vector* pArray) - { - CColor oColor; - if (NULL != pArray) - { - m_oBackgroundColor.ToColor(&oColor); - pArray->push_back(oColor); - - m_oTextAndLinesColor.ToColor(&oColor); - pArray->push_back(oColor); - - m_oShadowsColor.ToColor(&oColor); - pArray->push_back(oColor); - - m_oTitleTextColor.ToColor(&oColor); - pArray->push_back(oColor); - - m_oFillsColor.ToColor(&oColor); - pArray->push_back(oColor); - - m_oAccentColor.ToColor(&oColor); - pArray->push_back(oColor); - - m_oAccentAndHyperlinkColor.ToColor(&oColor); - pArray->push_back(oColor); - - m_oAccentAndFollowingHyperlinkColor.ToColor(&oColor); - pArray->push_back(oColor); - } - } -}; \ No newline at end of file + void ToArray(std::vector* pArray); + void ToArray(std::vector* pArray); +}; diff --git a/MsBinaryFile/PptFile/Records/Comment10Container.cpp b/MsBinaryFile/PptFile/Records/Comment10Container.cpp new file mode 100644 index 0000000000..a483314707 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/Comment10Container.cpp @@ -0,0 +1,101 @@ +#include "Comment10Container.h" + + +void CRecordComment10AuthorAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + m_sCommentAuthor = StreamUtils::ReadStringW(pStream, m_oHeader.RecLen); +} + +void CRecordComment10TextAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + m_sCommentText = StreamUtils::ReadStringW(pStream, m_oHeader.RecLen); +} + +void CRecordComment10AuthorInitialAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + m_sCommentAuthorInitials = StreamUtils::ReadStringW(pStream, m_oHeader.RecLen); +} + +void CRecordComment10Atom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + m_nIndex = StreamUtils::ReadLONG(pStream); + m_oDatetime.ReadFromStream(pStream); + m_oAnchor.ReadFromStream(pStream); +} + +CRecordComment10Container::CRecordComment10Container() : + m_pCommentAuthorAtom(nullptr), + m_pCommentTextAtom(nullptr), + m_pCommentAuthorInitialsAtom(nullptr), + + m_haveAuthorAtom(false), + m_haveTextAtom(false), + m_haveAuthorInitialAtom(false) +{ + +} + +CRecordComment10Container::~CRecordComment10Container() +{ + RELEASEOBJECT(m_pCommentAuthorAtom) + RELEASEOBJECT(m_pCommentTextAtom) + RELEASEOBJECT(m_pCommentAuthorInitialsAtom) +} + +void CRecordComment10Container::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + LONG lPos(0); StreamUtils::StreamPosition(lPos, pStream); + + _UINT32 lCurLen(0); + SRecordHeader ReadHeader; + + while (lCurLen < m_oHeader.RecLen) { + if ( ReadHeader.ReadFromStream(pStream) == false ) + { + break; + } + + lCurLen += 8 + ReadHeader.RecLen; + + if (ReadHeader.RecType == RT_CString) { + switch (ReadHeader.RecInstance) { + case 0: + m_pCommentAuthorAtom = new CRecordComment10AuthorAtom(); + m_pCommentAuthorAtom->ReadFromStream(ReadHeader, pStream); + m_haveAuthorAtom = true; + break; + case 1: + m_pCommentTextAtom = new CRecordComment10TextAtom(); + m_pCommentTextAtom->ReadFromStream(ReadHeader, pStream); + m_haveTextAtom = true; + break; + + case 2: + m_pCommentAuthorInitialsAtom = new CRecordComment10AuthorInitialAtom(); + m_pCommentAuthorInitialsAtom->ReadFromStream(ReadHeader, pStream); + m_haveAuthorInitialAtom = true; + break; + default: + break; + } + + } else + { + m_oCommentAtom.ReadFromStream(ReadHeader, pStream); + } + } + + StreamUtils::StreamSeek(lPos + m_oHeader.RecLen, pStream); +} + + diff --git a/MsBinaryFile/PptFile/Records/Comment10Container.h b/MsBinaryFile/PptFile/Records/Comment10Container.h index e5364a494e..cf71c0e999 100644 --- a/MsBinaryFile/PptFile/Records/Comment10Container.h +++ b/MsBinaryFile/PptFile/Records/Comment10Container.h @@ -41,12 +41,7 @@ namespace PPT_FORMAT class CRecordComment10AuthorAtom : public CUnknownRecord { public: - void ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) override - { - m_oHeader = oHeader; - - m_sCommentAuthor = StreamUtils::ReadStringW(pStream, m_oHeader.RecLen); - } + void ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) override; public: std::wstring m_sCommentAuthor; @@ -55,12 +50,7 @@ public: class CRecordComment10TextAtom : public CUnknownRecord { public: - void ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) override - { - m_oHeader = oHeader; - - m_sCommentText = StreamUtils::ReadStringW(pStream, m_oHeader.RecLen); - } + void ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) override; public: std::wstring m_sCommentText; @@ -69,12 +59,7 @@ public: class CRecordComment10AuthorInitialAtom : public CUnknownRecord { public: - void ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) override - { - m_oHeader = oHeader; - - m_sCommentAuthorInitials = StreamUtils::ReadStringW(pStream, m_oHeader.RecLen); - } + void ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) override; public: std::wstring m_sCommentAuthorInitials; @@ -83,17 +68,10 @@ public: class CRecordComment10Atom : public CUnknownRecord { public: - void ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) override - { - m_oHeader = oHeader; - - m_nIndex = StreamUtils::ReadLONG(pStream); - m_oDatetime.ReadFromStream(pStream); - m_oAnchor.ReadFromStream(pStream); - } + void ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) override; public: - _INT32 m_nIndex; + _INT32 m_nIndex = -1; DateTimeStruct m_oDatetime; PointStruct m_oAnchor; }; @@ -103,70 +81,11 @@ class CRecordComment10Container : public CUnknownRecord { public: - CRecordComment10Container() : - m_pCommentAuthorAtom(nullptr), - m_pCommentTextAtom(nullptr), - m_pCommentAuthorInitialsAtom(nullptr), + CRecordComment10Container(); - m_haveAuthorAtom(false), - m_haveTextAtom(false), - m_haveAuthorInitialAtom(false) - {} + ~CRecordComment10Container(); - ~CRecordComment10Container() - { - RELEASEOBJECT(m_pCommentAuthorAtom) - RELEASEOBJECT(m_pCommentTextAtom) - RELEASEOBJECT(m_pCommentAuthorInitialsAtom) - } - - void ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) override - { - m_oHeader = oHeader; - - LONG lPos(0); StreamUtils::StreamPosition(lPos, pStream); - - _UINT32 lCurLen(0); - SRecordHeader ReadHeader; - - while (lCurLen < m_oHeader.RecLen) { - if ( ReadHeader.ReadFromStream(pStream) == false ) - { - break; - } - - lCurLen += 8 + ReadHeader.RecLen; - - if (ReadHeader.RecType == RT_CString) { - switch (ReadHeader.RecInstance) { - case 0: - m_pCommentAuthorAtom = new CRecordComment10AuthorAtom(); - m_pCommentAuthorAtom->ReadFromStream(ReadHeader, pStream); - m_haveAuthorAtom = true; - break; - case 1: - m_pCommentTextAtom = new CRecordComment10TextAtom(); - m_pCommentTextAtom->ReadFromStream(ReadHeader, pStream); - m_haveTextAtom = true; - break; - - case 2: - m_pCommentAuthorInitialsAtom = new CRecordComment10AuthorInitialAtom(); - m_pCommentAuthorInitialsAtom->ReadFromStream(ReadHeader, pStream); - m_haveAuthorInitialAtom = true; - break; - default: - break; - } - - } else - { - m_oCommentAtom.ReadFromStream(ReadHeader, pStream); - } - } - - StreamUtils::StreamSeek(lPos + m_oHeader.RecLen, pStream); - } + void ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) override; public: CRecordComment10AuthorAtom* m_pCommentAuthorAtom; // OPTIONAL diff --git a/MsBinaryFile/PptFile/Records/CurrentUserAtom.cpp b/MsBinaryFile/PptFile/Records/CurrentUserAtom.cpp new file mode 100644 index 0000000000..014b179ef3 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/CurrentUserAtom.cpp @@ -0,0 +1,56 @@ +#include "CurrentUserAtom.h" + + +CRecordCurrentUserAtom::CRecordCurrentUserAtom() : m_nToken(0) +{ + m_nSize = m_nRelVersion = m_nToken = m_nOffsetToCurEdit = 0; + m_nLenUserName = m_nDocFileVersion = 0; + m_nMinorVersion = m_nMajorVersion = 0; + +} + +CRecordCurrentUserAtom::~CRecordCurrentUserAtom() +{ + +} + +void CRecordCurrentUserAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + m_nSize = StreamUtils::ReadDWORD(pStream); + + long sz = (long)(pStream->size() - pStream->tell()); + + if ((long)m_nSize > sz ) + { + m_nSize = sz ; + } + + if (m_nSize < 16) return; + + m_nToken = StreamUtils::ReadDWORD(pStream); + + m_nOffsetToCurEdit = StreamUtils::ReadDWORD(pStream); + + m_nLenUserName = StreamUtils::ReadWORD(pStream); + + m_nDocFileVersion = StreamUtils::ReadWORD(pStream); + + m_nMajorVersion = StreamUtils::ReadBYTE(pStream); + m_nMinorVersion = StreamUtils::ReadBYTE(pStream); + + StreamUtils::StreamSkip(2, pStream); + + m_strANSIUserName = StreamUtils::ReadStringA(pStream, m_nLenUserName); + + m_nRelVersion = StreamUtils::ReadDWORD(pStream); + + m_strUNICODEUserName = StreamUtils::ReadStringW(pStream, m_nLenUserName ); + +} + +bool CRecordCurrentUserAtom::IsSupported() const +{ + return (NO_ENCRYPT == m_nToken); +} diff --git a/MsBinaryFile/PptFile/Records/CurrentUserAtom.h b/MsBinaryFile/PptFile/Records/CurrentUserAtom.h index 4f5158b304..b25fcc0d81 100644 --- a/MsBinaryFile/PptFile/Records/CurrentUserAtom.h +++ b/MsBinaryFile/PptFile/Records/CurrentUserAtom.h @@ -55,56 +55,11 @@ public: _UINT32 m_nRelVersion; // 0x00000008 or 0x00000009 - CRecordCurrentUserAtom() : m_nToken(0) - { - m_nSize = m_nRelVersion = m_nToken = m_nOffsetToCurEdit = 0; - m_nLenUserName = m_nDocFileVersion = 0; - m_nMinorVersion = m_nMajorVersion = 0; + CRecordCurrentUserAtom(); - } + ~CRecordCurrentUserAtom(); - ~CRecordCurrentUserAtom() - { - } + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream * pStream) override; - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream * pStream) - { - m_oHeader = oHeader; - - m_nSize = StreamUtils::ReadDWORD(pStream); - - long sz = (long)(pStream->size() - pStream->tell()); - - if ((long)m_nSize > sz ) - { - m_nSize = sz ; - } - - if (m_nSize < 16) return; - - m_nToken = StreamUtils::ReadDWORD(pStream); - - m_nOffsetToCurEdit = StreamUtils::ReadDWORD(pStream); - - m_nLenUserName = StreamUtils::ReadWORD(pStream); - - m_nDocFileVersion = StreamUtils::ReadWORD(pStream); - - m_nMajorVersion = StreamUtils::ReadBYTE(pStream); - m_nMinorVersion = StreamUtils::ReadBYTE(pStream); - - StreamUtils::StreamSkip(2, pStream); - - m_strANSIUserName = StreamUtils::ReadStringA(pStream, m_nLenUserName); - - m_nRelVersion = StreamUtils::ReadDWORD(pStream); - - m_strUNICODEUserName = StreamUtils::ReadStringW(pStream, m_nLenUserName ); - - } - - bool IsSupported() - { - return (NO_ENCRYPT == m_nToken); - } + bool IsSupported() const; }; diff --git a/MsBinaryFile/PptFile/Records/DocInfoListContainer.cpp b/MsBinaryFile/PptFile/Records/DocInfoListContainer.cpp new file mode 100644 index 0000000000..8ab307ba7f --- /dev/null +++ b/MsBinaryFile/PptFile/Records/DocInfoListContainer.cpp @@ -0,0 +1,98 @@ +#include "DocInfoListContainer.h" + + +void DocInfoListSubContainerOrAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + switch (oHeader.RecType) + { + case RT_ProgTags: + { + m_record.reset(new CRecordDocProgTagsContainer); + m_record->ReadFromStream(oHeader, pStream); + break; + } + case RT_VbaInfo: + { + m_record.reset(new CRecordVBAInfoContainer); + m_record->ReadFromStream(oHeader, pStream); + break; + } +// case RT_OutlineViewInfo: +// { + +// } + default: + StreamUtils::StreamSkip(oHeader.RecLen, pStream); + break; + } +} + +CRecordDocInfoListContainer::CRecordDocInfoListContainer() +{ + +} + +CRecordDocInfoListContainer::~CRecordDocInfoListContainer() +{ + for (auto child : m_rgChildRec) + { + RELEASEOBJECT(child) + } +} + +void CRecordDocInfoListContainer::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + LONG lPos; StreamUtils::StreamPosition(lPos, pStream); + LONG lCurLen = 0; + SRecordHeader ReadHeader; + + while (lCurLen < (LONG)m_oHeader.RecLen) + { + + if (!ReadHeader.ReadFromStream(pStream)) + { + break; + } + + + lCurLen += 8 + ReadHeader.RecLen; + + auto pRec = new DocInfoListSubContainerOrAtom; + pRec->ReadFromStream(ReadHeader, pStream); + m_rgChildRec.push_back(pRec); + } + StreamUtils::StreamSeek(lPos + m_oHeader.RecLen, pStream); +} + +IRecord *CRecordDocInfoListContainer::getDocBinaryTagExtension(const std::wstring &extVersion) +{ + for (auto* pChild : m_rgChildRec) + { + if(pChild == nullptr || pChild->m_record.IsInit() == false) + continue; + + auto* pDocProgTagsCont = dynamic_cast(pChild->m_record.GetPointer()); + if (pDocProgTagsCont == nullptr) + continue; + + return pDocProgTagsCont->getDocBinaryTagExtension(extVersion); + } + return nullptr; +} + +CRecordVBAInfoAtom *CRecordDocInfoListContainer::getVBAInfoAtom() const +{ + for (const auto* pChild : m_rgChildRec) + { + if (!pChild || !pChild->m_record.IsInit()) + continue; + IRecord* pRecord = pChild->m_record.GetPointer(); + auto* pVBA = dynamic_cast(pRecord); + if (pVBA) + return static_cast(pVBA->m_arRecords[0]); + } + + return nullptr; +} diff --git a/MsBinaryFile/PptFile/Records/DocInfoListContainer.h b/MsBinaryFile/PptFile/Records/DocInfoListContainer.h index d4047d1d77..1d30785d44 100644 --- a/MsBinaryFile/PptFile/Records/DocInfoListContainer.h +++ b/MsBinaryFile/PptFile/Records/DocInfoListContainer.h @@ -41,31 +41,7 @@ class DocInfoListSubContainerOrAtom public: nullable m_record; - void ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) - { - switch (oHeader.RecType) - { - case RT_ProgTags: - { - m_record.reset(new CRecordDocProgTagsContainer); - m_record->ReadFromStream(oHeader, pStream); - break; - } - case RT_VbaInfo: - { - m_record.reset(new CRecordVBAInfoContainer); - m_record->ReadFromStream(oHeader, pStream); - break; - } -// case RT_OutlineViewInfo: -// { - -// } - default: - StreamUtils::StreamSkip(oHeader.RecLen, pStream); - break; - } - } + void ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream); }; class CRecordDocInfoListContainer : public CUnknownRecord @@ -74,74 +50,13 @@ public: std::vector m_rgChildRec; public: - CRecordDocInfoListContainer() - { + CRecordDocInfoListContainer(); + virtual ~CRecordDocInfoListContainer() override; - } + virtual void ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) override; - virtual ~CRecordDocInfoListContainer() - { - for (auto child : m_rgChildRec) - { - RELEASEOBJECT(child) - } - } + IRecord* getDocBinaryTagExtension(const std::wstring& extVersion); - virtual void ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) - { - m_oHeader = oHeader; - - LONG lPos; StreamUtils::StreamPosition(lPos, pStream); - LONG lCurLen = 0; - SRecordHeader ReadHeader; - - while (lCurLen < (LONG)m_oHeader.RecLen) - { - - if (!ReadHeader.ReadFromStream(pStream)) - { - break; - } - - - lCurLen += 8 + ReadHeader.RecLen; - - auto pRec = new DocInfoListSubContainerOrAtom; - pRec->ReadFromStream(ReadHeader, pStream); - m_rgChildRec.push_back(pRec); - } - StreamUtils::StreamSeek(lPos + m_oHeader.RecLen, pStream); - } - - IRecord* getDocBinaryTagExtension(const std::wstring& extVersion) - { - for (auto* pChild : m_rgChildRec) - { - if(pChild == nullptr || pChild->m_record.IsInit() == false) - continue; - - auto* pDocProgTagsCont = dynamic_cast(pChild->m_record.GetPointer()); - if (pDocProgTagsCont == nullptr) - continue; - - return pDocProgTagsCont->getDocBinaryTagExtension(extVersion); - } - return nullptr; - } - - CRecordVBAInfoAtom* getVBAInfoAtom()const - { - for (const auto* pChild : m_rgChildRec) - { - if (!pChild || !pChild->m_record.IsInit()) - continue; - IRecord* pRecord = pChild->m_record.GetPointer(); - auto* pVBA = dynamic_cast(pRecord); - if (pVBA) - return static_cast(pVBA->m_arRecords[0]); - } - - return nullptr; - } + CRecordVBAInfoAtom* getVBAInfoAtom()const; }; } diff --git a/MsBinaryFile/PptFile/Records/DocProgTagsContainer.cpp b/MsBinaryFile/PptFile/Records/DocProgTagsContainer.cpp new file mode 100644 index 0000000000..b2718ab7a5 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/DocProgTagsContainer.cpp @@ -0,0 +1,202 @@ +#include "DocProgTagsContainer.h" + + +CRecordPP9DocBinaryTagExtension::~CRecordPP9DocBinaryTagExtension() +{ + for (auto* pEl : m_rgTextMasterStyleAtom) + { + RELEASEOBJECT(pEl) + } +} + +void CRecordPP9DocBinaryTagExtension::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + LONG lPos = 0; + StreamUtils::StreamPosition ( lPos, pStream ); + + UINT lCurLen = 0; + + SRecordHeader ReadHeader; + + while ( lCurLen < m_oHeader.RecLen ) + { + if ( ReadHeader.ReadFromStream(pStream) == false) + break; + + lCurLen += 8 + ReadHeader.RecLen; + switch (ReadHeader.RecType) + { + case RT_TextMasterStyle9Atom: + { + auto pStyle = new CRecordTextMasterStyle9Atom; + pStyle->ReadFromStream(ReadHeader, pStream); + m_rgTextMasterStyleAtom.push_back(pStyle); + break; + } + case RT_TextDefaults9Atom: + { + m_textDefaultsAtom = new CRecordTextDefaults9Atom; + m_textDefaultsAtom->ReadFromStream(ReadHeader, pStream); + break; + } + case RT_OutlineTextProps9: + { + m_outlineTextPropsContainer = new CRecordOutlineTextProps9Container; + m_outlineTextPropsContainer->ReadFromStream(ReadHeader, pStream); + break; + } + case RT_BlipCollection9: + { + m_blipCollectionContainer = new CRecordBlipCollection9Container; + m_blipCollectionContainer->ReadFromStream(ReadHeader, pStream); + break; + } + default: + IRecord* pRecord = CreateByType(ReadHeader); + pRecord->ReadFromStream(ReadHeader, pStream); + + m_arRecords.push_back(pRecord); + break; + } + + } + + StreamUtils::StreamSeek ( lPos + m_oHeader.RecLen, pStream ); +} + +void CRecordPP10DocBinaryTagExtension::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + LONG lPos = 0; + StreamUtils::StreamPosition ( lPos, pStream ); + + StreamUtils::StreamSeek ( lPos + m_oHeader.RecLen, pStream ); +} + +void CRecordPP11DocBinaryTagExtension::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + LONG lPos = 0; + StreamUtils::StreamPosition ( lPos, pStream ); + + StreamUtils::StreamSeek ( lPos + m_oHeader.RecLen, pStream ); +} + +void CRecordPP12DocBinaryTagExtension::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + LONG lPos = 0; + StreamUtils::StreamPosition ( lPos, pStream ); + + StreamUtils::StreamSeek ( lPos + m_oHeader.RecLen, pStream ); +} + +CRecordDocProgBinaryTagSubContainerOrAtom::CRecordDocProgBinaryTagSubContainerOrAtom() : + m_pTagName(nullptr), m_pTagContainer(nullptr) +{} + +CRecordDocProgBinaryTagSubContainerOrAtom::~CRecordDocProgBinaryTagSubContainerOrAtom() +{ + RELEASEOBJECT(m_pTagName); + RELEASEOBJECT(m_pTagContainer); +} + +void CRecordDocProgBinaryTagSubContainerOrAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + LONG lPos = 0; StreamUtils::StreamPosition(lPos, pStream); + + SRecordHeader ReadHeader; + ReadHeader.ReadFromStream(pStream); + + if (m_oHeader.RecType == RT_ProgBinaryTag) + { + m_pTagName = new CRecordCString(); + m_pTagName->ReadFromStream(ReadHeader, pStream); + + SRecordHeader childHeader; + if (!childHeader.ReadFromStream(pStream)) + return; + + if (m_pTagName->m_strText == ___PPT9) { + m_pTagContainer = new CRecordPP9DocBinaryTagExtension(); + dynamic_cast + (m_pTagContainer)->ReadFromStream(childHeader, pStream); + } else if (m_pTagName->m_strText == ___PPT10) { + m_pTagContainer = new CRecordPP10DocBinaryTagExtension(); + dynamic_cast + (m_pTagContainer)->ReadFromStream(childHeader, pStream); + } else if (m_pTagName->m_strText == ___PPT11) { + m_pTagContainer = new CRecordPP11DocBinaryTagExtension(); + dynamic_cast + (m_pTagContainer)->ReadFromStream(childHeader, pStream); + } else if (m_pTagName->m_strText == ___PPT12) { + m_pTagContainer = new CRecordPP12DocBinaryTagExtension(); + dynamic_cast + (m_pTagContainer)->ReadFromStream(childHeader, pStream); + } + + } else if (m_oHeader.RecType == RT_ProgStringTag) + { + m_pTagContainer = new CRecordProgStringTagContainer(); + dynamic_cast + (m_pTagContainer)->ReadFromStream(ReadHeader, pStream); + } + LONG lSeek = lPos + m_oHeader.RecLen; + StreamUtils::StreamSeek(lSeek, pStream); +} + +CRecordDocProgTagsContainer::CRecordDocProgTagsContainer() +{ + +} + +CRecordDocProgTagsContainer::~CRecordDocProgTagsContainer() +{ + for (auto pEl : m_arrRgChildRec) + RELEASEOBJECT(pEl) +} + +void CRecordDocProgTagsContainer::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + LONG lPos = 0; + StreamUtils::StreamPosition ( lPos, pStream ); + + LONG lCurLen(0); + SRecordHeader ReadHeader; + + while (lCurLen < (LONG)m_oHeader.RecLen) + { + if ( ReadHeader.ReadFromStream(pStream) == false) + break; + lCurLen += 8 + ReadHeader.RecLen; + CRecordDocProgBinaryTagSubContainerOrAtom* pRecord = + new CRecordDocProgBinaryTagSubContainerOrAtom(); + pRecord->ReadFromStream(ReadHeader, pStream); + m_arrRgChildRec.push_back(pRecord); + } + + StreamUtils::StreamSeek(lPos + m_oHeader.RecLen, pStream); +} + +CRecordPP9DocBinaryTagExtension *CRecordDocProgTagsContainer::getPP9DocBinaryTagExtension() +{ + for (auto* rec : m_arrRgChildRec) + if (rec->m_pTagName->m_strText == ___PPT9) + return (CRecordPP9DocBinaryTagExtension*)rec->m_pTagContainer; + + return nullptr; +} + +IRecord *CRecordDocProgTagsContainer::getDocBinaryTagExtension(const std::wstring &extVersion) +{ + for (auto* rec : m_arrRgChildRec) + if (rec->m_pTagName != nullptr && rec->m_pTagName->m_strText == extVersion) + return rec->m_pTagContainer; + + return nullptr; +} diff --git a/MsBinaryFile/PptFile/Records/DocProgTagsContainer.h b/MsBinaryFile/PptFile/Records/DocProgTagsContainer.h index f663f74753..4688741005 100644 --- a/MsBinaryFile/PptFile/Records/DocProgTagsContainer.h +++ b/MsBinaryFile/PptFile/Records/DocProgTagsContainer.h @@ -55,211 +55,40 @@ public: nullable m_textDefaultsAtom; nullable m_outlineTextPropsContainer; nullable m_blipCollectionContainer; - // TODO - CRecordPP9DocBinaryTagExtension() - { - } - ~CRecordPP9DocBinaryTagExtension() - { - for (auto pEl : m_rgTextMasterStyleAtom) - { - RELEASEOBJECT(pEl) - } - } - - virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ) - { - m_oHeader = oHeader; - LONG lPos = 0; - StreamUtils::StreamPosition ( lPos, pStream ); - - UINT lCurLen = 0; - - SRecordHeader ReadHeader; - - while ( lCurLen < m_oHeader.RecLen ) - { - if ( ReadHeader.ReadFromStream(pStream) == false) - break; - - lCurLen += 8 + ReadHeader.RecLen; - switch (ReadHeader.RecType) - { - case RT_TextMasterStyle9Atom: - { - auto pStyle = new CRecordTextMasterStyle9Atom; - pStyle->ReadFromStream(ReadHeader, pStream); - m_rgTextMasterStyleAtom.push_back(pStyle); - break; - } - case RT_TextDefaults9Atom: - { - m_textDefaultsAtom = new CRecordTextDefaults9Atom; - m_textDefaultsAtom->ReadFromStream(ReadHeader, pStream); - break; - } - case RT_OutlineTextProps9: - { - m_outlineTextPropsContainer = new CRecordOutlineTextProps9Container; - m_outlineTextPropsContainer->ReadFromStream(ReadHeader, pStream); - break; - } - case RT_BlipCollection9: - { - m_blipCollectionContainer = new CRecordBlipCollection9Container; - m_blipCollectionContainer->ReadFromStream(ReadHeader, pStream); - break; - } - default: - IRecord* pRecord = CreateByType(ReadHeader); - pRecord->ReadFromStream(ReadHeader, pStream); - - m_arRecords.push_back(pRecord); - break; - } - - } - - StreamUtils::StreamSeek ( lPos + m_oHeader.RecLen, pStream ); - } + ~CRecordPP9DocBinaryTagExtension(); + virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ) override; }; class CRecordPP10DocBinaryTagExtension : public CUnknownRecord { public: - - CRecordPP10DocBinaryTagExtension () - { - } - - virtual ~CRecordPP10DocBinaryTagExtension () - { - - } - - virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ) - { - m_oHeader = oHeader; - - LONG lPos = 0; - StreamUtils::StreamPosition ( lPos, pStream ); - - StreamUtils::StreamSeek ( lPos + m_oHeader.RecLen, pStream ); - } - -public: - + virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream )override; }; class CRecordPP11DocBinaryTagExtension : public CUnknownRecord { public: - CRecordPP11DocBinaryTagExtension() - { - - } - - ~CRecordPP11DocBinaryTagExtension() - { - - } - - virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ) - { - m_oHeader = oHeader; - LONG lPos = 0; - StreamUtils::StreamPosition ( lPos, pStream ); - - StreamUtils::StreamSeek ( lPos + m_oHeader.RecLen, pStream ); - } - -public: - + virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ); }; class CRecordPP12DocBinaryTagExtension : public CUnknownRecord { public: - - CRecordPP12DocBinaryTagExtension() - { - - } - - ~CRecordPP12DocBinaryTagExtension() - { - } - - virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ) - { - m_oHeader = oHeader; - LONG lPos = 0; - StreamUtils::StreamPosition ( lPos, pStream ); - - StreamUtils::StreamSeek ( lPos + m_oHeader.RecLen, pStream ); - } + virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ) override; }; class CRecordDocProgBinaryTagSubContainerOrAtom : public CUnknownRecord { public: - CRecordDocProgBinaryTagSubContainerOrAtom() : - m_pTagName(nullptr), m_pTagContainer(nullptr) - {} - ~CRecordDocProgBinaryTagSubContainerOrAtom() - { - RELEASEOBJECT(m_pTagName); - RELEASEOBJECT(m_pTagContainer); - } - void ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) override - { - m_oHeader = oHeader; - LONG lPos = 0; StreamUtils::StreamPosition(lPos, pStream); + CRecordDocProgBinaryTagSubContainerOrAtom(); + ~CRecordDocProgBinaryTagSubContainerOrAtom(); - SRecordHeader ReadHeader; - ReadHeader.ReadFromStream(pStream); - - if (m_oHeader.RecType == RT_ProgBinaryTag) - { - m_pTagName = new CRecordCString(); - m_pTagName->ReadFromStream(ReadHeader, pStream); - - SRecordHeader childHeader; - if (!childHeader.ReadFromStream(pStream)) - return; - - if (m_pTagName->m_strText == ___PPT9) { - m_pTagContainer = new CRecordPP9DocBinaryTagExtension(); - dynamic_cast - (m_pTagContainer)->ReadFromStream(childHeader, pStream); - } else if (m_pTagName->m_strText == ___PPT10) { - m_pTagContainer = new CRecordPP10DocBinaryTagExtension(); - dynamic_cast - (m_pTagContainer)->ReadFromStream(childHeader, pStream); - } else if (m_pTagName->m_strText == ___PPT11) { - m_pTagContainer = new CRecordPP11DocBinaryTagExtension(); - dynamic_cast - (m_pTagContainer)->ReadFromStream(childHeader, pStream); - } else if (m_pTagName->m_strText == ___PPT12) { - m_pTagContainer = new CRecordPP12DocBinaryTagExtension(); - dynamic_cast - (m_pTagContainer)->ReadFromStream(childHeader, pStream); - } - - } else if (m_oHeader.RecType == RT_ProgStringTag) - { - m_pTagContainer = new CRecordProgStringTagContainer(); - dynamic_cast - (m_pTagContainer)->ReadFromStream(ReadHeader, pStream); - } - LONG lSeek = lPos + m_oHeader.RecLen; - StreamUtils::StreamSeek(lSeek, pStream); - } + void ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) override; public: CRecordCString* m_pTagName; // OPTIONAL @@ -270,59 +99,14 @@ class CRecordDocProgTagsContainer : public CUnknownRecord { public: - CRecordDocProgTagsContainer () - { - - } - - ~CRecordDocProgTagsContainer() - { - for (auto pEl : m_arrRgChildRec) - RELEASEOBJECT(pEl) - } + CRecordDocProgTagsContainer (); + ~CRecordDocProgTagsContainer(); - virtual void ReadFromStream (SRecordHeader & oHeader, POLE::Stream* pStream) - { - m_oHeader = oHeader; + virtual void ReadFromStream (SRecordHeader & oHeader, POLE::Stream* pStream)override; - LONG lPos = 0; - StreamUtils::StreamPosition ( lPos, pStream ); - - LONG lCurLen(0); - SRecordHeader ReadHeader; - - while (lCurLen < (LONG)m_oHeader.RecLen) - { - if ( ReadHeader.ReadFromStream(pStream) == false) - break; - lCurLen += 8 + ReadHeader.RecLen; - CRecordDocProgBinaryTagSubContainerOrAtom* pRecord = - new CRecordDocProgBinaryTagSubContainerOrAtom(); - pRecord->ReadFromStream(ReadHeader, pStream); - m_arrRgChildRec.push_back(pRecord); - } - - StreamUtils::StreamSeek(lPos + m_oHeader.RecLen, pStream); - } - - CRecordPP9DocBinaryTagExtension* getPP9DocBinaryTagExtension() - { - for (auto* rec : m_arrRgChildRec) - if (rec->m_pTagName->m_strText == ___PPT9) - return (CRecordPP9DocBinaryTagExtension*)rec->m_pTagContainer; - - return nullptr; - } - - IRecord* getDocBinaryTagExtension(const std::wstring& extVersion) - { - for (auto* rec : m_arrRgChildRec) - if (rec->m_pTagName != nullptr && rec->m_pTagName->m_strText == extVersion) - return rec->m_pTagContainer; - - return nullptr; - } + CRecordPP9DocBinaryTagExtension* getPP9DocBinaryTagExtension(); + IRecord* getDocBinaryTagExtension(const std::wstring& extVersion); public: std::vector m_arrRgChildRec; diff --git a/MsBinaryFile/PptFile/Records/DocRoutingSlipAtom.cpp b/MsBinaryFile/PptFile/Records/DocRoutingSlipAtom.cpp new file mode 100644 index 0000000000..8d0eabbc40 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/DocRoutingSlipAtom.cpp @@ -0,0 +1,7 @@ +#include "DocRoutingSlipAtom.h" + + +void CRecordDocRoutingSlipAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + return CUnknownRecord::ReadFromStream(oHeader, pStream); +} diff --git a/MsBinaryFile/PptFile/Records/DocRoutingSlipAtom.h b/MsBinaryFile/PptFile/Records/DocRoutingSlipAtom.h index d007407170..8bf234c032 100644 --- a/MsBinaryFile/PptFile/Records/DocRoutingSlipAtom.h +++ b/MsBinaryFile/PptFile/Records/DocRoutingSlipAtom.h @@ -51,18 +51,8 @@ public: SDocRoutingSlipAtom m_oRgRecipientRoutingSlipStrings; SDocRoutingSlipAtom m_oSubjectString; SDocRoutingSlipAtom m_oMessageString; - - CRecordDocRoutingSlipAtom() - { - } - ~CRecordDocRoutingSlipAtom() - { - } - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - return CUnknownRecord::ReadFromStream(oHeader, pStream); - } + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) override; }; diff --git a/MsBinaryFile/PptFile/Records/DocumentAtom.cpp b/MsBinaryFile/PptFile/Records/DocumentAtom.cpp new file mode 100644 index 0000000000..2825940cba --- /dev/null +++ b/MsBinaryFile/PptFile/Records/DocumentAtom.cpp @@ -0,0 +1,27 @@ +#include "DocumentAtom.h" + + +void CRecordDocumentAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + m_oSlideSize.X = StreamUtils::ReadLONG(pStream); + m_oSlideSize.Y = StreamUtils::ReadLONG(pStream); + + m_oNotesSize.X = StreamUtils::ReadLONG(pStream); + m_oNotesSize.Y = StreamUtils::ReadLONG(pStream); + + m_oServerZoom.Number = StreamUtils::ReadLONG(pStream); + m_oServerZoom.Denom = StreamUtils::ReadLONG(pStream); + + m_nNotesMasterPersistIDRef = (UINT)StreamUtils::ReadDWORD(pStream); + m_nHandoutMasterPersistIDRef = (UINT)StreamUtils::ReadDWORD(pStream); + + m_nFirstSlideNum = StreamUtils::ReadWORD(pStream); + m_nSlideSizeType = StreamUtils::ReadWORD(pStream); + + m_bSaveWithFonts = StreamUtils::ReadBYTE(pStream); + m_bOmitTitlePlace = StreamUtils::ReadBYTE(pStream); + m_bRightToLeft = StreamUtils::ReadBYTE(pStream); + m_bShowComments = StreamUtils::ReadBYTE(pStream); +} diff --git a/MsBinaryFile/PptFile/Records/DocumentAtom.h b/MsBinaryFile/PptFile/Records/DocumentAtom.h index 8d3fd87462..a62e8838af 100644 --- a/MsBinaryFile/PptFile/Records/DocumentAtom.h +++ b/MsBinaryFile/PptFile/Records/DocumentAtom.h @@ -53,37 +53,6 @@ public: BOOL1 m_bShowComments; - CRecordDocumentAtom() - { - } - ~CRecordDocumentAtom() - { - } - - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - m_oHeader = oHeader; - - m_oSlideSize.X = StreamUtils::ReadLONG(pStream); - m_oSlideSize.Y = StreamUtils::ReadLONG(pStream); - - m_oNotesSize.X = StreamUtils::ReadLONG(pStream); - m_oNotesSize.Y = StreamUtils::ReadLONG(pStream); - - m_oServerZoom.Number = StreamUtils::ReadLONG(pStream); - m_oServerZoom.Denom = StreamUtils::ReadLONG(pStream); - - m_nNotesMasterPersistIDRef = (UINT)StreamUtils::ReadDWORD(pStream); - m_nHandoutMasterPersistIDRef = (UINT)StreamUtils::ReadDWORD(pStream); - - m_nFirstSlideNum = StreamUtils::ReadWORD(pStream); - m_nSlideSizeType = StreamUtils::ReadWORD(pStream); - - m_bSaveWithFonts = StreamUtils::ReadBYTE(pStream); - m_bOmitTitlePlace = StreamUtils::ReadBYTE(pStream); - m_bRightToLeft = StreamUtils::ReadBYTE(pStream); - m_bShowComments = StreamUtils::ReadBYTE(pStream); - } - -}; \ No newline at end of file + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) override; +}; diff --git a/MsBinaryFile/PptFile/Records/DocumentRecords.cpp b/MsBinaryFile/PptFile/Records/DocumentRecords.cpp new file mode 100644 index 0000000000..ff8f5e9e09 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/DocumentRecords.cpp @@ -0,0 +1,69 @@ +#include "DocumentRecords.h" + + +CRecordDocument::CRecordDocument() +{ + +} + +CRecordDocument::~CRecordDocument() +{ + m_arMasterPersists.clear(); + m_arNotePersists.clear(); + m_arSlidePersists.clear(); +} + +void CRecordDocument::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + m_arMasterPersists.clear(); + m_arNotePersists.clear(); + m_arSlidePersists.clear(); + + m_arRecords.clear(); + + CRecordsContainer::ReadFromStream(oHeader, pStream); + + std::vector oArraySlideWithText; + this->GetRecordsByType(&oArraySlideWithText, true, false); + + for (size_t nIndexList = 0; nIndexList < oArraySlideWithText.size(); ++nIndexList) + { + CRecordSlideListWithText* pAtom = oArraySlideWithText[nIndexList]; + std::vector* pArray = NULL; + + switch (pAtom->m_Type) + { + case CRecordSlideListWithText::CollectionOfMasterSlides: + { + pArray = &m_arMasterPersists; + }break; + case CRecordSlideListWithText::CollectionOfNotesSlides: + { + pArray = &m_arNotePersists; + }break; + case CRecordSlideListWithText::CollectionOfSlides: + { + pArray = &m_arSlidePersists; + }break; + default: + { + // этого не может быть... + continue; + } + }; + + size_t nCountItems = pAtom->m_arSlides.size(); + for (size_t index = 0; index < nCountItems; ++index) + { + SSlidePersist oPersist; + oPersist.m_nPsrRef = pAtom->m_arSlides[index]->m_nPsrRef; + oPersist.m_nSlideID = pAtom->m_arSlides[index]->m_nSlideID; + + oPersist.m_arTextAttrs.insert(oPersist.m_arTextAttrs.end(), pAtom->m_arTextPlaceHolders[index].begin(),pAtom->m_arTextPlaceHolders[index].end()); + + pArray->push_back(oPersist); + } + } +} diff --git a/MsBinaryFile/PptFile/Records/DocumentRecords.h b/MsBinaryFile/PptFile/Records/DocumentRecords.h index 18c5e6501d..ab28ab0f83 100644 --- a/MsBinaryFile/PptFile/Records/DocumentRecords.h +++ b/MsBinaryFile/PptFile/Records/DocumentRecords.h @@ -39,69 +39,9 @@ public: std::vector m_arNotePersists; std::vector m_arSlidePersists; - CRecordDocument() - { - } - ~CRecordDocument() - { - m_arMasterPersists.clear(); - m_arNotePersists.clear(); - m_arSlidePersists.clear(); - } + CRecordDocument(); + ~CRecordDocument(); - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - m_oHeader = oHeader; - - m_arMasterPersists.clear(); - m_arNotePersists.clear(); - m_arSlidePersists.clear(); - - m_arRecords.clear(); - - CRecordsContainer::ReadFromStream(oHeader, pStream); - - std::vector oArraySlideWithText; - this->GetRecordsByType(&oArraySlideWithText, true, false); - - for (size_t nIndexList = 0; nIndexList < oArraySlideWithText.size(); ++nIndexList) - { - CRecordSlideListWithText* pAtom = oArraySlideWithText[nIndexList]; - std::vector* pArray = NULL; - - switch (pAtom->m_Type) - { - case CRecordSlideListWithText::CollectionOfMasterSlides: - { - pArray = &m_arMasterPersists; - }break; - case CRecordSlideListWithText::CollectionOfNotesSlides: - { - pArray = &m_arNotePersists; - }break; - case CRecordSlideListWithText::CollectionOfSlides: - { - pArray = &m_arSlidePersists; - }break; - default: - { - // этого не может быть... - continue; - } - }; - - size_t nCountItems = pAtom->m_arSlides.size(); - for (size_t index = 0; index < nCountItems; ++index) - { - SSlidePersist oPersist; - oPersist.m_nPsrRef = pAtom->m_arSlides[index]->m_nPsrRef; - oPersist.m_nSlideID = pAtom->m_arSlides[index]->m_nSlideID; - - oPersist.m_arTextAttrs.insert(oPersist.m_arTextAttrs.end(), pAtom->m_arTextPlaceHolders[index].begin(),pAtom->m_arTextPlaceHolders[index].end()); - - pArray->push_back(oPersist); - } - } - } + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) override; }; diff --git a/MsBinaryFile/PptFile/Records/DocumentTextInfo.cpp b/MsBinaryFile/PptFile/Records/DocumentTextInfo.cpp new file mode 100644 index 0000000000..2b4201f863 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/DocumentTextInfo.cpp @@ -0,0 +1,12 @@ +#include "DocumentTextInfo.h" + + +void CRecordDocumentTextInfo::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + CRecordsContainer::ReadFromStream(oHeader, pStream); +} + +void CRecordFontCollection::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + CRecordsContainer::ReadFromStream(oHeader, pStream); +} diff --git a/MsBinaryFile/PptFile/Records/DocumentTextInfo.h b/MsBinaryFile/PptFile/Records/DocumentTextInfo.h index d739cf40f2..dec3c42165 100644 --- a/MsBinaryFile/PptFile/Records/DocumentTextInfo.h +++ b/MsBinaryFile/PptFile/Records/DocumentTextInfo.h @@ -35,37 +35,11 @@ class CRecordDocumentTextInfo : public CRecordsContainer { public: - - CRecordDocumentTextInfo() - { - } - - ~CRecordDocumentTextInfo() - { - } - - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - CRecordsContainer::ReadFromStream(oHeader, pStream); - } - + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) override; }; class CRecordFontCollection : public CRecordsContainer { public: - - CRecordFontCollection() - { - } - - ~CRecordFontCollection() - { - } - - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - CRecordsContainer::ReadFromStream(oHeader, pStream); - } - + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) override; }; diff --git a/MsBinaryFile/PptFile/Records/Drawing/ArtBlip.cpp b/MsBinaryFile/PptFile/Records/Drawing/ArtBlip.cpp index aaf1c92a72..afaa7bd89e 100644 --- a/MsBinaryFile/PptFile/Records/Drawing/ArtBlip.cpp +++ b/MsBinaryFile/PptFile/Records/Drawing/ArtBlip.cpp @@ -237,3 +237,18 @@ void CRecordOfficeArtBlip::ReadFromStream(SRecordHeader & oHeader, POLE::Stream* m_sFileName = strFile; } } + +CRecordBitmapBlip::CRecordBitmapBlip() +{ + +} + +CRecordBitmapBlip::~CRecordBitmapBlip() +{ + +} + +void CRecordBitmapBlip::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + return CUnknownRecord::ReadFromStream(oHeader, pStream); +} diff --git a/MsBinaryFile/PptFile/Records/Drawing/ArtBlip.h b/MsBinaryFile/PptFile/Records/Drawing/ArtBlip.h index 3c1a9bdbcb..3720172b83 100644 --- a/MsBinaryFile/PptFile/Records/Drawing/ArtBlip.h +++ b/MsBinaryFile/PptFile/Records/Drawing/ArtBlip.h @@ -65,17 +65,7 @@ public: //BYTE* m_pScan0; - CRecordBitmapBlip() - { - } - - ~CRecordBitmapBlip() - { - } - - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - return CUnknownRecord::ReadFromStream(oHeader, pStream); - } - -}; \ No newline at end of file + CRecordBitmapBlip(); + ~CRecordBitmapBlip(); + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream); +}; diff --git a/MsBinaryFile/PptFile/Records/Drawing/BlipStoreContainer.cpp b/MsBinaryFile/PptFile/Records/Drawing/BlipStoreContainer.cpp new file mode 100644 index 0000000000..618e7fc611 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/Drawing/BlipStoreContainer.cpp @@ -0,0 +1,41 @@ +#include "BlipStoreContainer.h" +#include "BlipStoreEntry.h" + + +CRecordBlipStoreContainer::CRecordBlipStoreContainer() +{ + +} + +CRecordBlipStoreContainer::~CRecordBlipStoreContainer() +{ + +} + +void CRecordBlipStoreContainer::SetUpPicturesInfos(std::vector *pArray) +{ + if (NULL == pArray) + return; + + pArray->clear(); + + std::map<_UINT32, int> image_map; + for (size_t nIndex = 0; nIndex < m_arRecords.size(); ++nIndex) + { + CRecordBlipStoreEntry* pEntry = dynamic_cast(m_arRecords[nIndex]); + if (NULL != pEntry) + { + image_map.insert(std::pair<_UINT32, int>(pEntry->m_nFoDelay, pArray->size())); + + int offset = pEntry->m_nFoDelay; + if (0 == pEntry->m_oHeader.RecInstance) offset = -1; + + if (pEntry->m_oHeader.RecType == 0xf007) + { + //inside here? + } + + pArray->push_back(offset); + } + } +} diff --git a/MsBinaryFile/PptFile/Records/Drawing/BlipStoreContainer.h b/MsBinaryFile/PptFile/Records/Drawing/BlipStoreContainer.h index 82b12cdb77..2cb68e1c35 100644 --- a/MsBinaryFile/PptFile/Records/Drawing/BlipStoreContainer.h +++ b/MsBinaryFile/PptFile/Records/Drawing/BlipStoreContainer.h @@ -31,45 +31,11 @@ */ #pragma once #include "../../Reader/Records.h" -#include "BlipStoreEntry.h" class CRecordBlipStoreContainer : public CRecordsContainer { public: - - CRecordBlipStoreContainer() - { - } - - ~CRecordBlipStoreContainer() - { - } - - void SetUpPicturesInfos(std::vector* pArray) - { - if (NULL == pArray) - return; - - pArray->clear(); - - std::map<_UINT32, int> image_map; - for (size_t nIndex = 0; nIndex < m_arRecords.size(); ++nIndex) - { - CRecordBlipStoreEntry* pEntry = dynamic_cast(m_arRecords[nIndex]); - if (NULL != pEntry) - { - image_map.insert(std::pair<_UINT32, int>(pEntry->m_nFoDelay, pArray->size())); - - int offset = pEntry->m_nFoDelay; - if (0 == pEntry->m_oHeader.RecInstance) offset = -1; - - if (pEntry->m_oHeader.RecType == 0xf007) - { - //inside here? - } - - pArray->push_back(offset); - } - } - } + CRecordBlipStoreContainer(); + ~CRecordBlipStoreContainer(); + void SetUpPicturesInfos(std::vector* pArray); }; diff --git a/MsBinaryFile/PptFile/Records/Drawing/BlipStoreEntry.cpp b/MsBinaryFile/PptFile/Records/Drawing/BlipStoreEntry.cpp new file mode 100644 index 0000000000..9c91d18a9a --- /dev/null +++ b/MsBinaryFile/PptFile/Records/Drawing/BlipStoreEntry.cpp @@ -0,0 +1,34 @@ +#include "BlipStoreEntry.h" + +CRecordBlipStoreEntry::CRecordBlipStoreEntry() +{ + +} + +CRecordBlipStoreEntry::~CRecordBlipStoreEntry() +{ + +} + +void CRecordBlipStoreEntry::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + m_btWin32 = (ODRAW::eBlipType)StreamUtils::ReadBYTE(pStream); + m_btMacOS = (ODRAW::eBlipType)StreamUtils::ReadBYTE(pStream); + + pStream->read(m_pRgbUid, 16); + + m_nTag = StreamUtils::ReadWORD(pStream); + + m_nSize = StreamUtils::ReadDWORD(pStream); + m_nCountRef = StreamUtils::ReadDWORD(pStream); + m_nFoDelay = StreamUtils::ReadDWORD(pStream); + + m_eUsage = (ODRAW::eBlipUsage)StreamUtils::ReadBYTE(pStream); + + m_nLenName = StreamUtils::ReadBYTE(pStream); + + m_nUnused2 = StreamUtils::ReadBYTE(pStream); + m_nUnused3 = StreamUtils::ReadBYTE(pStream); +} diff --git a/MsBinaryFile/PptFile/Records/Drawing/BlipStoreEntry.h b/MsBinaryFile/PptFile/Records/Drawing/BlipStoreEntry.h index e1d976eb31..ced9aa1fab 100644 --- a/MsBinaryFile/PptFile/Records/Drawing/BlipStoreEntry.h +++ b/MsBinaryFile/PptFile/Records/Drawing/BlipStoreEntry.h @@ -50,34 +50,8 @@ public: BYTE m_nUnused2; BYTE m_nUnused3; - CRecordBlipStoreEntry() - { - } + CRecordBlipStoreEntry(); + ~CRecordBlipStoreEntry(); - ~CRecordBlipStoreEntry() - { - } - - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - m_oHeader = oHeader; - - m_btWin32 = (ODRAW::eBlipType)StreamUtils::ReadBYTE(pStream); - m_btMacOS = (ODRAW::eBlipType)StreamUtils::ReadBYTE(pStream); - - pStream->read(m_pRgbUid, 16); - - m_nTag = StreamUtils::ReadWORD(pStream); - - m_nSize = StreamUtils::ReadDWORD(pStream); - m_nCountRef = StreamUtils::ReadDWORD(pStream); - m_nFoDelay = StreamUtils::ReadDWORD(pStream); - - m_eUsage = (ODRAW::eBlipUsage)StreamUtils::ReadBYTE(pStream); - - m_nLenName = StreamUtils::ReadBYTE(pStream); - - m_nUnused2 = StreamUtils::ReadBYTE(pStream); - m_nUnused3 = StreamUtils::ReadBYTE(pStream); - } -}; \ No newline at end of file + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream); +}; diff --git a/MsBinaryFile/PptFile/Records/Drawing/ChildAnchor.cpp b/MsBinaryFile/PptFile/Records/Drawing/ChildAnchor.cpp new file mode 100644 index 0000000000..34d6d618c3 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/Drawing/ChildAnchor.cpp @@ -0,0 +1,21 @@ +#include "ChildAnchor.h" + + +CRecordChildAnchor::CRecordChildAnchor() +{ + +} + +CRecordChildAnchor::~CRecordChildAnchor() +{ + +} + +void CRecordChildAnchor::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + m_oBounds.left = StreamUtils::ReadLONG(pStream); + m_oBounds.top = StreamUtils::ReadLONG(pStream); + m_oBounds.right = StreamUtils::ReadLONG(pStream); + m_oBounds.bottom = StreamUtils::ReadLONG(pStream); +} diff --git a/MsBinaryFile/PptFile/Records/Drawing/ChildAnchor.h b/MsBinaryFile/PptFile/Records/Drawing/ChildAnchor.h index 8b9744a3a6..b2656a1de0 100644 --- a/MsBinaryFile/PptFile/Records/Drawing/ChildAnchor.h +++ b/MsBinaryFile/PptFile/Records/Drawing/ChildAnchor.h @@ -32,6 +32,7 @@ #pragma once #include "../../Reader/Records.h" + class CRecordChildAnchor : public CUnknownRecord { public: @@ -39,20 +40,8 @@ public: public: - CRecordChildAnchor() - { - } + CRecordChildAnchor(); + ~CRecordChildAnchor(); - ~CRecordChildAnchor() - { - } - - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - m_oHeader = oHeader; - m_oBounds.left = StreamUtils::ReadLONG(pStream); - m_oBounds.top = StreamUtils::ReadLONG(pStream); - m_oBounds.right = StreamUtils::ReadLONG(pStream); - m_oBounds.bottom = StreamUtils::ReadLONG(pStream); - } -}; \ No newline at end of file + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream); +}; diff --git a/MsBinaryFile/PptFile/Records/Drawing/ClientAnchor.cpp b/MsBinaryFile/PptFile/Records/Drawing/ClientAnchor.cpp new file mode 100644 index 0000000000..8681dae45c --- /dev/null +++ b/MsBinaryFile/PptFile/Records/Drawing/ClientAnchor.cpp @@ -0,0 +1,32 @@ +#include "ClientAnchor.h" + + +CRecordClientAnchor::CRecordClientAnchor() +{ + +} + +CRecordClientAnchor::~CRecordClientAnchor() +{ + +} + +void CRecordClientAnchor::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + if (m_oHeader.RecLen == 0x00000008) //SSmallRectAtom + { + m_oBounds.Top = StreamUtils::ReadSHORT(pStream); + m_oBounds.Left = StreamUtils::ReadSHORT(pStream); + m_oBounds.Right = StreamUtils::ReadSHORT(pStream); + m_oBounds.Bottom = StreamUtils::ReadSHORT(pStream); + } + if (m_oHeader.RecLen == 0x00000010) //SRectAtom + { + m_oBounds.Top = StreamUtils::ReadLONG(pStream); + m_oBounds.Left = StreamUtils::ReadLONG(pStream); + m_oBounds.Right = StreamUtils::ReadLONG(pStream); + m_oBounds.Bottom = StreamUtils::ReadLONG(pStream); + } +} diff --git a/MsBinaryFile/PptFile/Records/Drawing/ClientAnchor.h b/MsBinaryFile/PptFile/Records/Drawing/ClientAnchor.h index d1fd5f4076..6739c562b2 100644 --- a/MsBinaryFile/PptFile/Records/Drawing/ClientAnchor.h +++ b/MsBinaryFile/PptFile/Records/Drawing/ClientAnchor.h @@ -37,34 +37,7 @@ class CRecordClientAnchor : public CUnknownRecord public: SRectAtom m_oBounds; -public: - - CRecordClientAnchor() - { - } - - ~CRecordClientAnchor() - { - } - - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - m_oHeader = oHeader; - - if (m_oHeader.RecLen == 0x00000008) //SSmallRectAtom - { - m_oBounds.Top = StreamUtils::ReadSHORT(pStream); - m_oBounds.Left = StreamUtils::ReadSHORT(pStream); - m_oBounds.Right = StreamUtils::ReadSHORT(pStream); - m_oBounds.Bottom = StreamUtils::ReadSHORT(pStream); - } - if (m_oHeader.RecLen == 0x00000010) //SRectAtom - { - m_oBounds.Top = StreamUtils::ReadLONG(pStream); - m_oBounds.Left = StreamUtils::ReadLONG(pStream); - m_oBounds.Right = StreamUtils::ReadLONG(pStream); - m_oBounds.Bottom = StreamUtils::ReadLONG(pStream); - } - } - -}; \ No newline at end of file + CRecordClientAnchor(); + ~CRecordClientAnchor(); + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream); +}; diff --git a/MsBinaryFile/PptFile/Records/Drawing/DrawingContainer.cpp b/MsBinaryFile/PptFile/Records/Drawing/DrawingContainer.cpp new file mode 100644 index 0000000000..0f8b642e85 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/Drawing/DrawingContainer.cpp @@ -0,0 +1,17 @@ +#include "DrawingContainer.h" + + +CRecordDrawingContainer::CRecordDrawingContainer() +{ + +} + +CRecordDrawingContainer::~CRecordDrawingContainer() +{ + +} + +void CRecordDrawingContainer::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + CRecordsContainer::ReadFromStream(oHeader, pStream); +} diff --git a/MsBinaryFile/PptFile/Records/Drawing/DrawingContainer.h b/MsBinaryFile/PptFile/Records/Drawing/DrawingContainer.h index 9d357692fa..5c8ccfa78a 100644 --- a/MsBinaryFile/PptFile/Records/Drawing/DrawingContainer.h +++ b/MsBinaryFile/PptFile/Records/Drawing/DrawingContainer.h @@ -32,21 +32,14 @@ #pragma once #include "GroupShapeContainer.h" + class CRecordDrawingContainer : public CRecordsContainer { public: - CRecordDrawingContainer() - { - } + CRecordDrawingContainer(); + ~CRecordDrawingContainer(); - ~CRecordDrawingContainer() - { - } - - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - CRecordsContainer::ReadFromStream(oHeader, pStream); - } + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream); }; diff --git a/MsBinaryFile/PptFile/Records/Drawing/DrawingGroup.cpp b/MsBinaryFile/PptFile/Records/Drawing/DrawingGroup.cpp new file mode 100644 index 0000000000..cfbf168178 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/Drawing/DrawingGroup.cpp @@ -0,0 +1,30 @@ +#include "DrawingGroup.h" + + +CRecordDrawingGroup::CRecordDrawingGroup() : m_arrIDs() +{ + +} + +CRecordDrawingGroup::~CRecordDrawingGroup() +{ + +} + +void CRecordDrawingGroup::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + m_nMaxShapeId = (UINT)StreamUtils::ReadDWORD(pStream); + m_nIdClustersCount = (UINT)StreamUtils::ReadDWORD(pStream) - 1; // Office saves the actual value + 1 + m_nShapesSavedCount = (UINT)StreamUtils::ReadDWORD(pStream); + m_nDrawingsSavedCount = (UINT)StreamUtils::ReadDWORD(pStream); + + m_arrIDs.clear(); + for (UINT nIndex = 0; nIndex < m_nIdClustersCount; ++nIndex) + { + SFileIdCluster elm; + m_arrIDs.push_back(elm); + m_arrIDs[nIndex].ReadFromStream(pStream); + } +} diff --git a/MsBinaryFile/PptFile/Records/Drawing/DrawingGroup.h b/MsBinaryFile/PptFile/Records/Drawing/DrawingGroup.h index 9f0db15cd1..fde2f9a5f3 100644 --- a/MsBinaryFile/PptFile/Records/Drawing/DrawingGroup.h +++ b/MsBinaryFile/PptFile/Records/Drawing/DrawingGroup.h @@ -32,6 +32,7 @@ #pragma once #include "../../Reader/Records.h" + class CRecordDrawingGroup : public CUnknownRecord { UINT m_nMaxShapeId; // Maximum shape ID @@ -42,31 +43,8 @@ class CRecordDrawingGroup : public CUnknownRecord std::vector m_arrIDs; public: - - CRecordDrawingGroup() : m_arrIDs() - { - } + CRecordDrawingGroup(); + ~CRecordDrawingGroup(); - ~CRecordDrawingGroup() - { - } - - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - m_oHeader = oHeader; - - m_nMaxShapeId = (UINT)StreamUtils::ReadDWORD(pStream); - m_nIdClustersCount = (UINT)StreamUtils::ReadDWORD(pStream) - 1; // Office saves the actual value + 1 - m_nShapesSavedCount = (UINT)StreamUtils::ReadDWORD(pStream); - m_nDrawingsSavedCount = (UINT)StreamUtils::ReadDWORD(pStream); - - m_arrIDs.clear(); - for (UINT nIndex = 0; nIndex < m_nIdClustersCount; ++nIndex) - { - SFileIdCluster elm; - m_arrIDs.push_back(elm); - m_arrIDs[nIndex].ReadFromStream(pStream); - } - } - -}; \ No newline at end of file + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream); +}; diff --git a/MsBinaryFile/PptFile/Records/Drawing/DrawingRecord.cpp b/MsBinaryFile/PptFile/Records/Drawing/DrawingRecord.cpp new file mode 100644 index 0000000000..77e0e475c4 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/Drawing/DrawingRecord.cpp @@ -0,0 +1,19 @@ +#include "DrawingRecord.h" + + +CRecordDrawingRecord::CRecordDrawingRecord() +{ + +} + +CRecordDrawingRecord::~CRecordDrawingRecord() +{ + +} + +void CRecordDrawingRecord::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + m_nCountShapes = (UINT)StreamUtils::ReadDWORD(pStream); + m_nPidCur = (UINT)StreamUtils::ReadDWORD(pStream); +} diff --git a/MsBinaryFile/PptFile/Records/Drawing/DrawingRecord.h b/MsBinaryFile/PptFile/Records/Drawing/DrawingRecord.h index 9e9f1dece8..0b1c2af1d8 100644 --- a/MsBinaryFile/PptFile/Records/Drawing/DrawingRecord.h +++ b/MsBinaryFile/PptFile/Records/Drawing/DrawingRecord.h @@ -32,6 +32,7 @@ #pragma once #include "../../Reader/Records.h" + class CRecordDrawingRecord : public CUnknownRecord { public: @@ -40,18 +41,8 @@ public: UINT m_nPidCur; - CRecordDrawingRecord() - { - } + CRecordDrawingRecord(); + ~CRecordDrawingRecord(); - ~CRecordDrawingRecord() - { - } - - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - m_oHeader = oHeader; - m_nCountShapes = (UINT)StreamUtils::ReadDWORD(pStream); - m_nPidCur = (UINT)StreamUtils::ReadDWORD(pStream); - } + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream); }; diff --git a/MsBinaryFile/PptFile/Records/Drawing/GroupShape.cpp b/MsBinaryFile/PptFile/Records/Drawing/GroupShape.cpp new file mode 100644 index 0000000000..c1d347c236 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/Drawing/GroupShape.cpp @@ -0,0 +1,22 @@ +#include "GroupShape.h" + + +CRecordGroupShape::CRecordGroupShape() +{ + +} + +CRecordGroupShape::~CRecordGroupShape() +{ + +} + +void CRecordGroupShape::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + m_oBounds.left = StreamUtils::ReadLONG(pStream); + m_oBounds.top = StreamUtils::ReadLONG(pStream); + m_oBounds.right = StreamUtils::ReadLONG(pStream); + m_oBounds.bottom = StreamUtils::ReadLONG(pStream); +} diff --git a/MsBinaryFile/PptFile/Records/Drawing/GroupShape.h b/MsBinaryFile/PptFile/Records/Drawing/GroupShape.h index b77d1477c4..89108c4a64 100644 --- a/MsBinaryFile/PptFile/Records/Drawing/GroupShape.h +++ b/MsBinaryFile/PptFile/Records/Drawing/GroupShape.h @@ -32,27 +32,15 @@ #pragma once #include "../../Reader/Records.h" + class CRecordGroupShape : public CUnknownRecord { public: RECT m_oBounds; - CRecordGroupShape() - { - } + CRecordGroupShape(); + ~CRecordGroupShape(); - ~CRecordGroupShape() - { - } - - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - m_oHeader = oHeader; - - m_oBounds.left = StreamUtils::ReadLONG(pStream); - m_oBounds.top = StreamUtils::ReadLONG(pStream); - m_oBounds.right = StreamUtils::ReadLONG(pStream); - m_oBounds.bottom = StreamUtils::ReadLONG(pStream); - } + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream); }; diff --git a/MsBinaryFile/PptFile/Records/Drawing/Shape.cpp b/MsBinaryFile/PptFile/Records/Drawing/Shape.cpp new file mode 100644 index 0000000000..5aa89de48e --- /dev/null +++ b/MsBinaryFile/PptFile/Records/Drawing/Shape.cpp @@ -0,0 +1,41 @@ +#include "Shape.h" + + +CRecordShape::CRecordShape() +{ + +} + +CRecordShape::~CRecordShape() +{ + +} + +void CRecordShape::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + m_nID = (UINT)StreamUtils::ReadDWORD(pStream); + + UINT nFlag = (UINT)StreamUtils::ReadDWORD(pStream); + + m_bGroup = ((nFlag & 0x01) == 0x01); + m_bChild = ((nFlag & 0x02) == 0x02); + m_bPatriarch = ((nFlag & 0x04) == 0x04); + m_bDeleted = ((nFlag & 0x08) == 0x08); + m_bOleShape = ((nFlag & 0x10) == 0x10); + m_bHaveMaster = ((nFlag & 0x20) == 0x20); + m_bFlipH = ((nFlag & 0x40) == 0x40); + m_bFlipV = ((nFlag & 0x80) == 0x80); + m_bConnector = ((nFlag & 0x0100) == 0x0100); + m_bHaveAnchor = ((nFlag & 0x0200) == 0x0200); + m_bBackground = ((nFlag & 0x0400) == 0x0400); + m_bHaveSpt = ((nFlag & 0x0800) == 0x0800); + + LONG lSize = m_oHeader.RecLen - 8; + if (lSize > 0) + { + StreamUtils::StreamSkip(lSize, pStream); + } + + m_nShapeID = m_oHeader.RecInstance; +} diff --git a/MsBinaryFile/PptFile/Records/Drawing/Shape.h b/MsBinaryFile/PptFile/Records/Drawing/Shape.h index e70145615b..10d471f965 100644 --- a/MsBinaryFile/PptFile/Records/Drawing/Shape.h +++ b/MsBinaryFile/PptFile/Records/Drawing/Shape.h @@ -53,40 +53,8 @@ public: public: - CRecordShape() - { - } + CRecordShape(); + ~CRecordShape(); - ~CRecordShape() - { - } - - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - m_oHeader = oHeader; - m_nID = (UINT)StreamUtils::ReadDWORD(pStream); - - UINT nFlag = (UINT)StreamUtils::ReadDWORD(pStream); - - m_bGroup = ((nFlag & 0x01) == 0x01); - m_bChild = ((nFlag & 0x02) == 0x02); - m_bPatriarch = ((nFlag & 0x04) == 0x04); - m_bDeleted = ((nFlag & 0x08) == 0x08); - m_bOleShape = ((nFlag & 0x10) == 0x10); - m_bHaveMaster = ((nFlag & 0x20) == 0x20); - m_bFlipH = ((nFlag & 0x40) == 0x40); - m_bFlipV = ((nFlag & 0x80) == 0x80); - m_bConnector = ((nFlag & 0x0100) == 0x0100); - m_bHaveAnchor = ((nFlag & 0x0200) == 0x0200); - m_bBackground = ((nFlag & 0x0400) == 0x0400); - m_bHaveSpt = ((nFlag & 0x0800) == 0x0800); - - LONG lSize = m_oHeader.RecLen - 8; - if (lSize > 0) - { - StreamUtils::StreamSkip(lSize, pStream); - } - - m_nShapeID = m_oHeader.RecInstance; - } -}; \ No newline at end of file + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream); +}; diff --git a/MsBinaryFile/PptFile/Records/Drawing/ShapeContainer.cpp b/MsBinaryFile/PptFile/Records/Drawing/ShapeContainer.cpp index 31d7d328f7..e7ac0e5d08 100644 --- a/MsBinaryFile/PptFile/Records/Drawing/ShapeContainer.cpp +++ b/MsBinaryFile/PptFile/Records/Drawing/ShapeContainer.cpp @@ -1506,6 +1506,25 @@ void CPPTElement::SetUpPropertyShape(CElementPtr pElement, CTheme* pTheme, CSlid } +CRecordShapeContainer::CRecordShapeContainer() +{ + bGroupShape = false; + + m_pStream = NULL; + +} + +CRecordShapeContainer::~CRecordShapeContainer() +{ + m_pStream = NULL; +} + +void CRecordShapeContainer::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_pStream = pStream; + CRecordsContainer::ReadFromStream(oHeader, pStream); +} + CElementPtr CRecordShapeContainer::GetElement (bool inGroup, CExMedia* pMapIDs, CTheme* pTheme, CLayout* pLayout, CSlideInfo* pThemeWrapper, CSlideInfo* pSlideWrapper, CSlide* pSlide) @@ -2057,6 +2076,36 @@ CElementPtr CRecordShapeContainer::GetElement (bool inGroup, CExMedia* pMapIDs, return pElement; } +PPT_FORMAT::ElementType CRecordShapeContainer::GetTypeElem(eSPT eType) +{ + switch (eType) + { + //case sptMin: + case sptMax: + case sptNil: + { + return etShape; + } + case sptPictureFrame: + { + return etPicture; + } + default: + { + return etShape; + } + }; + return etShape; +} + +std::wstring CRecordShapeContainer::GetFileName(std::wstring strFilePath) +{ + int nIndex = strFilePath.rfind(wchar_t('\\')); + if (-1 != nIndex) + return strFilePath.substr(nIndex + 1); + else + return strFilePath; +} bool CRecordShapeContainer::isTable() const { std::vector oArrayOptions; diff --git a/MsBinaryFile/PptFile/Records/Drawing/ShapeContainer.h b/MsBinaryFile/PptFile/Records/Drawing/ShapeContainer.h index a427ace96d..3bf107f3d3 100644 --- a/MsBinaryFile/PptFile/Records/Drawing/ShapeContainer.h +++ b/MsBinaryFile/PptFile/Records/Drawing/ShapeContainer.h @@ -84,60 +84,18 @@ public: bool bGroupShape; - CRecordShapeContainer() - { - bGroupShape = false; + CRecordShapeContainer(); - m_pStream = NULL; - - } - - ~CRecordShapeContainer() - { - m_pStream = NULL; - } - - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - m_pStream = pStream; - CRecordsContainer::ReadFromStream(oHeader, pStream); - } + ~CRecordShapeContainer(); + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream); CElementPtr GetElement (bool inGroup, CExMedia* pMapIDs, CTheme* pTheme, CLayout* pLayout, CSlideInfo* pThemeWrapper, CSlideInfo* pSlideWrapper, CSlide* pSlide = NULL); - PPT_FORMAT::ElementType GetTypeElem(eSPT eType) - { - switch (eType) - { - //case sptMin: - case sptMax: - case sptNil: - { - return etShape; - } - case sptPictureFrame: - { - return etPicture; - } - default: - { - return etShape; - } - }; - return etShape; - } - AVSINLINE std::wstring GetFileName(std::wstring strFilePath) - { - int nIndex = strFilePath.rfind(wchar_t('\\')); - if (-1 != nIndex) - { - return strFilePath.substr(nIndex + 1); - } - return strFilePath; - } + PPT_FORMAT::ElementType GetTypeElem(eSPT eType); + std::wstring GetFileName(std::wstring strFilePath); protected: diff --git a/MsBinaryFile/PptFile/Records/Drawing/ShapeProperties.cpp b/MsBinaryFile/PptFile/Records/Drawing/ShapeProperties.cpp new file mode 100644 index 0000000000..6388361a2a --- /dev/null +++ b/MsBinaryFile/PptFile/Records/Drawing/ShapeProperties.cpp @@ -0,0 +1,27 @@ +#include "ShapeProperties.h" + + +CRecordShapeProperties::CRecordShapeProperties() +{ + +} + +CRecordShapeProperties::~CRecordShapeProperties() +{ + +} + +void CRecordShapeProperties::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + LONG lPosition = 0; + StreamUtils::StreamPosition(lPosition, pStream); + + m_oProperties.FromStream(pStream, m_oHeader.RecInstance); +// _UINT32 dwLen = m_oProperties.GetLen(); + + // это на всякий случай, может там напридумывают проперти с complex - + // которые мы не поддерживаем... + StreamUtils::StreamSeek(lPosition + m_oHeader.RecLen, pStream); +} diff --git a/MsBinaryFile/PptFile/Records/Drawing/ShapeProperties.h b/MsBinaryFile/PptFile/Records/Drawing/ShapeProperties.h index 94198ae716..16939ebc6f 100644 --- a/MsBinaryFile/PptFile/Records/Drawing/ShapeProperties.h +++ b/MsBinaryFile/PptFile/Records/Drawing/ShapeProperties.h @@ -34,31 +34,14 @@ #include "../../Reader/Records.h" #include "../../../Common/Vml/PPTShape/ElementSettings.h" + class CRecordShapeProperties : public CUnknownRecord { public: CProperties m_oProperties; - CRecordShapeProperties() - { - } + CRecordShapeProperties(); + ~CRecordShapeProperties(); - ~CRecordShapeProperties() - { - } - - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - m_oHeader = oHeader; - - LONG lPosition = 0; - StreamUtils::StreamPosition(lPosition, pStream); - - m_oProperties.FromStream(pStream, m_oHeader.RecInstance); - _UINT32 dwLen = m_oProperties.GetLen(); - - // это на всякий случай, может там напридумывают проперти с complex - - // которые мы не поддерживаем... - StreamUtils::StreamSeek(lPosition + m_oHeader.RecLen, pStream); - } + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream); }; diff --git a/MsBinaryFile/PptFile/Records/Drawing/TextBox.cpp b/MsBinaryFile/PptFile/Records/Drawing/TextBox.cpp new file mode 100644 index 0000000000..a54a3c9a12 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/Drawing/TextBox.cpp @@ -0,0 +1,17 @@ +#include "TextBox.h" + + +CRecordTextBox::CRecordTextBox() +{ + +} + +CRecordTextBox::~CRecordTextBox() +{ + +} + +void CRecordTextBox::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + return CUnknownRecord::ReadFromStream(oHeader, pStream); +} diff --git a/MsBinaryFile/PptFile/Records/Drawing/TextBox.h b/MsBinaryFile/PptFile/Records/Drawing/TextBox.h index 047aeb2b83..e2976a2843 100644 --- a/MsBinaryFile/PptFile/Records/Drawing/TextBox.h +++ b/MsBinaryFile/PptFile/Records/Drawing/TextBox.h @@ -35,18 +35,8 @@ class CRecordTextBox : public CUnknownRecord { public: - - CRecordTextBox() - { - } + CRecordTextBox(); + ~CRecordTextBox(); - ~CRecordTextBox() - { - } - - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - return CUnknownRecord::ReadFromStream(oHeader, pStream); - } - -}; \ No newline at end of file + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream); +}; diff --git a/MsBinaryFile/PptFile/Records/EndDocument.cpp b/MsBinaryFile/PptFile/Records/EndDocument.cpp new file mode 100644 index 0000000000..cbfebae1a3 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/EndDocument.cpp @@ -0,0 +1,7 @@ +#include "EndDocument.h" + + +void CRecordEndDocument::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + return CUnknownRecord::ReadFromStream(oHeader, pStream); +} diff --git a/MsBinaryFile/PptFile/Records/EndDocument.h b/MsBinaryFile/PptFile/Records/EndDocument.h index 5c944882b1..ca26ee96f1 100644 --- a/MsBinaryFile/PptFile/Records/EndDocument.h +++ b/MsBinaryFile/PptFile/Records/EndDocument.h @@ -35,17 +35,5 @@ class CRecordEndDocument : public CUnknownRecord { public: - - CRecordEndDocument() - { - } - - ~CRecordEndDocument() - { - } - - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - return CUnknownRecord::ReadFromStream(oHeader, pStream); - } -}; \ No newline at end of file + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) override; +}; diff --git a/MsBinaryFile/PptFile/Records/ExCDAudioContainer.cpp b/MsBinaryFile/PptFile/Records/ExCDAudioContainer.cpp new file mode 100644 index 0000000000..f0e65c2782 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/ExCDAudioContainer.cpp @@ -0,0 +1,27 @@ +#include "ExCDAudioContainer.h" + + +void CRecordExCDAudioContainer::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + SRecordHeader oExHeader; + oExHeader.ReadFromStream(pStream); + + m_oMedia.ReadFromStream(oExHeader, pStream); + + StreamUtils::StreamSkip(8, pStream); + + BYTE nTrack1 = StreamUtils::ReadBYTE(pStream); + BYTE nMinute1 = StreamUtils::ReadBYTE(pStream); + BYTE nSecond1 = StreamUtils::ReadBYTE(pStream); + BYTE nFrame1 = StreamUtils::ReadBYTE(pStream); + + BYTE nTrack2 = StreamUtils::ReadBYTE(pStream); + BYTE nMinute2 = StreamUtils::ReadBYTE(pStream); + BYTE nSecond2 = StreamUtils::ReadBYTE(pStream); + BYTE nFrame2 = StreamUtils::ReadBYTE(pStream); + + m_dStartTime = 60000 * nMinute1 + 1000 * nSecond1; + m_dEndTime = 60000 * nMinute2 + 1000 * nSecond2; +} diff --git a/MsBinaryFile/PptFile/Records/ExCDAudioContainer.h b/MsBinaryFile/PptFile/Records/ExCDAudioContainer.h index 6079ad4781..ed1721c0d1 100644 --- a/MsBinaryFile/PptFile/Records/ExCDAudioContainer.h +++ b/MsBinaryFile/PptFile/Records/ExCDAudioContainer.h @@ -37,41 +37,9 @@ class CRecordExCDAudioContainer : public CRecordsContainer public: CRecordExMediaAtom m_oMedia; - double m_dStartTime; - double m_dEndTime; + double m_dStartTime = .0; + double m_dEndTime = .0; - CRecordExCDAudioContainer() - { - m_dStartTime = 0; - m_dEndTime = 0; - } - ~CRecordExCDAudioContainer() - { - } - - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - m_oHeader = oHeader; - - SRecordHeader oExHeader; - oExHeader.ReadFromStream(pStream); - - m_oMedia.ReadFromStream(oExHeader, pStream); - - StreamUtils::StreamSkip(8, pStream); - - BYTE nTrack1 = StreamUtils::ReadBYTE(pStream); - BYTE nMinute1 = StreamUtils::ReadBYTE(pStream); - BYTE nSecond1 = StreamUtils::ReadBYTE(pStream); - BYTE nFrame1 = StreamUtils::ReadBYTE(pStream); - - BYTE nTrack2 = StreamUtils::ReadBYTE(pStream); - BYTE nMinute2 = StreamUtils::ReadBYTE(pStream); - BYTE nSecond2 = StreamUtils::ReadBYTE(pStream); - BYTE nFrame2 = StreamUtils::ReadBYTE(pStream); - - m_dStartTime = 60000 * nMinute1 + 1000 * nSecond1; - m_dEndTime = 60000 * nMinute2 + 1000 * nSecond2; - } -}; \ No newline at end of file + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) override; +}; diff --git a/MsBinaryFile/PptFile/Records/ExControlAtom.cpp b/MsBinaryFile/PptFile/Records/ExControlAtom.cpp new file mode 100644 index 0000000000..440ef9b6e4 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/ExControlAtom.cpp @@ -0,0 +1,9 @@ +#include "ExControlAtom.h" + + +void CRecordExControlAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + m_nSlideIdRef = StreamUtils::ReadDWORD(pStream); +} diff --git a/MsBinaryFile/PptFile/Records/ExControlAtom.h b/MsBinaryFile/PptFile/Records/ExControlAtom.h index 4d0d075c2b..2edc1917b4 100644 --- a/MsBinaryFile/PptFile/Records/ExControlAtom.h +++ b/MsBinaryFile/PptFile/Records/ExControlAtom.h @@ -34,22 +34,9 @@ class CRecordExControlAtom : public CUnknownRecord { - UINT m_nSlideIdRef; - public: - - CRecordExControlAtom() - { - } + UINT m_nSlideIdRef = 0; - ~CRecordExControlAtom() - { - } - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - m_oHeader = oHeader; - - m_nSlideIdRef = StreamUtils::ReadDWORD(pStream); - } -}; \ No newline at end of file + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) override; +}; diff --git a/MsBinaryFile/PptFile/Records/ExHyperlinkAtom.cpp b/MsBinaryFile/PptFile/Records/ExHyperlinkAtom.cpp new file mode 100644 index 0000000000..16ef942371 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/ExHyperlinkAtom.cpp @@ -0,0 +1,46 @@ +#include "ExHyperlinkAtom.h" + + +void CRecordExHyperlinkAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + m_nHyperlinkID = StreamUtils::ReadDWORD(pStream); +} + +bool CRecordExHyperlinkContainer::hasCString() const +{ + return m_friendlyNameAtom.IsInit() || m_targetAtom.IsInit() || m_locationAtom.IsInit(); +} + +void CRecordExHyperlinkContainer::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + SRecordHeader header; + + header.ReadFromStream(pStream); + m_exHyperlinkAtom.ReadFromStream(header, pStream); + + unsigned currentLen = 12; // 12(atom) + while (currentLen < m_oHeader.RecLen) + { + header.ReadFromStream(pStream); + auto* pCString = new CRecordCString; + pCString->ReadFromStream(header, pStream); + switch (header.RecInstance) + { + case 0: m_friendlyNameAtom = pCString; break; + case 1: m_targetAtom = pCString; break; + case 3: m_locationAtom = pCString; break; + default: delete pCString; + } + currentLen += 8 + header.RecLen; // headerLen + CStringLen + } +// if (m_friendlyNameAtom.IsInit() && (int)m_friendlyNameAtom->m_strText.find(L"NEXT") == -1) +// std::wcout << m_exHyperlinkAtom.m_nHyperlinkID << L" " +// << (m_friendlyNameAtom.IsInit() ? m_friendlyNameAtom->m_strText : L"-") << L" " +// << (m_targetAtom.IsInit() ? m_targetAtom->m_strText : L"-") << L" " +// << (m_locationAtom.IsInit() ? m_locationAtom->m_strText : L"-") +// << std::endl; +} diff --git a/MsBinaryFile/PptFile/Records/ExHyperlinkAtom.h b/MsBinaryFile/PptFile/Records/ExHyperlinkAtom.h index 79b62c0e84..6b7333756f 100644 --- a/MsBinaryFile/PptFile/Records/ExHyperlinkAtom.h +++ b/MsBinaryFile/PptFile/Records/ExHyperlinkAtom.h @@ -39,22 +39,10 @@ class CRecordExHyperlinkAtom : public CUnknownRecord { public: - UINT m_nHyperlinkID; + UINT m_nHyperlinkID = 0; - CRecordExHyperlinkAtom() - { - } - ~CRecordExHyperlinkAtom() - { - } - - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - m_oHeader = oHeader; - - m_nHyperlinkID = StreamUtils::ReadDWORD(pStream); - } + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) override; }; class CRecordExHyperlinkContainer : public CRecordsContainer @@ -65,48 +53,8 @@ public: nullable m_targetAtom; nullable m_locationAtom; - CRecordExHyperlinkContainer() - { - } - ~CRecordExHyperlinkContainer() - { - } + bool hasCString()const; - bool hasCString()const - { - return m_friendlyNameAtom.IsInit() || m_targetAtom.IsInit() || m_locationAtom.IsInit(); - } - - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - m_oHeader = oHeader; - - SRecordHeader header; - - header.ReadFromStream(pStream); - m_exHyperlinkAtom.ReadFromStream(header, pStream); - - unsigned currentLen = 12; // 12(atom) - while (currentLen < m_oHeader.RecLen) - { - header.ReadFromStream(pStream); - auto* pCString = new CRecordCString; - pCString->ReadFromStream(header, pStream); - switch (header.RecInstance) - { - case 0: m_friendlyNameAtom = pCString; break; - case 1: m_targetAtom = pCString; break; - case 3: m_locationAtom = pCString; break; - default: delete pCString; - } - currentLen += 8 + header.RecLen; // headerLen + CStringLen - } -// if (m_friendlyNameAtom.IsInit() && (int)m_friendlyNameAtom->m_strText.find(L"NEXT") == -1) -// std::wcout << m_exHyperlinkAtom.m_nHyperlinkID << L" " -// << (m_friendlyNameAtom.IsInit() ? m_friendlyNameAtom->m_strText : L"-") << L" " -// << (m_targetAtom.IsInit() ? m_targetAtom->m_strText : L"-") << L" " -// << (m_locationAtom.IsInit() ? m_locationAtom->m_strText : L"-") -// << std::endl; - } + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) override; }; diff --git a/MsBinaryFile/PptFile/Records/ExMIDIAudioContainer.cpp b/MsBinaryFile/PptFile/Records/ExMIDIAudioContainer.cpp new file mode 100644 index 0000000000..9916b25747 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/ExMIDIAudioContainer.cpp @@ -0,0 +1,7 @@ +#include "ExMIDIAudioContainer.h" + + +void CRecordExMIDIAudioContainer::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + CRecordsContainer::ReadFromStream(oHeader, pStream); +} diff --git a/MsBinaryFile/PptFile/Records/ExMIDIAudioContainer.h b/MsBinaryFile/PptFile/Records/ExMIDIAudioContainer.h index 3c0b97b0f7..d45caf3a16 100644 --- a/MsBinaryFile/PptFile/Records/ExMIDIAudioContainer.h +++ b/MsBinaryFile/PptFile/Records/ExMIDIAudioContainer.h @@ -35,17 +35,5 @@ class CRecordExMIDIAudioContainer : public CRecordsContainer { public: - - CRecordExMIDIAudioContainer() - { - } - - ~CRecordExMIDIAudioContainer() - { - } - - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - CRecordsContainer::ReadFromStream(oHeader, pStream); - } + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) override; }; diff --git a/MsBinaryFile/PptFile/Records/ExMediaAtom.cpp b/MsBinaryFile/PptFile/Records/ExMediaAtom.cpp new file mode 100644 index 0000000000..7485aab21a --- /dev/null +++ b/MsBinaryFile/PptFile/Records/ExMediaAtom.cpp @@ -0,0 +1,17 @@ +#include "ExMediaAtom.h" + + +void CRecordExMediaAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + m_nExObjID = StreamUtils::ReadDWORD(pStream); + + USHORT nFlag = StreamUtils::ReadWORD(pStream); + + m_bLoop = ((nFlag & 0x01) == 0x01); + m_bRewind = ((nFlag & 0x02) == 0x02); + m_bNarration = ((nFlag & 0x04) == 0x04); + + StreamUtils::StreamSkip(2, pStream); +} diff --git a/MsBinaryFile/PptFile/Records/ExMediaAtom.h b/MsBinaryFile/PptFile/Records/ExMediaAtom.h index 4f622ccc2a..0707a26d0d 100644 --- a/MsBinaryFile/PptFile/Records/ExMediaAtom.h +++ b/MsBinaryFile/PptFile/Records/ExMediaAtom.h @@ -35,34 +35,12 @@ class CRecordExMediaAtom : public CUnknownRecord { public: - _UINT32 m_nExObjID; + _UINT32 m_nExObjID = 0; - bool m_bLoop; - bool m_bRewind; - bool m_bNarration; + bool m_bLoop = false; + bool m_bRewind = false; + bool m_bNarration = false; -public: - - CRecordExMediaAtom() - { - } - ~CRecordExMediaAtom() - { - } - - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - m_oHeader = oHeader; - - m_nExObjID = StreamUtils::ReadDWORD(pStream); - - USHORT nFlag = StreamUtils::ReadWORD(pStream); - - m_bLoop = ((nFlag & 0x01) == 0x01); - m_bRewind = ((nFlag & 0x02) == 0x02); - m_bNarration = ((nFlag & 0x04) == 0x04); - - StreamUtils::StreamSkip(2, pStream); - } -}; \ No newline at end of file + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream); +}; diff --git a/MsBinaryFile/PptFile/Records/ExObjListAtom.cpp b/MsBinaryFile/PptFile/Records/ExObjListAtom.cpp new file mode 100644 index 0000000000..0e0015c3c5 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/ExObjListAtom.cpp @@ -0,0 +1,9 @@ +#include "ExObjListAtom.h" + + +void CRecordExObjListAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + m_nObjectIdSeed = StreamUtils::ReadDWORD(pStream); +} diff --git a/MsBinaryFile/PptFile/Records/ExObjListAtom.h b/MsBinaryFile/PptFile/Records/ExObjListAtom.h index 3705c484a9..6bb97d7059 100644 --- a/MsBinaryFile/PptFile/Records/ExObjListAtom.h +++ b/MsBinaryFile/PptFile/Records/ExObjListAtom.h @@ -35,21 +35,8 @@ class CRecordExObjListAtom : public CUnknownRecord { public: - INT m_nObjectIdSeed; + _INT32 m_nObjectIdSeed = -1; - CRecordExObjListAtom() - { - } - ~CRecordExObjListAtom() - { - } - - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - m_oHeader = oHeader; - - m_nObjectIdSeed = StreamUtils::ReadDWORD(pStream); - } - -}; \ No newline at end of file + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) override; +}; diff --git a/MsBinaryFile/PptFile/Records/ExObjListContainer.cpp b/MsBinaryFile/PptFile/Records/ExObjListContainer.cpp new file mode 100644 index 0000000000..58181c4c70 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/ExObjListContainer.cpp @@ -0,0 +1,7 @@ +#include "ExObjListContainer.h" + + +void CRecordExObjListContainer::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + CRecordsContainer::ReadFromStream(oHeader, pStream); +} diff --git a/MsBinaryFile/PptFile/Records/ExObjListContainer.h b/MsBinaryFile/PptFile/Records/ExObjListContainer.h index 7631d4ac28..023ca847fd 100644 --- a/MsBinaryFile/PptFile/Records/ExObjListContainer.h +++ b/MsBinaryFile/PptFile/Records/ExObjListContainer.h @@ -35,17 +35,5 @@ class CRecordExObjListContainer : public CRecordsContainer { public: - - CRecordExObjListContainer() - { - } - - ~CRecordExObjListContainer() - { - } - - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - CRecordsContainer::ReadFromStream(oHeader, pStream); - } -}; \ No newline at end of file + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) override; +}; diff --git a/MsBinaryFile/PptFile/Records/ExObjRefAtom.cpp b/MsBinaryFile/PptFile/Records/ExObjRefAtom.cpp new file mode 100644 index 0000000000..09f6e15508 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/ExObjRefAtom.cpp @@ -0,0 +1,6 @@ + +void CRecordExObjRefAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + m_nExObjID = StreamUtils::ReadDWORD(pStream); +} diff --git a/MsBinaryFile/PptFile/Records/ExObjRefAtom.h b/MsBinaryFile/PptFile/Records/ExObjRefAtom.h index c3695f9a27..20d84687bb 100644 --- a/MsBinaryFile/PptFile/Records/ExObjRefAtom.h +++ b/MsBinaryFile/PptFile/Records/ExObjRefAtom.h @@ -35,19 +35,8 @@ class CRecordExObjRefAtom : public CUnknownRecord { public: - _UINT32 m_nExObjID; + _UINT32 m_nExObjID = 0; - CRecordExObjRefAtom() - { - } - ~CRecordExObjRefAtom() - { - } - - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - m_oHeader = oHeader; - m_nExObjID = StreamUtils::ReadDWORD(pStream); - } -}; \ No newline at end of file + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) override; +}; diff --git a/MsBinaryFile/PptFile/Records/ExOleEmbedAtom.cpp b/MsBinaryFile/PptFile/Records/ExOleEmbedAtom.cpp new file mode 100644 index 0000000000..3174fae159 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/ExOleEmbedAtom.cpp @@ -0,0 +1,13 @@ +#include "ExOleEmbedAtom.h" + + +void CRecordExOleEmbedAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + m_nColorFollow = StreamUtils::ReadLONG(pStream); + m_nCantLockServer = StreamUtils::ReadBYTE(pStream); + m_nNoSizeToServer = StreamUtils::ReadBYTE(pStream); + m_nIsTable = StreamUtils::ReadBYTE(pStream); + StreamUtils::StreamSkip(1, pStream); +} diff --git a/MsBinaryFile/PptFile/Records/ExOleEmbedAtom.h b/MsBinaryFile/PptFile/Records/ExOleEmbedAtom.h index 89393c3bcf..47aaa71986 100644 --- a/MsBinaryFile/PptFile/Records/ExOleEmbedAtom.h +++ b/MsBinaryFile/PptFile/Records/ExOleEmbedAtom.h @@ -39,23 +39,7 @@ public: BOOL1 m_nCantLockServer; BOOL1 m_nNoSizeToServer; BOOL1 m_nIsTable; - - CRecordExOleEmbedAtom() - { - } - ~CRecordExOleEmbedAtom() - { - } - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - m_oHeader = oHeader; - - m_nColorFollow = StreamUtils::ReadLONG(pStream); - m_nCantLockServer = StreamUtils::ReadBYTE(pStream); - m_nNoSizeToServer = StreamUtils::ReadBYTE(pStream); - m_nIsTable = StreamUtils::ReadBYTE(pStream); - StreamUtils::StreamSkip(1, pStream); - } + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) override; }; diff --git a/MsBinaryFile/PptFile/Records/ExOleLinkAtom.cpp b/MsBinaryFile/PptFile/Records/ExOleLinkAtom.cpp new file mode 100644 index 0000000000..dcf8e6129c --- /dev/null +++ b/MsBinaryFile/PptFile/Records/ExOleLinkAtom.cpp @@ -0,0 +1,7 @@ +#include "ExOleLinkAtom.h" + + +void CRecordExOleLinkAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + return CUnknownRecord::ReadFromStream(oHeader, pStream); +} diff --git a/MsBinaryFile/PptFile/Records/ExOleLinkAtom.h b/MsBinaryFile/PptFile/Records/ExOleLinkAtom.h index 734f2118c5..9405816737 100644 --- a/MsBinaryFile/PptFile/Records/ExOleLinkAtom.h +++ b/MsBinaryFile/PptFile/Records/ExOleLinkAtom.h @@ -37,17 +37,7 @@ class CRecordExOleLinkAtom : public CUnknownRecord public: UINT m_nSlideID; UINT m_nOleUpdateMode; - - CRecordExOleLinkAtom() - { - } - ~CRecordExOleLinkAtom() - { - } - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - return CUnknownRecord::ReadFromStream(oHeader, pStream); - } -}; \ No newline at end of file + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) override; +}; diff --git a/MsBinaryFile/PptFile/Records/ExOleObjAtom.cpp b/MsBinaryFile/PptFile/Records/ExOleObjAtom.cpp new file mode 100644 index 0000000000..a4cdf6650c --- /dev/null +++ b/MsBinaryFile/PptFile/Records/ExOleObjAtom.cpp @@ -0,0 +1,75 @@ +#include "ExOleObjAtom.h" + + +void CRecordExOleObjAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + m_nDrawAspect = StreamUtils::ReadDWORD(pStream); + m_nType = StreamUtils::ReadDWORD(pStream); + m_nExObjID = StreamUtils::ReadDWORD(pStream); + m_nSubType = StreamUtils::ReadDWORD(pStream); + m_nPersistID = StreamUtils::ReadDWORD(pStream); + + StreamUtils::StreamSkip ( 4, pStream ); //unused +} + +CRecordExOleObjStg::CRecordExOleObjStg(std::wstring strTemp) : m_strTmpDirectory(strTemp) +{ +} + +CRecordExOleObjStg::~CRecordExOleObjStg() +{ + +} + +void CRecordExOleObjStg::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + ULONG decompressedSize = m_oHeader.RecLen, compressedSize = m_oHeader.RecLen; + + if (m_oHeader.RecInstance == 0x01) + { + compressedSize = m_oHeader.RecLen - 4; + decompressedSize = StreamUtils::ReadDWORD(pStream); + } + + BYTE* pData = (compressedSize > 0 && compressedSize < 0xffffff ) ? new BYTE[compressedSize] : NULL; + + if (!pData) return; + + compressedSize = pStream->read(pData, compressedSize); + + if (m_oHeader.RecInstance == 0x01) + { + BYTE* pDataUncompress = (compressedSize > 0 && compressedSize < 0xffffff) ? new BYTE[decompressedSize + 64] : NULL; + if ((pDataUncompress) && (NSZip::Decompress(pData, compressedSize, pDataUncompress, decompressedSize))) + { + delete []pData; + pData = pDataUncompress; + } + else + { + delete []pData; + pData = NULL; + } + } + //if (pDecryptor) + //{ + // pDecryptor->Decrypt((char*)pData, oHeader.RecLen - lOffset, 0); + //} + if (pData) + { + m_sFileName = m_strTmpDirectory + FILE_SEPARATOR_STR + L"oleObject_xxx.bin"; + + NSFile::CFileBinary file; + if (file.CreateFileW(m_sFileName)) + { + file.WriteFile(pData, decompressedSize); + file.CloseFile(); + } + delete[] pData; + pData = NULL; + } +} diff --git a/MsBinaryFile/PptFile/Records/ExOleObjAtom.h b/MsBinaryFile/PptFile/Records/ExOleObjAtom.h index 028ec545c7..aa4d6da3e7 100644 --- a/MsBinaryFile/PptFile/Records/ExOleObjAtom.h +++ b/MsBinaryFile/PptFile/Records/ExOleObjAtom.h @@ -34,99 +34,25 @@ class CRecordExOleObjAtom : public CUnknownRecord { +public: UINT m_nDrawAspect; UINT m_nType; UINT m_nExObjID; UINT m_nSubType; UINT m_nPersistID; -public: - - CRecordExOleObjAtom() - { - } - ~CRecordExOleObjAtom() - { - } - - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - m_oHeader = oHeader; - - m_nDrawAspect = StreamUtils::ReadDWORD(pStream); - m_nType = StreamUtils::ReadDWORD(pStream); - m_nExObjID = StreamUtils::ReadDWORD(pStream); - m_nSubType = StreamUtils::ReadDWORD(pStream); - m_nPersistID = StreamUtils::ReadDWORD(pStream); - - StreamUtils::StreamSkip ( 4, pStream ); //unused - } + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) override; }; + class CRecordExOleObjStg : public CUnknownRecord { public: std::wstring m_sFileName; std::wstring m_strTmpDirectory; - CRecordExOleObjStg(std::wstring strTemp) : m_strTmpDirectory(strTemp) - { - } - - ~CRecordExOleObjStg() - { - } - - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - m_oHeader = oHeader; - - ULONG decompressedSize = m_oHeader.RecLen, compressedSize = m_oHeader.RecLen; - - if (m_oHeader.RecInstance == 0x01) - { - compressedSize = m_oHeader.RecLen - 4; - decompressedSize = StreamUtils::ReadDWORD(pStream); - } - - BYTE* pData = (compressedSize > 0 && compressedSize < 0xffffff ) ? new BYTE[compressedSize] : NULL; - - if (!pData) return; - - compressedSize = pStream->read(pData, compressedSize); - - if (m_oHeader.RecInstance == 0x01) - { - BYTE* pDataUncompress = (compressedSize > 0 && compressedSize < 0xffffff) ? new BYTE[decompressedSize + 64] : NULL; - if ((pDataUncompress) && (NSZip::Decompress(pData, compressedSize, pDataUncompress, decompressedSize))) - { - delete []pData; - pData = pDataUncompress; - } - else - { - delete []pData; - pData = NULL; - } - } - //if (pDecryptor) - //{ - // pDecryptor->Decrypt((char*)pData, oHeader.RecLen - lOffset, 0); - //} - if (pData) - { - m_sFileName = m_strTmpDirectory + FILE_SEPARATOR_STR + L"oleObject_xxx.bin"; - - NSFile::CFileBinary file; - if (file.CreateFileW(m_sFileName)) - { - file.WriteFile(pData, decompressedSize); - file.CloseFile(); - } - delete[] pData; - pData = NULL; - } - - } + CRecordExOleObjStg(std::wstring strTemp); + ~CRecordExOleObjStg(); + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) override; }; diff --git a/MsBinaryFile/PptFile/Records/ExVideoContainer.cpp b/MsBinaryFile/PptFile/Records/ExVideoContainer.cpp new file mode 100644 index 0000000000..1e183a6937 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/ExVideoContainer.cpp @@ -0,0 +1,7 @@ +#include "ExVideoContainer.h" + + +void CRecordExVideoContainer::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + CRecordsContainer::ReadFromStream(oHeader, pStream); +} diff --git a/MsBinaryFile/PptFile/Records/ExVideoContainer.h b/MsBinaryFile/PptFile/Records/ExVideoContainer.h index eba08538c4..33d44386c2 100644 --- a/MsBinaryFile/PptFile/Records/ExVideoContainer.h +++ b/MsBinaryFile/PptFile/Records/ExVideoContainer.h @@ -35,17 +35,5 @@ class CRecordExVideoContainer : public CRecordsContainer { public: - - CRecordExVideoContainer() - { - } - - ~CRecordExVideoContainer() - { - } - - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - CRecordsContainer::ReadFromStream(oHeader, pStream); - } -}; \ No newline at end of file + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) override; +}; diff --git a/MsBinaryFile/PptFile/Records/ExWAVAudioEmbeddedContainer.cpp b/MsBinaryFile/PptFile/Records/ExWAVAudioEmbeddedContainer.cpp new file mode 100644 index 0000000000..3f2bbee898 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/ExWAVAudioEmbeddedContainer.cpp @@ -0,0 +1,17 @@ +#include "ExWAVAudioEmbeddedContainer.h" + + +void CRecordWAVAudioEmbeddedContainer::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + SRecordHeader oExHeader; + oExHeader.ReadFromStream(pStream); + + m_oMedia.ReadFromStream(oExHeader, pStream); + + StreamUtils::StreamSkip(8, pStream); + + m_nSoundID = StreamUtils::ReadDWORD(pStream); + m_nDuration = StreamUtils::ReadLONG(pStream); +} diff --git a/MsBinaryFile/PptFile/Records/ExWAVAudioEmbeddedContainer.h b/MsBinaryFile/PptFile/Records/ExWAVAudioEmbeddedContainer.h index 053d6db953..c7c5733871 100644 --- a/MsBinaryFile/PptFile/Records/ExWAVAudioEmbeddedContainer.h +++ b/MsBinaryFile/PptFile/Records/ExWAVAudioEmbeddedContainer.h @@ -37,33 +37,9 @@ class CRecordWAVAudioEmbeddedContainer : public CRecordsContainer public: CRecordExMediaAtom m_oMedia; - _UINT32 m_nSoundID; - LONG m_nDuration; + _UINT32 m_nSoundID = 0; + LONG m_nDuration = 0; -public: - - CRecordWAVAudioEmbeddedContainer() - { - m_nSoundID = 0; - m_nDuration = 0; - } - ~CRecordWAVAudioEmbeddedContainer() - { - } - - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - m_oHeader = oHeader; - - SRecordHeader oExHeader; - oExHeader.ReadFromStream(pStream); - - m_oMedia.ReadFromStream(oExHeader, pStream); - - StreamUtils::StreamSkip(8, pStream); - - m_nSoundID = StreamUtils::ReadDWORD(pStream); - m_nDuration = StreamUtils::ReadLONG(pStream); - } -}; \ No newline at end of file + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) override; +}; diff --git a/MsBinaryFile/PptFile/Records/ExWAVAudioLinkContainer.cpp b/MsBinaryFile/PptFile/Records/ExWAVAudioLinkContainer.cpp new file mode 100644 index 0000000000..72f74668f7 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/ExWAVAudioLinkContainer.cpp @@ -0,0 +1,7 @@ +#include "ExWAVAudioLinkContainer.h" + + +void CRecordWAVAudioLinkContainer::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + CRecordsContainer::ReadFromStream(oHeader, pStream); +} diff --git a/MsBinaryFile/PptFile/Records/ExWAVAudioLinkContainer.h b/MsBinaryFile/PptFile/Records/ExWAVAudioLinkContainer.h index ab072f5dc5..5b763ebfba 100644 --- a/MsBinaryFile/PptFile/Records/ExWAVAudioLinkContainer.h +++ b/MsBinaryFile/PptFile/Records/ExWAVAudioLinkContainer.h @@ -35,17 +35,5 @@ class CRecordWAVAudioLinkContainer : public CRecordsContainer { public: - - CRecordWAVAudioLinkContainer() - { - } - - ~CRecordWAVAudioLinkContainer() - { - } - - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - CRecordsContainer::ReadFromStream(oHeader, pStream); - } -}; \ No newline at end of file + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) override; +}; diff --git a/MsBinaryFile/PptFile/Records/FontCollection10Container.cpp b/MsBinaryFile/PptFile/Records/FontCollection10Container.cpp new file mode 100644 index 0000000000..b01290f9a0 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/FontCollection10Container.cpp @@ -0,0 +1,34 @@ +#include "FontCollection10Container.h" + + +CRecordFontCollection10Container::~CRecordFontCollection10Container() +{ + for (auto pEl : m_rgFontCollectionEntry) + { + RELEASEOBJECT(pEl) + } +} + +void CRecordFontCollection10Container::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + LONG lPos = 0; + StreamUtils::StreamPosition ( lPos, pStream ); + + _UINT32 lCurLen = 0; + + SRecordHeader ReadHeader; + + while ( lCurLen < m_oHeader.RecLen ) + { + if ( ReadHeader.ReadFromStream(pStream) == false) + break; + + lCurLen += 8 + ReadHeader.RecLen; + + auto pRec = new FontCollectionEntry; + pRec->ReadFromStream(pStream); + m_rgFontCollectionEntry.push_back(pRec); + } + StreamUtils::StreamSeek(lPos + m_oHeader.RecLen, pStream); +} diff --git a/MsBinaryFile/PptFile/Records/FontCollection10Container.h b/MsBinaryFile/PptFile/Records/FontCollection10Container.h index adf65c5320..caeebe6837 100644 --- a/MsBinaryFile/PptFile/Records/FontCollection10Container.h +++ b/MsBinaryFile/PptFile/Records/FontCollection10Container.h @@ -42,36 +42,8 @@ public: std::vector m_rgFontCollectionEntry; public: - virtual ~CRecordFontCollection10Container() - { - for (auto pEl : m_rgFontCollectionEntry) - { - RELEASEOBJECT(pEl) - } - } + virtual ~CRecordFontCollection10Container(); - virtual void ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) - { - m_oHeader = oHeader; - LONG lPos = 0; - StreamUtils::StreamPosition ( lPos, pStream ); - - _UINT32 lCurLen = 0; - - SRecordHeader ReadHeader; - - while ( lCurLen < m_oHeader.RecLen ) - { - if ( ReadHeader.ReadFromStream(pStream) == false) - break; - - lCurLen += 8 + ReadHeader.RecLen; - - auto pRec = new FontCollectionEntry; - pRec->ReadFromStream(pStream); - m_rgFontCollectionEntry.push_back(pRec); - } - StreamUtils::StreamSeek(lPos + m_oHeader.RecLen, pStream); - } + virtual void ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) override; }; } diff --git a/MsBinaryFile/PptFile/Records/FontEmbedFlags10Atom.cpp b/MsBinaryFile/PptFile/Records/FontEmbedFlags10Atom.cpp new file mode 100644 index 0000000000..7ea6006acb --- /dev/null +++ b/MsBinaryFile/PptFile/Records/FontEmbedFlags10Atom.cpp @@ -0,0 +1,11 @@ +#include "FontEmbedFlags10Atom.h" + + +void CRecordFontEmbedFlags10Atom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + _UINT32 flags = StreamUtils::ReadDWORD(pStream); + m_fSubset = 0x1 & flags; + m_fSubsetOptionConfirmed = 0x2 & flags; +} diff --git a/MsBinaryFile/PptFile/Records/FontEmbedFlags10Atom.h b/MsBinaryFile/PptFile/Records/FontEmbedFlags10Atom.h index 500a5b75d7..4824682490 100644 --- a/MsBinaryFile/PptFile/Records/FontEmbedFlags10Atom.h +++ b/MsBinaryFile/PptFile/Records/FontEmbedFlags10Atom.h @@ -39,17 +39,10 @@ namespace PPT_FORMAT class CRecordFontEmbedFlags10Atom : public CUnknownRecord { public: - bool m_fSubset; - bool m_fSubsetOptionConfirmed; + bool m_fSubset = false; + bool m_fSubsetOptionConfirmed = false; - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - m_oHeader = oHeader; - - _UINT32 flags = StreamUtils::ReadDWORD(pStream); - m_fSubset = 0x1 & flags; - m_fSubsetOptionConfirmed = 0x2 & flags; - } + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) override; }; } diff --git a/MsBinaryFile/PptFile/Records/FontEntityAtom.cpp b/MsBinaryFile/PptFile/Records/FontEntityAtom.cpp new file mode 100644 index 0000000000..394fda3e81 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/FontEntityAtom.cpp @@ -0,0 +1,62 @@ +#include "FontEntityAtom.h" + + +void CRecordFontEntityAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + //face name - utf16 string with 0, 64 bytes always allocated + unsigned char utf16FaceName[64+2] = {}; + + POLE::uint64 lReadByte = pStream->read(utf16FaceName, 64); + + if (sizeof(wchar_t) == 4) + { + ULONG lLen = 0; + for (lLen = 0; lLen < lReadByte; lLen +=2) + if (utf16FaceName[lLen] == 0)break; + + lLen/=2; + + UTF32 *pStrUtf32 = new UTF32 [lLen + 1]; + pStrUtf32[lLen] = 0 ; + + const UTF16 *pStrUtf16_Conv = (const UTF16 *) utf16FaceName; + UTF32 *pStrUtf32_Conv = pStrUtf32; + + if (conversionOK == ConvertUTF16toUTF32 ( &pStrUtf16_Conv, &pStrUtf16_Conv[lLen] + , &pStrUtf32_Conv, &pStrUtf32 [lLen] + , strictConversion)) + { + m_strFaceName = std::wstring((wchar_t*)pStrUtf32/*, lLen*/); + } + delete [] pStrUtf32; + } + else + { + m_strFaceName = std::wstring((wchar_t*)utf16FaceName/*, lReadByte/2*/); // по факту .. нули нам не нужны + } + m_lfCharSet = StreamUtils::ReadBYTE(pStream); + + BYTE Mem = 0; + Mem = StreamUtils::ReadBYTE(pStream); + m_bEmbedSubsetted = ((Mem & 0x01) == 0x01); + + Mem = 0; + Mem = StreamUtils::ReadBYTE(pStream); + + m_bIsRaster = ((Mem & 0x01) == 0x01); + m_bIsDevice = ((Mem & 0x02) == 0x02); + m_bIsTrueType = ((Mem & 0x04) == 0x04); + m_bIsNoFontSubstitution = ((Mem & 0x08) == 0x08); + + m_lfPitchAndFamily = StreamUtils::ReadBYTE(pStream); +} + +void CRecordFontEmbedDataBlob::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + data = std::make_pair(boost::shared_array(new unsigned char[m_oHeader.RecLen]), m_oHeader.RecLen); + pStream->read(data.first.get(), data.second); +} diff --git a/MsBinaryFile/PptFile/Records/FontEntityAtom.h b/MsBinaryFile/PptFile/Records/FontEntityAtom.h index bc001dfafc..b88da064ec 100644 --- a/MsBinaryFile/PptFile/Records/FontEntityAtom.h +++ b/MsBinaryFile/PptFile/Records/FontEntityAtom.h @@ -47,61 +47,8 @@ public: BYTE m_lfPitchAndFamily; - CRecordFontEntityAtom(){} - ~CRecordFontEntityAtom(){} - - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - m_oHeader = oHeader; - - //face name - utf16 string with 0, 64 bytes always allocated - unsigned char utf16FaceName[64+2] = {}; - - POLE::uint64 lReadByte = pStream->read(utf16FaceName, 64); - - if (sizeof(wchar_t) == 4) - { - ULONG lLen = 0; - for (lLen = 0; lLen < lReadByte; lLen +=2) - if (utf16FaceName[lLen] == 0)break; - - lLen/=2; - - UTF32 *pStrUtf32 = new UTF32 [lLen + 1]; - pStrUtf32[lLen] = 0 ; - - const UTF16 *pStrUtf16_Conv = (const UTF16 *) utf16FaceName; - UTF32 *pStrUtf32_Conv = pStrUtf32; - - if (conversionOK == ConvertUTF16toUTF32 ( &pStrUtf16_Conv, &pStrUtf16_Conv[lLen] - , &pStrUtf32_Conv, &pStrUtf32 [lLen] - , strictConversion)) - { - m_strFaceName = std::wstring((wchar_t*)pStrUtf32/*, lLen*/); - } - delete [] pStrUtf32; - } - else - { - m_strFaceName = std::wstring((wchar_t*)utf16FaceName/*, lReadByte/2*/); // по факту .. нули нам не нужны - } - m_lfCharSet = StreamUtils::ReadBYTE(pStream); - - BYTE Mem = 0; - Mem = StreamUtils::ReadBYTE(pStream); - m_bEmbedSubsetted = ((Mem & 0x01) == 0x01); - - Mem = 0; - Mem = StreamUtils::ReadBYTE(pStream); - - m_bIsRaster = ((Mem & 0x01) == 0x01); - m_bIsDevice = ((Mem & 0x02) == 0x02); - m_bIsTrueType = ((Mem & 0x04) == 0x04); - m_bIsNoFontSubstitution = ((Mem & 0x08) == 0x08); - - m_lfPitchAndFamily = StreamUtils::ReadBYTE(pStream); - } + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) override; }; @@ -110,15 +57,6 @@ class CRecordFontEmbedDataBlob : public CUnknownRecord public: std::pair, _INT32> data; //font data of an embedded font - - CRecordFontEmbedDataBlob(){} - ~CRecordFontEmbedDataBlob(){} - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - m_oHeader = oHeader; - - data = std::make_pair(boost::shared_array(new unsigned char[m_oHeader.RecLen]), m_oHeader.RecLen); - pStream->read(data.first.get(), data.second); - } -}; \ No newline at end of file + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) override; +}; diff --git a/MsBinaryFile/PptFile/Records/GridSpacing10Atom.cpp b/MsBinaryFile/PptFile/Records/GridSpacing10Atom.cpp new file mode 100644 index 0000000000..24d8e064fa --- /dev/null +++ b/MsBinaryFile/PptFile/Records/GridSpacing10Atom.cpp @@ -0,0 +1,7 @@ +#include "GridSpacing10Atom.h" + + +void CRecordGridSpacing10Atom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + return CUnknownRecord::ReadFromStream(oHeader, pStream); +} diff --git a/MsBinaryFile/PptFile/Records/GridSpacing10Atom.h b/MsBinaryFile/PptFile/Records/GridSpacing10Atom.h index 348c50bc7e..b16f414b80 100644 --- a/MsBinaryFile/PptFile/Records/GridSpacing10Atom.h +++ b/MsBinaryFile/PptFile/Records/GridSpacing10Atom.h @@ -35,19 +35,9 @@ class CRecordGridSpacing10Atom : public CUnknownRecord { public: - INT m_nX; - INT m_nY; - - CRecordGridSpacing10Atom() - { - } + INT m_nX = 0; + INT m_nY = 0; - ~CRecordGridSpacing10Atom() - { - } - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - return CUnknownRecord::ReadFromStream(oHeader, pStream); - } -}; \ No newline at end of file + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) override; +}; diff --git a/MsBinaryFile/PptFile/Records/GuideAtom.cpp b/MsBinaryFile/PptFile/Records/GuideAtom.cpp new file mode 100644 index 0000000000..8116b5878f --- /dev/null +++ b/MsBinaryFile/PptFile/Records/GuideAtom.cpp @@ -0,0 +1,9 @@ +#include "GuideAtom.h" + + +void CRecordGuideAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + m_nType = StreamUtils::ReadDWORD(pStream); + m_nPos = StreamUtils::ReadDWORD(pStream); +} diff --git a/MsBinaryFile/PptFile/Records/GuideAtom.h b/MsBinaryFile/PptFile/Records/GuideAtom.h index 07dcb4bbac..b6b672bbd1 100644 --- a/MsBinaryFile/PptFile/Records/GuideAtom.h +++ b/MsBinaryFile/PptFile/Records/GuideAtom.h @@ -34,23 +34,10 @@ class CRecordGuideAtom : public CUnknownRecord { +public: _UINT32 m_nType; _UINT32 m_nPos; -public: - - CRecordGuideAtom() - { - } - ~CRecordGuideAtom() - { - } - - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - m_oHeader = oHeader; - m_nType = StreamUtils::ReadDWORD(pStream); - m_nPos = StreamUtils::ReadDWORD(pStream); - } -}; \ No newline at end of file + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) override; +}; diff --git a/MsBinaryFile/PptFile/Records/HeadersFootersAtom.cpp b/MsBinaryFile/PptFile/Records/HeadersFootersAtom.cpp new file mode 100644 index 0000000000..b89fa56f8c --- /dev/null +++ b/MsBinaryFile/PptFile/Records/HeadersFootersAtom.cpp @@ -0,0 +1,90 @@ +#include "HeadersFootersAtom.h" + + +void CRecordHeadersFootersAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + m_nFormatID = StreamUtils::ReadWORD(pStream); + + BYTE nFlag = StreamUtils::ReadBYTE(pStream); + m_bHasDate = ((nFlag & 0x01) == 0x01); + m_bHasTodayDate = ((nFlag & 0x02) == 0x02); + m_bHasUserDate = ((nFlag & 0x04) == 0x04); + m_bHasSlideNumber = ((nFlag & 0x08) == 0x08); + m_bHasHeader = ((nFlag & 0x10) == 0x10); + m_bHasFooter = ((nFlag & 0x20) == 0x20); + + StreamUtils::ReadBYTE(pStream);//reserved +} + +void CRecordRoundTripHeaderFooterDefaults12Atom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + BYTE nFlag = StreamUtils::ReadBYTE(pStream); + + m_bIncludeDate = ((nFlag & 0x04) == 0x04); + m_bIncludeFooter = ((nFlag & 0x08) == 0x08); + m_bIncludeHeader = ((nFlag & 0x10) == 0x10); + m_bIncludeSlideNumber = ((nFlag & 0x20) == 0x20); +} + +void CRecordMetaCharacterAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + if (oHeader.RecLen >=4) + { + m_nPosition = StreamUtils::ReadDWORD(pStream); + } +} + +void CRecordRTFDateTimeMetaAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + CRecordGenericDateMetaAtom::ReadFromStream(oHeader, pStream); + + m_strFormat = StreamUtils::ReadStringA(pStream, 128); +} + +void CRecordDateTimeMetaAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + POLE::uint64 lPosition = pStream->tell(); + + CRecordGenericDateMetaAtom::ReadFromStream(oHeader, pStream); + + if (oHeader.RecLen == 8) + { + m_FormatID = StreamUtils::ReadDWORD(pStream); + } + else if (oHeader.RecLen >4) + { + m_FormatID = StreamUtils::ReadBYTE(pStream); + StreamUtils::StreamSeek((long)(lPosition + m_oHeader.RecLen), pStream); + } +} + +void CRecordHeadersFootersContainer::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + CRecordsContainer::ReadFromStream(oHeader, pStream); + + for (size_t i = 0 ; i < m_arRecords.size(); i++) + { + switch(m_arRecords[i]->m_oHeader.RecType) + { + case 0x0FDA: + m_oHeadersFootersAtom = dynamic_cast(m_arRecords[i]); + break; + case 0xFBA: + { + CRecordCString *str = dynamic_cast(m_arRecords[i]); + switch(m_arRecords[i]->m_oHeader.RecInstance) + { + case 0x000: m_HeadersFootersString[0].push_back(str->m_strText); break; + case 0x001: m_HeadersFootersString[1].push_back(str->m_strText); break; + case 0x002: m_HeadersFootersString[2].push_back(str->m_strText); break; + } + }break; + } + } +} diff --git a/MsBinaryFile/PptFile/Records/HeadersFootersAtom.h b/MsBinaryFile/PptFile/Records/HeadersFootersAtom.h index 2a5119204f..61f0ca8934 100644 --- a/MsBinaryFile/PptFile/Records/HeadersFootersAtom.h +++ b/MsBinaryFile/PptFile/Records/HeadersFootersAtom.h @@ -38,37 +38,15 @@ class CRecordHeadersFootersAtom : public CUnknownRecord public: WORD m_nFormatID; - bool m_bHasDate; + bool m_bHasDate; bool m_bHasTodayDate; bool m_bHasUserDate; bool m_bHasSlideNumber; bool m_bHasHeader; - bool m_bHasFooter; + bool m_bHasFooter; - CRecordHeadersFootersAtom() - { - } - ~CRecordHeadersFootersAtom() - { - } - - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - m_oHeader = oHeader; - - m_nFormatID = StreamUtils::ReadWORD(pStream); - - BYTE nFlag = StreamUtils::ReadBYTE(pStream); - m_bHasDate = ((nFlag & 0x01) == 0x01); - m_bHasTodayDate = ((nFlag & 0x02) == 0x02); - m_bHasUserDate = ((nFlag & 0x04) == 0x04); - m_bHasSlideNumber = ((nFlag & 0x08) == 0x08); - m_bHasHeader = ((nFlag & 0x10) == 0x10); - m_bHasFooter = ((nFlag & 0x20) == 0x20); - - StreamUtils::ReadBYTE(pStream);//reserved - } + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) override; }; @@ -82,51 +60,17 @@ public: bool m_bIncludeHeader; bool m_bIncludeSlideNumber; - CRecordRoundTripHeaderFooterDefaults12Atom() - { - } - ~CRecordRoundTripHeaderFooterDefaults12Atom() - { - } - - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - m_oHeader = oHeader; - - BYTE nFlag = StreamUtils::ReadBYTE(pStream); - - m_bIncludeDate = ((nFlag & 0x04) == 0x04); - m_bIncludeFooter = ((nFlag & 0x08) == 0x08); - m_bIncludeHeader = ((nFlag & 0x10) == 0x10); - m_bIncludeSlideNumber = ((nFlag & 0x20) == 0x20); - } + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) override; }; class CRecordMetaCharacterAtom : public CUnknownRecord { public: - _UINT32 m_nPosition; + _UINT32 m_nPosition = -1; - CRecordMetaCharacterAtom() - { - m_nPosition = -1; - } - - ~CRecordMetaCharacterAtom() - { - } - - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - m_oHeader = oHeader; - - if (oHeader.RecLen >=4) - { - m_nPosition = StreamUtils::ReadDWORD(pStream); - } - } + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) override; }; class CRecordGenericDateMetaAtom : public CRecordMetaCharacterAtom @@ -138,35 +82,17 @@ class CRecordRTFDateTimeMetaAtom : public CRecordGenericDateMetaAtom public: std::string m_strFormat; - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - CRecordGenericDateMetaAtom::ReadFromStream(oHeader, pStream); - m_strFormat = StreamUtils::ReadStringA(pStream, 128); - } + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream); }; class CRecordDateTimeMetaAtom : public CRecordGenericDateMetaAtom { public: _UINT32 m_FormatID; + - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - POLE::uint64 lPosition = pStream->tell(); - - CRecordGenericDateMetaAtom::ReadFromStream(oHeader, pStream); - - if (oHeader.RecLen == 8) - { - m_FormatID = StreamUtils::ReadDWORD(pStream); - } - else if (oHeader.RecLen >4) - { - m_FormatID = StreamUtils::ReadBYTE(pStream); - StreamUtils::StreamSeek((long)(lPosition + m_oHeader.RecLen), pStream); - } - } + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) override; }; @@ -187,36 +113,8 @@ class CRecordHeadersFootersContainer : public CRecordsContainer public: vector_string m_HeadersFootersString[3]; //0-dates, 1 - headers, 2 - footers - CRecordHeadersFootersAtom *m_oHeadersFootersAtom; + CRecordHeadersFootersAtom *m_oHeadersFootersAtom = nullptr; - CRecordHeadersFootersContainer() - { - m_oHeadersFootersAtom = NULL; - } - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - CRecordsContainer::ReadFromStream(oHeader, pStream); - - for (size_t i = 0 ; i < m_arRecords.size(); i++) - { - switch(m_arRecords[i]->m_oHeader.RecType) - { - case 0x0FDA: - m_oHeadersFootersAtom = dynamic_cast(m_arRecords[i]); - break; - case 0xFBA: - { - CRecordCString *str = dynamic_cast(m_arRecords[i]); - switch(m_arRecords[i]->m_oHeader.RecInstance) - { - case 0x000: m_HeadersFootersString[0].push_back(str->m_strText); break; - case 0x001: m_HeadersFootersString[1].push_back(str->m_strText); break; - case 0x002: m_HeadersFootersString[2].push_back(str->m_strText); break; - } - }break; - } - } - - } + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) override; }; diff --git a/MsBinaryFile/PptFile/Records/InteractiveInfoAtom.cpp b/MsBinaryFile/PptFile/Records/InteractiveInfoAtom.cpp new file mode 100644 index 0000000000..e7468e2518 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/InteractiveInfoAtom.cpp @@ -0,0 +1,26 @@ +#include "InteractiveInfoAtom.h" + + +void CRecordInteractiveInfoAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + m_nSoundIdRef = StreamUtils::ReadDWORD(pStream); + m_nExHyperlinkIdRef = StreamUtils::ReadDWORD(pStream); + m_nAction = StreamUtils::ReadBYTE(pStream); + m_nOleVerb = StreamUtils::ReadBYTE(pStream); + m_nJump = StreamUtils::ReadBYTE(pStream); + + BYTE nFlag = StreamUtils::ReadBYTE(pStream); + + m_bAnimated = ((nFlag & 0x01) == 0x01); + m_bStopSound = ((nFlag & 0x02) == 0x02); + m_bCustomShowReturn = ((nFlag & 0x04) == 0x04); + m_bVisited = ((nFlag & 0x08) == 0x08); + + m_nHyperlinkType = StreamUtils::ReadBYTE(pStream); + StreamUtils::StreamSkip(3, pStream); +// if (m_nExHyperlinkIdRef) +// std::wcout << L"HyperlinkIDRef: " << m_nExHyperlinkIdRef << std::endl;; + +} diff --git a/MsBinaryFile/PptFile/Records/InteractiveInfoAtom.h b/MsBinaryFile/PptFile/Records/InteractiveInfoAtom.h index 9c1c6396cc..27f8010804 100644 --- a/MsBinaryFile/PptFile/Records/InteractiveInfoAtom.h +++ b/MsBinaryFile/PptFile/Records/InteractiveInfoAtom.h @@ -48,35 +48,6 @@ public: bool m_bCustomShowReturn; bool m_bVisited; - CRecordInteractiveInfoAtom() - { - } - ~CRecordInteractiveInfoAtom() - { - } - - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - m_oHeader = oHeader; - - m_nSoundIdRef = StreamUtils::ReadDWORD(pStream); - m_nExHyperlinkIdRef = StreamUtils::ReadDWORD(pStream); - m_nAction = StreamUtils::ReadBYTE(pStream); - m_nOleVerb = StreamUtils::ReadBYTE(pStream); - m_nJump = StreamUtils::ReadBYTE(pStream); - - BYTE nFlag = StreamUtils::ReadBYTE(pStream); - - m_bAnimated = ((nFlag & 0x01) == 0x01); - m_bStopSound = ((nFlag & 0x02) == 0x02); - m_bCustomShowReturn = ((nFlag & 0x04) == 0x04); - m_bVisited = ((nFlag & 0x08) == 0x08); - - m_nHyperlinkType = StreamUtils::ReadBYTE(pStream); - StreamUtils::StreamSkip(3, pStream); -// if (m_nExHyperlinkIdRef) -// std::wcout << L"HyperlinkIDRef: " << m_nExHyperlinkIdRef << std::endl;; - - } + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) override; }; diff --git a/MsBinaryFile/PptFile/Records/KinsokuAtom.cpp b/MsBinaryFile/PptFile/Records/KinsokuAtom.cpp new file mode 100644 index 0000000000..68b543993d --- /dev/null +++ b/MsBinaryFile/PptFile/Records/KinsokuAtom.cpp @@ -0,0 +1,9 @@ +#include "KinsokuAtom.h" + + +void CRecordKinsokuAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + m_nLevel = StreamUtils::ReadDWORD(pStream); +} diff --git a/MsBinaryFile/PptFile/Records/KinsokuAtom.h b/MsBinaryFile/PptFile/Records/KinsokuAtom.h index aef9aef84a..314c3c0639 100644 --- a/MsBinaryFile/PptFile/Records/KinsokuAtom.h +++ b/MsBinaryFile/PptFile/Records/KinsokuAtom.h @@ -35,21 +35,8 @@ class CRecordKinsokuAtom : public CUnknownRecord { public: - _UINT32 m_nLevel; - - CRecordKinsokuAtom() - { - } + _UINT32 m_nLevel = 0; - ~CRecordKinsokuAtom() - { - } - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - m_oHeader = oHeader; - - m_nLevel = StreamUtils::ReadDWORD(pStream); - } - -}; \ No newline at end of file + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) override; +}; diff --git a/MsBinaryFile/PptFile/Records/KinsokuContainer.cpp b/MsBinaryFile/PptFile/Records/KinsokuContainer.cpp new file mode 100644 index 0000000000..01dd294489 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/KinsokuContainer.cpp @@ -0,0 +1,8 @@ +#include "KinsokuContainer.h" + + +void CRecordKinsokuContainer::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + CUnknownRecord::ReadFromStream(m_oHeader, pStream); +} diff --git a/MsBinaryFile/PptFile/Records/KinsokuContainer.h b/MsBinaryFile/PptFile/Records/KinsokuContainer.h index 301ef8ae2c..ebb3584a3f 100644 --- a/MsBinaryFile/PptFile/Records/KinsokuContainer.h +++ b/MsBinaryFile/PptFile/Records/KinsokuContainer.h @@ -38,21 +38,10 @@ class CRecordKinsokuContainer : public CUnknownRecord { public: - _UINT32 m_nLevel; + _UINT32 m_nLevel = 0; - CRecordKinsokuContainer() - { - } - ~CRecordKinsokuContainer() - { - } - - virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ) - { - m_oHeader = oHeader; - CUnknownRecord::ReadFromStream(m_oHeader, pStream); - } + virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ) override; public: diff --git a/MsBinaryFile/PptFile/Records/KinsokuFollowingAtom.cpp b/MsBinaryFile/PptFile/Records/KinsokuFollowingAtom.cpp new file mode 100644 index 0000000000..beec8612c8 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/KinsokuFollowingAtom.cpp @@ -0,0 +1,9 @@ +#include "KinsokuFollowingAtom.h" + + +void CRecordKinsokuFollowingAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + m_arKinsokuFollowing = StreamUtils::ReadStringW(pStream, m_oHeader.RecLen - sizeof (oHeader)); +} diff --git a/MsBinaryFile/PptFile/Records/KinsokuFollowingAtom.h b/MsBinaryFile/PptFile/Records/KinsokuFollowingAtom.h index 75ae3f5466..a7275f7266 100644 --- a/MsBinaryFile/PptFile/Records/KinsokuFollowingAtom.h +++ b/MsBinaryFile/PptFile/Records/KinsokuFollowingAtom.h @@ -37,18 +37,6 @@ class CRecordKinsokuFollowingAtom : public CUnknownRecord public: std::wstring m_arKinsokuFollowing; - CRecordKinsokuFollowingAtom() - { - } - ~CRecordKinsokuFollowingAtom() - { - } - - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - m_oHeader = oHeader; - - m_arKinsokuFollowing = StreamUtils::ReadStringW(pStream, m_oHeader.RecLen - sizeof (oHeader)); - } + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) override; }; diff --git a/MsBinaryFile/PptFile/Records/KinsokuLeadingAtom.cpp b/MsBinaryFile/PptFile/Records/KinsokuLeadingAtom.cpp new file mode 100644 index 0000000000..98ee8503ce --- /dev/null +++ b/MsBinaryFile/PptFile/Records/KinsokuLeadingAtom.cpp @@ -0,0 +1,9 @@ +#include "KinsokuLeadingAtom.h" + + +void CRecordKinsokuLeadingAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + m_arKinsokuLeading = StreamUtils::ReadStringW(pStream, m_oHeader.RecLen - sizeof (oHeader)); +} diff --git a/MsBinaryFile/PptFile/Records/KinsokuLeadingAtom.h b/MsBinaryFile/PptFile/Records/KinsokuLeadingAtom.h index 58e1982fb2..631af89a26 100644 --- a/MsBinaryFile/PptFile/Records/KinsokuLeadingAtom.h +++ b/MsBinaryFile/PptFile/Records/KinsokuLeadingAtom.h @@ -37,18 +37,6 @@ class CRecordKinsokuLeadingAtom : public CUnknownRecord public: std::wstring m_arKinsokuLeading; - CRecordKinsokuLeadingAtom() - { - } - ~CRecordKinsokuLeadingAtom() - { - } - - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - m_oHeader = oHeader; - - m_arKinsokuLeading = StreamUtils::ReadStringW(pStream, m_oHeader.RecLen - sizeof (oHeader)); - } + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) override; }; diff --git a/MsBinaryFile/PptFile/Records/LinkedShape10Atom.cpp b/MsBinaryFile/PptFile/Records/LinkedShape10Atom.cpp new file mode 100644 index 0000000000..b33c1829c6 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/LinkedShape10Atom.cpp @@ -0,0 +1,10 @@ +#include "LinkedShape10Atom.h" + + +void CRecordLinkedShape10Atom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + m_nShapeIdRef = StreamUtils::ReadLONG(pStream); + m_nLinkedShapeIdRef = StreamUtils::ReadLONG(pStream); +} diff --git a/MsBinaryFile/PptFile/Records/LinkedShape10Atom.h b/MsBinaryFile/PptFile/Records/LinkedShape10Atom.h index 6a0593710a..4265f47373 100644 --- a/MsBinaryFile/PptFile/Records/LinkedShape10Atom.h +++ b/MsBinaryFile/PptFile/Records/LinkedShape10Atom.h @@ -38,17 +38,11 @@ namespace PPT_FORMAT { class CRecordLinkedShape10Atom : public CUnknownRecord { -public: -void ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) override -{ - m_oHeader = oHeader; - - m_nShapeIdRef = StreamUtils::ReadLONG(pStream); - m_nLinkedShapeIdRef = StreamUtils::ReadLONG(pStream); -} - public: _UINT32 m_nShapeIdRef; _UINT32 m_nLinkedShapeIdRef; + + + void ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) override; }; } diff --git a/MsBinaryFile/PptFile/Records/LinkedSlide10Atom.cpp b/MsBinaryFile/PptFile/Records/LinkedSlide10Atom.cpp new file mode 100644 index 0000000000..558ae70685 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/LinkedSlide10Atom.cpp @@ -0,0 +1,10 @@ +#include "LinkedSlide10Atom.h" + + +void CRecordLinkedSlide10Atom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + m_nLinkedSlideIdRef = StreamUtils::ReadLONG(pStream); + m_cLinkedShapes = StreamUtils::ReadLONG(pStream); +} diff --git a/MsBinaryFile/PptFile/Records/LinkedSlide10Atom.h b/MsBinaryFile/PptFile/Records/LinkedSlide10Atom.h index 63d60a2df8..a2cf5eaccb 100644 --- a/MsBinaryFile/PptFile/Records/LinkedSlide10Atom.h +++ b/MsBinaryFile/PptFile/Records/LinkedSlide10Atom.h @@ -39,17 +39,11 @@ typedef _UINT32 SlideIdRef; class CRecordLinkedSlide10Atom : public CUnknownRecord { -public: -void ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) override -{ - m_oHeader = oHeader; - - m_nLinkedSlideIdRef = StreamUtils::ReadLONG(pStream); - m_cLinkedShapes = StreamUtils::ReadLONG(pStream); -} - public: SlideIdRef m_nLinkedSlideIdRef; _INT32 m_cLinkedShapes; + + + void ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) override; }; } diff --git a/MsBinaryFile/PptFile/Records/MasterPersistAtom.cpp b/MsBinaryFile/PptFile/Records/MasterPersistAtom.cpp new file mode 100644 index 0000000000..5226e2cb91 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/MasterPersistAtom.cpp @@ -0,0 +1,7 @@ +#include "MasterPersistAtom.h" + + +void CRecordMasterPersistAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + return CUnknownRecord::ReadFromStream(oHeader, pStream); +} diff --git a/MsBinaryFile/PptFile/Records/MasterPersistAtom.h b/MsBinaryFile/PptFile/Records/MasterPersistAtom.h index 4ba6786c70..db2d4fa38f 100644 --- a/MsBinaryFile/PptFile/Records/MasterPersistAtom.h +++ b/MsBinaryFile/PptFile/Records/MasterPersistAtom.h @@ -37,18 +37,7 @@ class CRecordMasterPersistAtom : public CUnknownRecord public: UINT m_nPsrRef; INT m_nMasterID; - - CRecordMasterPersistAtom() - { - } - ~CRecordMasterPersistAtom() - { - } - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - return CUnknownRecord::ReadFromStream(oHeader, pStream); - } - -}; \ No newline at end of file + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) override; +}; diff --git a/MsBinaryFile/PptFile/Records/MasterTextPropAtom.cpp b/MsBinaryFile/PptFile/Records/MasterTextPropAtom.cpp new file mode 100644 index 0000000000..08aff313fc --- /dev/null +++ b/MsBinaryFile/PptFile/Records/MasterTextPropAtom.cpp @@ -0,0 +1,39 @@ +#include "MasterTextPropAtom.h" + + +CRecordMasterTextPropAtom::SMasterTextPropRun::SMasterTextPropRun() +{ + +} + +CRecordMasterTextPropAtom::SMasterTextPropRun::SMasterTextPropRun(const SMasterTextPropRun &oSrc) +{ + lCount = oSrc.lCount; + lIndentLevel = oSrc.lIndentLevel; +} + +CRecordMasterTextPropAtom::SMasterTextPropRun &CRecordMasterTextPropAtom::SMasterTextPropRun::operator=(const SMasterTextPropRun &oSrc) +{ + lCount = oSrc.lCount; + lIndentLevel = oSrc.lIndentLevel; + + return *this; +} + +void CRecordMasterTextPropAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + m_arrProps.clear(); + + size_t nCount = m_oHeader.RecLen / 6; + while (nCount != 0) + { + --nCount; + + SMasterTextPropRun oRun; + oRun.lCount = StreamUtils::ReadDWORD(pStream); + oRun.lIndentLevel = StreamUtils::ReadWORD(pStream); + + m_arrProps.push_back(oRun); + } +} diff --git a/MsBinaryFile/PptFile/Records/MasterTextPropAtom.h b/MsBinaryFile/PptFile/Records/MasterTextPropAtom.h index 1be6e84e90..9230ad98a5 100644 --- a/MsBinaryFile/PptFile/Records/MasterTextPropAtom.h +++ b/MsBinaryFile/PptFile/Records/MasterTextPropAtom.h @@ -37,56 +37,16 @@ class CRecordMasterTextPropAtom : public CUnknownRecord public: struct SMasterTextPropRun { - _UINT32 lCount; - unsigned short lIndentLevel; + _UINT32 lCount = 0; + unsigned short lIndentLevel = 0; - SMasterTextPropRun() - { - lCount = 0; - lIndentLevel = 0; - } - - SMasterTextPropRun(const SMasterTextPropRun& oSrc) - { - lCount = oSrc.lCount; - lIndentLevel = oSrc.lIndentLevel; - } - - SMasterTextPropRun& operator=(const SMasterTextPropRun& oSrc) - { - lCount = oSrc.lCount; - lIndentLevel = oSrc.lIndentLevel; - - return *this; - } + SMasterTextPropRun(); + SMasterTextPropRun(const SMasterTextPropRun& oSrc); + SMasterTextPropRun& operator=(const SMasterTextPropRun& oSrc); }; std::vector m_arrProps; - CRecordMasterTextPropAtom() - { - } - ~CRecordMasterTextPropAtom() - { - } - - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - m_oHeader = oHeader; - m_arrProps.clear(); - - size_t nCount = m_oHeader.RecLen / 6; - while (nCount != 0) - { - --nCount; - - SMasterTextPropRun oRun; - oRun.lCount = StreamUtils::ReadDWORD(pStream); - oRun.lIndentLevel = StreamUtils::ReadWORD(pStream); - - m_arrProps.push_back(oRun); - } - } - -}; \ No newline at end of file + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) override; +}; diff --git a/MsBinaryFile/PptFile/Records/MetafileBlob.cpp b/MsBinaryFile/PptFile/Records/MetafileBlob.cpp new file mode 100644 index 0000000000..a6d4e98add --- /dev/null +++ b/MsBinaryFile/PptFile/Records/MetafileBlob.cpp @@ -0,0 +1,28 @@ +#include "MetafileBlob.h" + + +CRecordMetafileBlob::CRecordMetafileBlob() : + m_nMM(-1), m_nExtX(-1), m_nExtY(-1), m_pData(nullptr) +{ + +} +CRecordMetafileBlob::~CRecordMetafileBlob() +{ + RELEASEOBJECT (m_pData) +} + +void CRecordMetafileBlob::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + m_nMM = StreamUtils::ReadSHORT(pStream); + m_nExtX = StreamUtils::ReadSHORT(pStream); + m_nExtY = StreamUtils::ReadSHORT(pStream); + + const int dataLen = m_oHeader.RecLen - 6; + if (dataLen > 6) + { + m_pData = new BYTE[dataLen]; + pStream->read(m_pData, dataLen); + } +} diff --git a/MsBinaryFile/PptFile/Records/MetafileBlob.h b/MsBinaryFile/PptFile/Records/MetafileBlob.h index b49671c7ad..2c32a7ba50 100644 --- a/MsBinaryFile/PptFile/Records/MetafileBlob.h +++ b/MsBinaryFile/PptFile/Records/MetafileBlob.h @@ -42,31 +42,9 @@ public: SHORT m_nExtY; BYTE* m_pData; - CRecordMetafileBlob() : - m_nMM(-1), m_nExtX(-1), m_nExtY(-1), m_pData(nullptr) - { + CRecordMetafileBlob(); + ~CRecordMetafileBlob(); - } - - ~CRecordMetafileBlob() - { - RELEASEOBJECT (m_pData) - } - - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - m_oHeader = oHeader; - - m_nMM = StreamUtils::ReadSHORT(pStream); - m_nExtX = StreamUtils::ReadSHORT(pStream); - m_nExtY = StreamUtils::ReadSHORT(pStream); - - const int dataLen = m_oHeader.RecLen - 6; - if (dataLen > 6) - { - m_pData = new BYTE[dataLen]; - pStream->read(m_pData, dataLen); - } - } + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) override; }; diff --git a/MsBinaryFile/PptFile/Records/MouseInteractiveInfoContainer.cpp b/MsBinaryFile/PptFile/Records/MouseInteractiveInfoContainer.cpp new file mode 100644 index 0000000000..1718b606de --- /dev/null +++ b/MsBinaryFile/PptFile/Records/MouseInteractiveInfoContainer.cpp @@ -0,0 +1,19 @@ +#include "MouseInteractiveInfoContainer.h" + + +void CRecordMouseInteractiveInfoContainer::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + isOver = oHeader.RecInstance; + + SRecordHeader header; + header.ReadFromStream(pStream); + interactiveInfoAtom.ReadFromStream(header, pStream); + + if (m_oHeader.RecLen > 24) + { + header.ReadFromStream(pStream); + macroNameAtom.reset(new CRecordCString); + macroNameAtom->ReadFromStream(header, pStream); + } +} diff --git a/MsBinaryFile/PptFile/Records/MouseInteractiveInfoContainer.h b/MsBinaryFile/PptFile/Records/MouseInteractiveInfoContainer.h index c20fd2d88b..5d2ba2d17c 100644 --- a/MsBinaryFile/PptFile/Records/MouseInteractiveInfoContainer.h +++ b/MsBinaryFile/PptFile/Records/MouseInteractiveInfoContainer.h @@ -38,31 +38,8 @@ class CRecordMouseInteractiveInfoContainer : public CUnknownRecord public: CRecordInteractiveInfoAtom interactiveInfoAtom; nullable macroNameAtom; - bool isOver; // click = 0, over = 1 + bool isOver = false; // click = 0, over = 1 - CRecordMouseInteractiveInfoContainer() : - isOver(false) - { - } - ~CRecordMouseInteractiveInfoContainer() - { - } - - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - m_oHeader = oHeader; - isOver = oHeader.RecInstance; - - SRecordHeader header; - header.ReadFromStream(pStream); - interactiveInfoAtom.ReadFromStream(header, pStream); - - if (m_oHeader.RecLen > 24) - { - header.ReadFromStream(pStream); - macroNameAtom.reset(new CRecordCString); - macroNameAtom->ReadFromStream(header, pStream); - } - } + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) override; }; diff --git a/MsBinaryFile/PptFile/Records/MouseTextInteractiveInfoAtom.cpp b/MsBinaryFile/PptFile/Records/MouseTextInteractiveInfoAtom.cpp new file mode 100644 index 0000000000..c64036f72e --- /dev/null +++ b/MsBinaryFile/PptFile/Records/MouseTextInteractiveInfoAtom.cpp @@ -0,0 +1,7 @@ +#include "MouseTextInteractiveInfoAtom.h" + + +void CRecordMouseTextInteractiveInfoAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + return CUnknownRecord::ReadFromStream(oHeader, pStream); +} diff --git a/MsBinaryFile/PptFile/Records/MouseTextInteractiveInfoAtom.h b/MsBinaryFile/PptFile/Records/MouseTextInteractiveInfoAtom.h index a6e294f69f..fe949a7b01 100644 --- a/MsBinaryFile/PptFile/Records/MouseTextInteractiveInfoAtom.h +++ b/MsBinaryFile/PptFile/Records/MouseTextInteractiveInfoAtom.h @@ -36,17 +36,7 @@ class CRecordMouseTextInteractiveInfoAtom : public CUnknownRecord { public: STextRange m_oRange; - - CRecordMouseTextInteractiveInfoAtom() - { - } - ~CRecordMouseTextInteractiveInfoAtom() - { - } - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - return CUnknownRecord::ReadFromStream(oHeader, pStream); - } -}; \ No newline at end of file + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) override; +}; diff --git a/MsBinaryFile/PptFile/Records/NamedShowSlidesAtom.cpp b/MsBinaryFile/PptFile/Records/NamedShowSlidesAtom.cpp new file mode 100644 index 0000000000..a26c6331b8 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/NamedShowSlidesAtom.cpp @@ -0,0 +1,7 @@ +#include "NamedShowSlidesAtom.h" + + +void CRecordNamedShowSlidesAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + return CUnknownRecord::ReadFromStream(oHeader, pStream); +} diff --git a/MsBinaryFile/PptFile/Records/NamedShowSlidesAtom.h b/MsBinaryFile/PptFile/Records/NamedShowSlidesAtom.h index 2e6a4b6d73..42fcb80114 100644 --- a/MsBinaryFile/PptFile/Records/NamedShowSlidesAtom.h +++ b/MsBinaryFile/PptFile/Records/NamedShowSlidesAtom.h @@ -36,17 +36,7 @@ class CRecordNamedShowSlidesAtom : public CUnknownRecord { public: std::vector m_arRgSlideIdRef; - - CRecordNamedShowSlidesAtom() - { - } - ~CRecordNamedShowSlidesAtom() - { - } - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - return CUnknownRecord::ReadFromStream(oHeader, pStream); - } -}; \ No newline at end of file + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) override; +}; diff --git a/MsBinaryFile/PptFile/Records/NoZoomViewInfoAtom.cpp b/MsBinaryFile/PptFile/Records/NoZoomViewInfoAtom.cpp new file mode 100644 index 0000000000..433fa7e446 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/NoZoomViewInfoAtom.cpp @@ -0,0 +1,7 @@ +#include "NoZoomViewInfoAtom.h" + + +void CRecordNoZoomViewInfoAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + return CUnknownRecord::ReadFromStream(oHeader, pStream); +} diff --git a/MsBinaryFile/PptFile/Records/NoZoomViewInfoAtom.h b/MsBinaryFile/PptFile/Records/NoZoomViewInfoAtom.h index 9ba0d035b3..5e530ef8eb 100644 --- a/MsBinaryFile/PptFile/Records/NoZoomViewInfoAtom.h +++ b/MsBinaryFile/PptFile/Records/NoZoomViewInfoAtom.h @@ -38,18 +38,8 @@ public: SScalingAtom m_oCurScale; SPointAtom m_nOrigin; - BOOL1 m_bDraftMode; - - CRecordNoZoomViewInfoAtom() - { - } + BOOL1 m_bDraftMode; - ~CRecordNoZoomViewInfoAtom() - { - } - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - return CUnknownRecord::ReadFromStream(oHeader, pStream); - } -}; \ No newline at end of file + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) override; +}; diff --git a/MsBinaryFile/PptFile/Records/NormalViewSetInfoAtom.cpp b/MsBinaryFile/PptFile/Records/NormalViewSetInfoAtom.cpp new file mode 100644 index 0000000000..e4965b6f35 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/NormalViewSetInfoAtom.cpp @@ -0,0 +1,6 @@ +#include "NormalViewSetInfoAtom.h" + +void CRecordNormalViewSetInfoAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + return CUnknownRecord::ReadFromStream(oHeader, pStream); +} diff --git a/MsBinaryFile/PptFile/Records/NormalViewSetInfoAtom.h b/MsBinaryFile/PptFile/Records/NormalViewSetInfoAtom.h index eadcc73d20..a95433adf2 100644 --- a/MsBinaryFile/PptFile/Records/NormalViewSetInfoAtom.h +++ b/MsBinaryFile/PptFile/Records/NormalViewSetInfoAtom.h @@ -44,17 +44,6 @@ public: BOOL1 m_fPreferSingleSet; BYTE m_nFlags; - - CRecordNormalViewSetInfoAtom() - { - } - ~CRecordNormalViewSetInfoAtom() - { - } - - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - return CUnknownRecord::ReadFromStream(oHeader, pStream); - } -}; \ No newline at end of file + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) override; +}; diff --git a/MsBinaryFile/PptFile/Records/NotesAtom.cpp b/MsBinaryFile/PptFile/Records/NotesAtom.cpp new file mode 100644 index 0000000000..73aae36e91 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/NotesAtom.cpp @@ -0,0 +1,16 @@ +#include "NotesAtom.h" + + +void CRecordNotesAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + m_nSlideIDRef = (UINT)StreamUtils::ReadDWORD(pStream); + + USHORT nFlag = StreamUtils::ReadWORD(pStream); + m_bMasterObjects = ((nFlag & 0x01) == 0x01); + m_bMasterScheme = ((nFlag & 0x02) == 0x02); + m_bMasterBackground = ((nFlag & 0x04) == 0x04); + + StreamUtils::StreamSkip(2, pStream); +} diff --git a/MsBinaryFile/PptFile/Records/NotesAtom.h b/MsBinaryFile/PptFile/Records/NotesAtom.h index 089a8de6a2..d39068d455 100644 --- a/MsBinaryFile/PptFile/Records/NotesAtom.h +++ b/MsBinaryFile/PptFile/Records/NotesAtom.h @@ -39,27 +39,8 @@ public: bool m_bMasterObjects; bool m_bMasterScheme; - bool m_bMasterBackground; - - CRecordNotesAtom() - { - } + bool m_bMasterBackground; - ~CRecordNotesAtom() - { - } - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - m_oHeader = oHeader; - - m_nSlideIDRef = (UINT)StreamUtils::ReadDWORD(pStream); - - USHORT nFlag = StreamUtils::ReadWORD(pStream); - m_bMasterObjects = ((nFlag & 0x01) == 0x01); - m_bMasterScheme = ((nFlag & 0x02) == 0x02); - m_bMasterBackground = ((nFlag & 0x04) == 0x04); - - StreamUtils::StreamSkip(2, pStream); - } -}; \ No newline at end of file + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) override; +}; diff --git a/MsBinaryFile/PptFile/Records/NotesPersistAtom.cpp b/MsBinaryFile/PptFile/Records/NotesPersistAtom.cpp new file mode 100644 index 0000000000..6c5507a922 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/NotesPersistAtom.cpp @@ -0,0 +1,7 @@ +#include "NotesPersistAtom.h" + + +void CRecordNotesPersistAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + return CUnknownRecord::ReadFromStream(oHeader, pStream); +} diff --git a/MsBinaryFile/PptFile/Records/NotesPersistAtom.h b/MsBinaryFile/PptFile/Records/NotesPersistAtom.h index ff082d7bc7..c3114be914 100644 --- a/MsBinaryFile/PptFile/Records/NotesPersistAtom.h +++ b/MsBinaryFile/PptFile/Records/NotesPersistAtom.h @@ -36,18 +36,8 @@ class CRecordNotesPersistAtom : public CUnknownRecord { public: UINT m_nPsrRef; - INT m_nNotesID; - - CRecordNotesPersistAtom() - { - } + INT m_nNotesID; - ~CRecordNotesPersistAtom() - { - } - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - return CUnknownRecord::ReadFromStream(oHeader, pStream); - } -}; \ No newline at end of file + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) override; +}; diff --git a/MsBinaryFile/PptFile/Records/OfficeArtClientData.cpp b/MsBinaryFile/PptFile/Records/OfficeArtClientData.cpp new file mode 100644 index 0000000000..5334e894d6 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/OfficeArtClientData.cpp @@ -0,0 +1,81 @@ +#include "OfficeArtClientData.h" + + +void CRecordShapeProgBinaryTagContainer::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + LONG lPos = 0; + StreamUtils::StreamPosition ( lPos, pStream ); + + SRecordHeader ReadHeader; + m_rec.ReadFromStream(ReadHeader, pStream); + + StreamUtils::StreamSeek(lPos + m_oHeader.RecLen, pStream); +} + +CRecordOfficeArtClientData::~CRecordOfficeArtClientData() +{ + CRecordsContainer::Clear(); + for ( size_t i = 0; i < m_rgShapeClientRoundtripData.size(); ++i ) + RELEASEOBJECT ( m_rgShapeClientRoundtripData[i] ); +} + +CRecordShapeProgBinaryTagSubContainerOrAtom *CRecordOfficeArtClientData::getProgTag(const std::wstring &tagname) +{ + for (auto* progtag : m_rgShapeClientRoundtripData) + { + if (progtag->m_pTagName->m_strText == tagname) + return progtag; + } + + return nullptr; +} + +void CRecordOfficeArtClientData::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + LONG lPos = 0; + StreamUtils::StreamPosition ( lPos, pStream ); + + UINT lCurLen = 0; + + SRecordHeader ReadHeader; + + while ( lCurLen < m_oHeader.RecLen ) + { + if ( ReadHeader.ReadFromStream(pStream) == false) + break; + + lCurLen += 8 + ReadHeader.RecLen; + + switch (ReadHeader.RecType) + { + case RT_ProgTags: + { + // ShapeProgBinaryTagContainer + ReadHeader.ReadFromStream(pStream); + + auto pRec = new CRecordShapeProgBinaryTagSubContainerOrAtom; + pRec->ReadFromStream(ReadHeader, pStream); + m_rgShapeClientRoundtripData.push_back(pRec); + break; + } + case RT_VbaInfo: + { + auto pRec = new CRecordsContainer; + pRec->ReadFromStream(ReadHeader, pStream); + break; + } + default: + IRecord* pRecord = CreateByType(ReadHeader); + pRecord->ReadFromStream(ReadHeader, pStream); + + m_arRecords.push_back(pRecord); + break; + } + + } + StreamUtils::StreamSeek(lPos + m_oHeader.RecLen, pStream); +} diff --git a/MsBinaryFile/PptFile/Records/OfficeArtClientData.h b/MsBinaryFile/PptFile/Records/OfficeArtClientData.h index 972ddc51c4..5060596fcc 100644 --- a/MsBinaryFile/PptFile/Records/OfficeArtClientData.h +++ b/MsBinaryFile/PptFile/Records/OfficeArtClientData.h @@ -43,18 +43,8 @@ class CRecordShapeProgBinaryTagContainer : public CUnknownRecord public: CRecordShapeProgBinaryTagSubContainerOrAtom m_rec; - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - m_oHeader = oHeader; - LONG lPos = 0; - StreamUtils::StreamPosition ( lPos, pStream ); - - SRecordHeader ReadHeader; - m_rec.ReadFromStream(ReadHeader, pStream); - - StreamUtils::StreamSeek(lPos + m_oHeader.RecLen, pStream); - } + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) override; }; class CRecordOfficeArtClientData : public CRecordsContainer @@ -63,70 +53,10 @@ public: std::vector m_rgShapeClientRoundtripData; - virtual ~CRecordOfficeArtClientData() - { - CRecordsContainer::Clear(); - for ( size_t i = 0; i < m_rgShapeClientRoundtripData.size(); ++i ) - RELEASEOBJECT ( m_rgShapeClientRoundtripData[i] ); - } + virtual ~CRecordOfficeArtClientData(); - CRecordShapeProgBinaryTagSubContainerOrAtom* getProgTag(const std::wstring& tagname) - { - for (auto* progtag : m_rgShapeClientRoundtripData) - { - if (progtag->m_pTagName->m_strText == tagname) - return progtag; - } + CRecordShapeProgBinaryTagSubContainerOrAtom *getProgTag(const std::wstring& tagname); - return nullptr; - } - - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - m_oHeader = oHeader; - - LONG lPos = 0; - StreamUtils::StreamPosition ( lPos, pStream ); - - UINT lCurLen = 0; - - SRecordHeader ReadHeader; - - while ( lCurLen < m_oHeader.RecLen ) - { - if ( ReadHeader.ReadFromStream(pStream) == false) - break; - - lCurLen += 8 + ReadHeader.RecLen; - - switch (ReadHeader.RecType) - { - case RT_ProgTags: - { - // ShapeProgBinaryTagContainer - ReadHeader.ReadFromStream(pStream); - - auto pRec = new CRecordShapeProgBinaryTagSubContainerOrAtom; - pRec->ReadFromStream(ReadHeader, pStream); - m_rgShapeClientRoundtripData.push_back(pRec); - break; - } - case RT_VbaInfo: - { - auto pRec = new CRecordsContainer; - pRec->ReadFromStream(ReadHeader, pStream); - break; - } - default: - IRecord* pRecord = CreateByType(ReadHeader); - pRecord->ReadFromStream(ReadHeader, pStream); - - m_arRecords.push_back(pRecord); - break; - } - - } - StreamUtils::StreamSeek(lPos + m_oHeader.RecLen, pStream); - } + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) override; }; } diff --git a/MsBinaryFile/PptFile/Records/OfficeArtClientTextbox.h b/MsBinaryFile/PptFile/Records/OfficeArtClientTextbox.h index 7d5cf239ba..8785a9c921 100644 --- a/MsBinaryFile/PptFile/Records/OfficeArtClientTextbox.h +++ b/MsBinaryFile/PptFile/Records/OfficeArtClientTextbox.h @@ -35,9 +35,4 @@ class CRecordOfficeArtClientTextbox : public CRecordsContainer { -public: - CRecordOfficeArtClientTextbox() - { - - } }; diff --git a/MsBinaryFile/PptFile/Records/OutlineTextProps9Container.cpp b/MsBinaryFile/PptFile/Records/OutlineTextProps9Container.cpp new file mode 100644 index 0000000000..4e400e6e7c --- /dev/null +++ b/MsBinaryFile/PptFile/Records/OutlineTextProps9Container.cpp @@ -0,0 +1,54 @@ +#include "OutlineTextProps9Container.h" + + +void CRecordOutlineTextProps9Entry::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + CRecordOutlineTextPropsHeaderExAtom::ReadFromStream(oHeader, pStream); + + SRecordHeader ReadHeader; + ReadHeader.ReadFromStream(pStream); + + if (ReadHeader.bBadHeader) + { + oHeader.bBadHeader = true; // GZoabli_PhD.ppt + return; + } + + m_styleTextProp9Atom.ReadFromStream(ReadHeader, pStream); +} + +CRecordOutlineTextProps9Container::~CRecordOutlineTextProps9Container() +{ + for (auto pEl : m_rgOutlineTextProps9Entry) + { + RELEASEOBJECT(pEl) + } +} + +void CRecordOutlineTextProps9Container::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + LONG lPos = 0; + StreamUtils::StreamPosition(lPos, pStream); + + UINT lCurLen = 0; + + SRecordHeader ReadHeader; + + while (lCurLen < m_oHeader.RecLen) + { + if (ReadHeader.ReadFromStream(pStream) == false || ReadHeader.bBadHeader) + break; + + lCurLen += 8 + ReadHeader.RecLen; + + auto pRec = new CRecordOutlineTextProps9Entry; + pRec->ReadFromStream(ReadHeader, pStream); + + if (ReadHeader.bBadHeader) + break; + + m_rgOutlineTextProps9Entry.push_back(pRec); + } + StreamUtils::StreamSeek(lPos + m_oHeader.RecLen, pStream); +} diff --git a/MsBinaryFile/PptFile/Records/OutlineTextProps9Container.h b/MsBinaryFile/PptFile/Records/OutlineTextProps9Container.h index 130c1fd9e7..37fa73beab 100644 --- a/MsBinaryFile/PptFile/Records/OutlineTextProps9Container.h +++ b/MsBinaryFile/PptFile/Records/OutlineTextProps9Container.h @@ -42,21 +42,7 @@ public: CRecordStyleTextProp9Atom m_styleTextProp9Atom; public: - void ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) override - { - CRecordOutlineTextPropsHeaderExAtom::ReadFromStream(oHeader, pStream); - - SRecordHeader ReadHeader; - ReadHeader.ReadFromStream(pStream); - - if (ReadHeader.bBadHeader) - { - oHeader.bBadHeader = true; // GZoabli_PhD.ppt - return; - } - - m_styleTextProp9Atom.ReadFromStream(ReadHeader, pStream); - } + void ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) override; }; @@ -66,40 +52,8 @@ public: std::vector m_rgOutlineTextProps9Entry; public: - virtual ~CRecordOutlineTextProps9Container() - { - for (auto pEl : m_rgOutlineTextProps9Entry) - { - RELEASEOBJECT(pEl) - } - } + virtual ~CRecordOutlineTextProps9Container(); - virtual void ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) - { - m_oHeader = oHeader; - LONG lPos = 0; - StreamUtils::StreamPosition(lPos, pStream); - - UINT lCurLen = 0; - - SRecordHeader ReadHeader; - - while (lCurLen < m_oHeader.RecLen) - { - if (ReadHeader.ReadFromStream(pStream) == false || ReadHeader.bBadHeader) - break; - - lCurLen += 8 + ReadHeader.RecLen; - - auto pRec = new CRecordOutlineTextProps9Entry; - pRec->ReadFromStream(ReadHeader, pStream); - - if (ReadHeader.bBadHeader) - break; - - m_rgOutlineTextProps9Entry.push_back(pRec); - } - StreamUtils::StreamSeek(lPos + m_oHeader.RecLen, pStream); - } + virtual void ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) override; }; } diff --git a/MsBinaryFile/PptFile/Records/OutlineTextPropsHeaderExAtom.cpp b/MsBinaryFile/PptFile/Records/OutlineTextPropsHeaderExAtom.cpp new file mode 100644 index 0000000000..0e7c8385f3 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/OutlineTextPropsHeaderExAtom.cpp @@ -0,0 +1,9 @@ +#include "OutlineTextPropsHeaderExAtom.h" + + +void CRecordOutlineTextPropsHeaderExAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + m_slideIdRef = StreamUtils::ReadDWORD(pStream); + m_eTxType = (TextTypeEnum)StreamUtils::ReadDWORD(pStream); +} diff --git a/MsBinaryFile/PptFile/Records/OutlineTextPropsHeaderExAtom.h b/MsBinaryFile/PptFile/Records/OutlineTextPropsHeaderExAtom.h index 2d4fa728a6..d4c027707e 100644 --- a/MsBinaryFile/PptFile/Records/OutlineTextPropsHeaderExAtom.h +++ b/MsBinaryFile/PptFile/Records/OutlineTextPropsHeaderExAtom.h @@ -43,11 +43,6 @@ public: TextTypeEnum m_eTxType; protected: - virtual void ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) - { - m_oHeader = oHeader; - m_slideIdRef = StreamUtils::ReadDWORD(pStream); - m_eTxType = (TextTypeEnum)StreamUtils::ReadDWORD(pStream); - } + virtual void ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) override; }; } diff --git a/MsBinaryFile/PptFile/Records/OutlineTextRefAtom.cpp b/MsBinaryFile/PptFile/Records/OutlineTextRefAtom.cpp new file mode 100644 index 0000000000..333d99251d --- /dev/null +++ b/MsBinaryFile/PptFile/Records/OutlineTextRefAtom.cpp @@ -0,0 +1,8 @@ +#include "OutlineTextRefAtom.h" + + +void CRecordOutlineTextRefAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + m_nIndex = StreamUtils::ReadDWORD(pStream); +} diff --git a/MsBinaryFile/PptFile/Records/OutlineTextRefAtom.h b/MsBinaryFile/PptFile/Records/OutlineTextRefAtom.h index 675d0caa2a..733ecc9642 100644 --- a/MsBinaryFile/PptFile/Records/OutlineTextRefAtom.h +++ b/MsBinaryFile/PptFile/Records/OutlineTextRefAtom.h @@ -37,18 +37,6 @@ class CRecordOutlineTextRefAtom : public CUnknownRecord public: _UINT32 m_nIndex; - - CRecordOutlineTextRefAtom() - { - } - ~CRecordOutlineTextRefAtom() - { - } - - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - m_oHeader = oHeader; - m_nIndex = StreamUtils::ReadDWORD(pStream); - } -}; \ No newline at end of file + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) override; +}; diff --git a/MsBinaryFile/PptFile/Records/PFMasks.cpp b/MsBinaryFile/PptFile/Records/PFMasks.cpp new file mode 100644 index 0000000000..28a0d8f481 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/PFMasks.cpp @@ -0,0 +1,39 @@ +#include "PFMasks.h" + +static inline bool getBit(_UINT32 data, _UINT32 mask) +{ + return mask == (mask & data); +} + + +void PFMasks::ReadFromStream(POLE::Stream *pStream) +{ + _UINT32 data = StreamUtils::ReadDWORD(pStream); + + m_hasBullet = getBit(data, 0x0001); + m_bulletHasFont = getBit(data, 0x0002); + m_bulletHasColor = getBit(data, 0x0004); + m_bulletHasSize = getBit(data, 0x0008); + m_bulletFont = getBit(data, 0x0010); + m_bulletColor = getBit(data, 0x0020); + m_bulletSize = getBit(data, 0x0040); + m_bulletChar = getBit(data, 0x0080); + m_leftMargin = getBit(data, 0x0100); + // unused + m_indent = getBit(data, 0x000400); + m_align = getBit(data, 0x000800); + m_lineSpacing = getBit(data, 0x001000); + m_spaceBefore = getBit(data, 0x002000); + m_spaceAfter = getBit(data, 0x004000); + m_defaultTabSize = getBit(data, 0x008000); + m_fontAlign = getBit(data, 0x010000); + m_charWrap = getBit(data, 0x020000); + m_wordWrap = getBit(data, 0x040000); + m_overflow = getBit(data, 0x080000); + m_tabStops = getBit(data, 0x100000); + m_textDirection = getBit(data, 0x200000); + // reserved1 + m_bulletBlip = getBit(data, 0x0800000); + m_bulletScheme = getBit(data, 0x1000000); + m_bulletHasScheme = getBit(data, 0x2000000); +} diff --git a/MsBinaryFile/PptFile/Records/PFMasks.h b/MsBinaryFile/PptFile/Records/PFMasks.h index 7ece4d6e33..edae6f44d8 100644 --- a/MsBinaryFile/PptFile/Records/PFMasks.h +++ b/MsBinaryFile/PptFile/Records/PFMasks.h @@ -34,13 +34,6 @@ namespace PPT_FORMAT { - -inline bool getBit(_UINT32 data, _UINT32 mask) -{ - return mask == (mask & data); -} - - struct PFMasks { bool m_hasBullet; @@ -71,36 +64,6 @@ struct PFMasks bool m_bulletHasScheme; - void ReadFromStream(POLE::Stream* pStream) - { - _UINT32 data = StreamUtils::ReadDWORD(pStream); - - m_hasBullet = getBit(data, 0x0001); - m_bulletHasFont = getBit(data, 0x0002); - m_bulletHasColor = getBit(data, 0x0004); - m_bulletHasSize = getBit(data, 0x0008); - m_bulletFont = getBit(data, 0x0010); - m_bulletColor = getBit(data, 0x0020); - m_bulletSize = getBit(data, 0x0040); - m_bulletChar = getBit(data, 0x0080); - m_leftMargin = getBit(data, 0x0100); - // unused - m_indent = getBit(data, 0x000400); - m_align = getBit(data, 0x000800); - m_lineSpacing = getBit(data, 0x001000); - m_spaceBefore = getBit(data, 0x002000); - m_spaceAfter = getBit(data, 0x004000); - m_defaultTabSize = getBit(data, 0x008000); - m_fontAlign = getBit(data, 0x010000); - m_charWrap = getBit(data, 0x020000); - m_wordWrap = getBit(data, 0x040000); - m_overflow = getBit(data, 0x080000); - m_tabStops = getBit(data, 0x100000); - m_textDirection = getBit(data, 0x200000); - // reserved1 - m_bulletBlip = getBit(data, 0x0800000); - m_bulletScheme = getBit(data, 0x1000000); - m_bulletHasScheme = getBit(data, 0x2000000); - } + void ReadFromStream(POLE::Stream* pStream); }; } diff --git a/MsBinaryFile/PptFile/Records/PersistDirectoryAtom.cpp b/MsBinaryFile/PptFile/Records/PersistDirectoryAtom.cpp new file mode 100644 index 0000000000..2a96d20505 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/PersistDirectoryAtom.cpp @@ -0,0 +1,52 @@ +#include "PersistDirectoryAtom.h" + + +_UINT32 CPersistDirectoryEntry::FromStream(POLE::Stream *pStream) +{ + _UINT32 nFlag = StreamUtils::ReadDWORD(pStream); + m_nPersistID = (nFlag & 0x000FFFFF); // 20 bit + m_nPersistCount = (nFlag & 0xFFF00000) >> 20; // 12 bit + + m_arPersistOffsets.clear(); + + for (_UINT32 index = 0; index < m_nPersistCount; ++index) + { + _UINT32 Mem = StreamUtils::ReadDWORD(pStream); + m_arPersistOffsets.push_back(Mem); + } + + return 4 * (m_nPersistCount + 1); +} + +void CRecordPersistDirectoryAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + _UINT32 nCountRead = 0; + _UINT32 nCountEnries = 0; + while (nCountRead < m_oHeader.RecLen) + { + CPersistDirectoryEntry elm; + m_arEntries.push_back(elm); + + nCountRead += m_arEntries[nCountEnries].FromStream(pStream); + ++nCountEnries; + } +} + +void CRecordPersistDirectoryAtom::ToMap(std::map<_UINT32, _UINT32> *pMap) +{ + pMap->clear(); + + for (size_t nEntry = 0; nEntry < m_arEntries.size(); ++nEntry) + { + _UINT32 nPID = m_arEntries[nEntry].m_nPersistID; + + for (size_t nIndex = 0; nIndex < m_arEntries[nEntry].m_nPersistCount; ++nIndex) + { + _UINT32 nOffset = m_arEntries[nEntry].m_arPersistOffsets[nIndex]; + pMap->insert(std::pair<_UINT32, _UINT32>(nPID, nOffset)); + ++nPID; + } + } +} diff --git a/MsBinaryFile/PptFile/Records/PersistDirectoryAtom.h b/MsBinaryFile/PptFile/Records/PersistDirectoryAtom.h index 0ac42afb39..998e3550a6 100644 --- a/MsBinaryFile/PptFile/Records/PersistDirectoryAtom.h +++ b/MsBinaryFile/PptFile/Records/PersistDirectoryAtom.h @@ -51,22 +51,7 @@ public: m_nPersistCount = 0; } - _UINT32 FromStream(POLE::Stream* pStream) - { - _UINT32 nFlag = StreamUtils::ReadDWORD(pStream); - m_nPersistID = (nFlag & 0x000FFFFF); // 20 bit - m_nPersistCount = (nFlag & 0xFFF00000) >> 20; // 12 bit - - m_arPersistOffsets.clear(); - - for (_UINT32 index = 0; index < m_nPersistCount; ++index) - { - _UINT32 Mem = StreamUtils::ReadDWORD(pStream); - m_arPersistOffsets.push_back(Mem); - } - - return 4 * (m_nPersistCount + 1); - } + _UINT32 FromStream(POLE::Stream* pStream); }; class CRecordPersistDirectoryAtom : public CUnknownRecord @@ -74,46 +59,8 @@ class CRecordPersistDirectoryAtom : public CUnknownRecord std::vector m_arEntries; public: - - CRecordPersistDirectoryAtom() : m_arEntries() - { - } - ~CRecordPersistDirectoryAtom() - { - m_arEntries.clear(); - } + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) override; - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - m_oHeader = oHeader; - - _UINT32 nCountRead = 0; - _UINT32 nCountEnries = 0; - while (nCountRead < m_oHeader.RecLen) - { - CPersistDirectoryEntry elm; - m_arEntries.push_back(elm); - - nCountRead += m_arEntries[nCountEnries].FromStream(pStream); - ++nCountEnries; - } - } - - void ToMap(std::map<_UINT32, _UINT32>* pMap) - { - pMap->clear(); - - for (size_t nEntry = 0; nEntry < m_arEntries.size(); ++nEntry) - { - _UINT32 nPID = m_arEntries[nEntry].m_nPersistID; - - for (size_t nIndex = 0; nIndex < m_arEntries[nEntry].m_nPersistCount; ++nIndex) - { - _UINT32 nOffset = m_arEntries[nEntry].m_arPersistOffsets[nIndex]; - pMap->insert(std::pair<_UINT32, _UINT32>(nPID, nOffset)); - ++nPID; - } - } - } -}; \ No newline at end of file + void ToMap(std::map<_UINT32, _UINT32>* pMap); +}; diff --git a/MsBinaryFile/PptFile/Records/PlaceHolderAtom.cpp b/MsBinaryFile/PptFile/Records/PlaceHolderAtom.cpp new file mode 100644 index 0000000000..13000ea16c --- /dev/null +++ b/MsBinaryFile/PptFile/Records/PlaceHolderAtom.cpp @@ -0,0 +1,13 @@ +#include "PlaceHolderAtom.h" + + +void CRecordPlaceHolderAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + m_nPosition = StreamUtils::ReadLONG(pStream); + m_nPlacementID = StreamUtils::ReadBYTE(pStream); + m_nSize = StreamUtils::ReadBYTE(pStream); + + StreamUtils::StreamSkip(2, pStream); +} diff --git a/MsBinaryFile/PptFile/Records/PlaceHolderAtom.h b/MsBinaryFile/PptFile/Records/PlaceHolderAtom.h index d117274d1d..c50e539f56 100644 --- a/MsBinaryFile/PptFile/Records/PlaceHolderAtom.h +++ b/MsBinaryFile/PptFile/Records/PlaceHolderAtom.h @@ -39,24 +39,6 @@ public: BYTE m_nPlacementID; BYTE m_nSize; -public: - - CRecordPlaceHolderAtom() - { - } - ~CRecordPlaceHolderAtom() - { - } - - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - m_oHeader = oHeader; - - m_nPosition = StreamUtils::ReadLONG(pStream); - m_nPlacementID = StreamUtils::ReadBYTE(pStream); - m_nSize = StreamUtils::ReadBYTE(pStream); - - StreamUtils::StreamSkip(2, pStream); - } + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) override; }; diff --git a/MsBinaryFile/PptFile/Records/ProgStringTagContainer.cpp b/MsBinaryFile/PptFile/Records/ProgStringTagContainer.cpp new file mode 100644 index 0000000000..b2bb072b7a --- /dev/null +++ b/MsBinaryFile/PptFile/Records/ProgStringTagContainer.cpp @@ -0,0 +1,27 @@ +#include "ProgStringTagContainer.h" + + +CRecordProgStringTagContainer::CRecordProgStringTagContainer() +{ + +} + +CRecordProgStringTagContainer::~CRecordProgStringTagContainer() +{ + RELEASEOBJECT(m_pTagValueAtom) +} + +void CRecordProgStringTagContainer::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + SRecordHeader ReadHeader; + ReadHeader.ReadFromStream(pStream); + + m_oTagNameAtom.ReadFromStream(ReadHeader, pStream); + if (m_oHeader.RecLen > 8 + ReadHeader.RecLen) + { + m_pTagValueAtom = new CRecordTagValueAtom(); + ReadHeader.ReadFromStream(pStream); + m_pTagValueAtom->ReadFromStream(ReadHeader, pStream); + } +} diff --git a/MsBinaryFile/PptFile/Records/ProgStringTagContainer.h b/MsBinaryFile/PptFile/Records/ProgStringTagContainer.h index 078844e319..7d95da787c 100644 --- a/MsBinaryFile/PptFile/Records/ProgStringTagContainer.h +++ b/MsBinaryFile/PptFile/Records/ProgStringTagContainer.h @@ -38,30 +38,13 @@ namespace PPT_FORMAT { class CRecordProgStringTagContainer : public CUnknownRecord { public: - CRecordProgStringTagContainer() : m_pTagValueAtom(nullptr) {} + CRecordProgStringTagContainer(); + ~CRecordProgStringTagContainer(); - ~CRecordProgStringTagContainer() - { - RELEASEOBJECT(m_pTagValueAtom) - } - - void ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) override - { - m_oHeader = oHeader; - SRecordHeader ReadHeader; - ReadHeader.ReadFromStream(pStream); - - m_oTagNameAtom.ReadFromStream(ReadHeader, pStream); - if (m_oHeader.RecLen > 8 + ReadHeader.RecLen) - { - m_pTagValueAtom = new CRecordTagValueAtom(); - ReadHeader.ReadFromStream(pStream); - m_pTagValueAtom->ReadFromStream(ReadHeader, pStream); - } - } + void ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) override; public: CRecordTagNameAtom m_oTagNameAtom; - CRecordTagValueAtom* m_pTagValueAtom; // OPTIONAL + CRecordTagValueAtom* m_pTagValueAtom = nullptr; // OPTIONAL }; } diff --git a/MsBinaryFile/PptFile/Records/RoundTrip.cpp b/MsBinaryFile/PptFile/Records/RoundTrip.cpp new file mode 100644 index 0000000000..97d2712cd5 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/RoundTrip.cpp @@ -0,0 +1,131 @@ +#include "RoundTrip.h" + +//static int nRTCounter = 1; +void CUnknownRoundTrip::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + data = std::make_pair(boost::shared_array(new unsigned char[m_oHeader.RecLen]), m_oHeader.RecLen); + pStream->read(data.first.get(), data.second); + +// std::string filename = std::to_string(nRTCounter++) + "_" + GetRecordName(m_oHeader.RecType) + ".zip"; +// std::ofstream file("RoundTrips/" + filename, std::ios::out); +// file.write((char*)data.first.get(), data.second); + // file.close(); +} + +void CUnknownRoundTrip::ReadFromStream(SRecordHeader &oHeader, const CFStreamPtr &pStream) +{ + m_oHeader = oHeader; + + data = std::make_pair(boost::shared_array(new unsigned char[m_oHeader.RecLen]), m_oHeader.RecLen); + pStream->read(data.first.get(), data.second); +} + +std::wstring CUnknownRoundTripID::getStrID() const +{ + return std::to_wstring(m_dwID); +} + +void CUnknownRoundTripID::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + m_dwID = StreamUtils::ReadDWORD(pStream); + +// std::string filename = std::to_string(nRTCounter++) + "_" + GetRecordName(m_oHeader.RecType) + "_ID_" + std::to_string(m_dwID) + ".txt"; +// std::ofstream file("RoundTrips/" + filename, std::ios::out); +// file << m_dwID; +// file.close(); +} + +void RoundTripColorMapping12Atom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + m_colorMapping = StreamUtils::ReadStringA(pStream, m_oHeader.RecLen); + +// std::string filename = std::to_string(nRTCounter++) + "_" + GetRecordName(m_oHeader.RecType) + ".xml"; +// std::ofstream file("RoundTrips/" + filename, std::ios::out); +// file << m_colorMapping; + // file.close(); +} + +std::wstring RoundTripColorMapping12Atom::getPClrMap() const +{ + auto iter = m_colorMapping.find(" -//static UINT nRTCounter = 1; namespace PPT_FORMAT { @@ -42,56 +40,19 @@ class CUnknownRoundTrip : public CUnknownRecord public: std::pair, _INT32> data; - CUnknownRoundTrip() - { - } - ~CUnknownRoundTrip() - { - } - - void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - m_oHeader = oHeader; - - data = std::make_pair(boost::shared_array(new unsigned char[m_oHeader.RecLen]), m_oHeader.RecLen); - pStream->read(data.first.get(), data.second); - -// std::string filename = std::to_string(nRTCounter++) + "_" + GetRecordName(m_oHeader.RecType) + ".zip"; -// std::ofstream file("RoundTrips/" + filename, std::ios::out); -// file.write((char*)data.first.get(), data.second); -// file.close(); - } - - void ReadFromStream(SRecordHeader & oHeader, const CFStreamPtr &pStream) - { - m_oHeader = oHeader; - - data = std::make_pair(boost::shared_array(new unsigned char[m_oHeader.RecLen]), m_oHeader.RecLen); - pStream->read(data.first.get(), data.second); - } + void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) override; + void ReadFromStream(SRecordHeader & oHeader, const CFStreamPtr &pStream) override; }; class CUnknownRoundTripID : public CUnknownRecord { public: - UINT m_dwID; + UINT m_dwID = -1; - CUnknownRoundTripID(): m_dwID(-1){} - ~CUnknownRoundTripID(){} - virtual inline std::wstring getStrID()const - { return std::to_wstring(m_dwID);} - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - m_oHeader = oHeader; - m_dwID = StreamUtils::ReadDWORD(pStream); - -// std::string filename = std::to_string(nRTCounter++) + "_" + GetRecordName(m_oHeader.RecType) + "_ID_" + std::to_string(m_dwID) + ".txt"; -// std::ofstream file("RoundTrips/" + filename, std::ios::out); -// file << m_dwID; -// file.close(); - } + virtual std::wstring getStrID()const; + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) override; }; // .zip @@ -112,27 +73,8 @@ public: RoundTripColorMapping12Atom(){} ~RoundTripColorMapping12Atom(){} - void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - m_oHeader = oHeader; - m_colorMapping = StreamUtils::ReadStringA(pStream, m_oHeader.RecLen); - -// std::string filename = std::to_string(nRTCounter++) + "_" + GetRecordName(m_oHeader.RecType) + ".xml"; -// std::ofstream file("RoundTrips/" + filename, std::ios::out); -// file << m_colorMapping; -// file.close(); - } - std::wstring getPClrMap()const - { - auto iter = m_colorMapping.find("read(nm, 64); + m_pName = NSFile::CUtf8Converter::GetWStringFromUTF16((unsigned short*)nm, 32); + + flags = StreamUtils::ReadWORD(pStream); + + fAutoAdvance = GETBIT(flags, 15); + fWillSkipBuilds = GETBIT(flags, 14); + fUseSlideRange = GETBIT(flags, 13); + fDocUseNamedShow = GETBIT(flags, 12); + fBrowseMode = GETBIT(flags, 11); + fKioskMode = GETBIT(flags, 10); + fWillSkipNarration = GETBIT(flags, 9); + fLoopContinuously = GETBIT(flags, 8); + fHideScrollBar = GETBIT(flags, 7); + + unsigned short unused = StreamUtils::ReadWORD(pStream); +} diff --git a/MsBinaryFile/PptFile/Records/SSDocInfoAtom.h b/MsBinaryFile/PptFile/Records/SSDocInfoAtom.h index dd49897f62..b1471843ae 100644 --- a/MsBinaryFile/PptFile/Records/SSDocInfoAtom.h +++ b/MsBinaryFile/PptFile/Records/SSDocInfoAtom.h @@ -51,42 +51,9 @@ public: bool fLoopContinuously; bool fHideScrollBar; - CRecordSSDocInfoAtom() - { - } + CRecordSSDocInfoAtom(); + ~CRecordSSDocInfoAtom(); - ~CRecordSSDocInfoAtom() - { - } + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) override; - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - m_oHeader = oHeader; - - unsigned short flags; - unsigned char nm[64]; - - NSStreamReader::Read(pStream, m_oPenColor); - m_nRestartTime = StreamUtils::ReadLONG(pStream); - m_nStartSlide = StreamUtils::ReadSHORT(pStream); - m_nEndSlide = StreamUtils::ReadSHORT(pStream); - - pStream->read(nm, 64); - m_pName = NSFile::CUtf8Converter::GetWStringFromUTF16((unsigned short*)nm, 32); - - flags = StreamUtils::ReadWORD(pStream); - - fAutoAdvance = GETBIT(flags, 15); - fWillSkipBuilds = GETBIT(flags, 14); - fUseSlideRange = GETBIT(flags, 13); - fDocUseNamedShow = GETBIT(flags, 12); - fBrowseMode = GETBIT(flags, 11); - fKioskMode = GETBIT(flags, 10); - fWillSkipNarration = GETBIT(flags, 9); - fLoopContinuously = GETBIT(flags, 8); - fHideScrollBar = GETBIT(flags, 7); - - unsigned short unused = StreamUtils::ReadWORD(pStream); - } - -}; \ No newline at end of file +}; diff --git a/MsBinaryFile/PptFile/Records/SSSlideInfoAtom.cpp b/MsBinaryFile/PptFile/Records/SSSlideInfoAtom.cpp new file mode 100644 index 0000000000..2a3a886180 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/SSSlideInfoAtom.cpp @@ -0,0 +1,74 @@ +#include "SSSlideInfoAtom.h" + + +CSlideShowSlideInfoAtom::CSlideShowSlideInfoAtom() +{ + m_nSlideTime = -1; + m_nSoundRef = 0xFFFFFFFE; + + m_nEffectDirection = 0; + m_nEffectType = 0; + + m_bManualAdvance = false; + m_bHidden = false; + m_bSound = false; + m_bLoopSound = false; + m_bStopSound = false; + m_bAutoAdvance = false; + m_bCursorVisible = false; + + m_nSpeed = 1; +} + +CSlideShowSlideInfoAtom::~CSlideShowSlideInfoAtom() +{ +} + +void CSlideShowSlideInfoAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + m_nSlideTime = (INT)StreamUtils::ReadDWORD ( pStream ); + m_nSoundRef = StreamUtils::ReadDWORD ( pStream ); + + m_nEffectDirection = StreamUtils::ReadBYTE ( pStream ); + m_nEffectType = StreamUtils::ReadBYTE ( pStream ); + + BYTE bValue = StreamUtils::ReadBYTE ( pStream ); + + m_bManualAdvance = (0x01 == (0x01 & bValue)); + m_bHidden = (0x04 == (0x04 & bValue)); + m_bSound = (0x10 == (0x10 & bValue)); + m_bLoopSound = (0x40 == (0x40 & bValue)); + + bValue = StreamUtils::ReadBYTE ( pStream ); + + m_bStopSound = (0x01 == (0x01 & bValue)); + m_bAutoAdvance = (0x04 == (0x04 & bValue)); + m_bCursorVisible = (0x10 == (0x10 & bValue)); + + //_UINT32 dwValue = StreamUtils::ReadDWORD ( pStream ); + //m_nSpeed = ( 0x01 == ( 0x01 & ((BYTE)dwValue) ) ); + m_nSpeed = StreamUtils::ReadBYTE( pStream ); + StreamUtils::StreamSkip(3, pStream); +} + +double CSlideShowSlideInfoAtom::GetTimeTransition() +{ + double dTime = 500.0; + if (0 == m_nSpeed) + { + dTime = 750.0; + } + else if (2 == m_nSpeed) + { + dTime = 250.0; + } + + return dTime; +} + +double CSlideShowSlideInfoAtom::GetTimeSlide() +{ + return (double)m_nSlideTime; +} diff --git a/MsBinaryFile/PptFile/Records/SSSlideInfoAtom.h b/MsBinaryFile/PptFile/Records/SSSlideInfoAtom.h index f950933d7f..8a569ea666 100644 --- a/MsBinaryFile/PptFile/Records/SSSlideInfoAtom.h +++ b/MsBinaryFile/PptFile/Records/SSSlideInfoAtom.h @@ -62,76 +62,11 @@ public: public: + CSlideShowSlideInfoAtom(); + ~CSlideShowSlideInfoAtom(); - CSlideShowSlideInfoAtom() - { - m_nSlideTime = -1; - m_nSoundRef = 0xFFFFFFFE; + virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ) override; - m_nEffectDirection = 0; - m_nEffectType = 0; - - m_bManualAdvance = false; - m_bHidden = false; - m_bSound = false; - m_bLoopSound = false; - m_bStopSound = false; - m_bAutoAdvance = false; - m_bCursorVisible = false; - - m_nSpeed = 1; - } - - ~CSlideShowSlideInfoAtom() - { - } - - virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ) - { - m_oHeader = oHeader; - - m_nSlideTime = (INT)StreamUtils::ReadDWORD ( pStream ); - m_nSoundRef = StreamUtils::ReadDWORD ( pStream ); - - m_nEffectDirection = StreamUtils::ReadBYTE ( pStream ); - m_nEffectType = StreamUtils::ReadBYTE ( pStream ); - - BYTE bValue = StreamUtils::ReadBYTE ( pStream ); - - m_bManualAdvance = (0x01 == (0x01 & bValue)); - m_bHidden = (0x04 == (0x04 & bValue)); - m_bSound = (0x10 == (0x10 & bValue)); - m_bLoopSound = (0x40 == (0x40 & bValue)); - - bValue = StreamUtils::ReadBYTE ( pStream ); - - m_bStopSound = (0x01 == (0x01 & bValue)); - m_bAutoAdvance = (0x04 == (0x04 & bValue)); - m_bCursorVisible = (0x10 == (0x10 & bValue)); - - //_UINT32 dwValue = StreamUtils::ReadDWORD ( pStream ); - //m_nSpeed = ( 0x01 == ( 0x01 & ((BYTE)dwValue) ) ); - m_nSpeed = StreamUtils::ReadBYTE( pStream ); - StreamUtils::StreamSkip(3, pStream); - } - - double GetTimeTransition() - { - double dTime = 500.0; - if (0 == m_nSpeed) - { - dTime = 750.0; - } - else if (2 == m_nSpeed) - { - dTime = 250.0; - } - - return dTime; - } - - double GetTimeSlide() - { - return (double)m_nSlideTime; - } + double GetTimeTransition(); + double GetTimeSlide(); }; diff --git a/MsBinaryFile/PptFile/Records/SSlideLayoutAtom.cpp b/MsBinaryFile/PptFile/Records/SSlideLayoutAtom.cpp new file mode 100644 index 0000000000..edf4eb8a60 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/SSlideLayoutAtom.cpp @@ -0,0 +1,15 @@ +#include "SSlideLayoutAtom.h" + + +CRecordSSlideLayoutAtom::CRecordSSlideLayoutAtom() +{ +} + +CRecordSSlideLayoutAtom::~CRecordSSlideLayoutAtom() +{ +} + +void CRecordSSlideLayoutAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + return CUnknownRecord::ReadFromStream(oHeader, pStream); +} diff --git a/MsBinaryFile/PptFile/Records/SSlideLayoutAtom.h b/MsBinaryFile/PptFile/Records/SSlideLayoutAtom.h index 50428ebee1..088715c0a1 100644 --- a/MsBinaryFile/PptFile/Records/SSlideLayoutAtom.h +++ b/MsBinaryFile/PptFile/Records/SSlideLayoutAtom.h @@ -38,17 +38,10 @@ public: INT m_nGeom; BYTE m_pPlaceHolderID[8]; - CRecordSSlideLayoutAtom() - { - } - ~CRecordSSlideLayoutAtom() - { - } + CRecordSSlideLayoutAtom(); + ~CRecordSSlideLayoutAtom(); - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - return CUnknownRecord::ReadFromStream(oHeader, pStream); - } + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) override; -}; \ No newline at end of file +}; diff --git a/MsBinaryFile/PptFile/Records/ShapeFlags10Atom.cpp b/MsBinaryFile/PptFile/Records/ShapeFlags10Atom.cpp new file mode 100644 index 0000000000..57e516d1d0 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/ShapeFlags10Atom.cpp @@ -0,0 +1,7 @@ +#include "ShapeFlags10Atom.h" + + +void CRecordShapeFlags10Atom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + return CUnknownRecord::ReadFromStream(oHeader, pStream); +} diff --git a/MsBinaryFile/PptFile/Records/ShapeFlags10Atom.h b/MsBinaryFile/PptFile/Records/ShapeFlags10Atom.h index 5166948116..5644e5ec5a 100644 --- a/MsBinaryFile/PptFile/Records/ShapeFlags10Atom.h +++ b/MsBinaryFile/PptFile/Records/ShapeFlags10Atom.h @@ -35,18 +35,8 @@ class CRecordShapeFlags10Atom : public CUnknownRecord { public: - BYTE m_nFlags; - - CRecordShapeFlags10Atom() - { - } + BYTE m_nFlags; - ~CRecordShapeFlags10Atom() - { - } - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - return CUnknownRecord::ReadFromStream(oHeader, pStream); - } -}; \ No newline at end of file + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) override; +}; diff --git a/MsBinaryFile/PptFile/Records/ShapeFlagsAtom.cpp b/MsBinaryFile/PptFile/Records/ShapeFlagsAtom.cpp new file mode 100644 index 0000000000..a6e18f72b5 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/ShapeFlagsAtom.cpp @@ -0,0 +1,7 @@ +#include "ShapeFlagsAtom.h" + + +void CRecordShapeFlagsAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + return CUnknownRecord::ReadFromStream(oHeader, pStream); +} diff --git a/MsBinaryFile/PptFile/Records/ShapeFlagsAtom.h b/MsBinaryFile/PptFile/Records/ShapeFlagsAtom.h index 4eee18b6b1..f761101892 100644 --- a/MsBinaryFile/PptFile/Records/ShapeFlagsAtom.h +++ b/MsBinaryFile/PptFile/Records/ShapeFlagsAtom.h @@ -36,17 +36,7 @@ class CRecordShapeFlagsAtom : public CUnknownRecord { public: BYTE m_nFlags; - - CRecordShapeFlagsAtom() - { - } - ~CRecordShapeFlagsAtom() - { - } - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - return CUnknownRecord::ReadFromStream(oHeader, pStream); - } -}; \ No newline at end of file + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) override; +}; diff --git a/MsBinaryFile/PptFile/Records/ShapeProgBinaryTagSubContainerOrAtom.cpp b/MsBinaryFile/PptFile/Records/ShapeProgBinaryTagSubContainerOrAtom.cpp new file mode 100644 index 0000000000..171557a3cf --- /dev/null +++ b/MsBinaryFile/PptFile/Records/ShapeProgBinaryTagSubContainerOrAtom.cpp @@ -0,0 +1,69 @@ +#include "ShapeProgBinaryTagSubContainerOrAtom.h" + + +void CRecordPP9ShapeBinaryTagExtension::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + SRecordHeader ReadHeader; + ReadHeader.ReadFromStream(pStream); + + m_styleTextPropAtom.ReadFromStream(ReadHeader, pStream); +} + +void CRecordPP10ShapeBinaryTagExtension::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + SRecordHeader ReadHeader; + ReadHeader.ReadFromStream(pStream); + + m_styleTextPropAtom.ReadFromStream(ReadHeader, pStream); +} + +void CRecordPP11ShapeBinaryTagExtension::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + SRecordHeader ReadHeader; + ReadHeader.ReadFromStream(pStream); + + m_styleTextPropAtom.ReadFromStream(ReadHeader, pStream); +} + +CRecordShapeProgBinaryTagSubContainerOrAtom::CRecordShapeProgBinaryTagSubContainerOrAtom() : m_pTagContainer(NULL), m_pTagName(NULL){} + +void CRecordShapeProgBinaryTagSubContainerOrAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + LONG lPos = 0; StreamUtils::StreamPosition(lPos, pStream); + + SRecordHeader ReadHeader; + ReadHeader.ReadFromStream(pStream); + + if (ReadHeader.RecType == RT_CString) + { + RELEASEOBJECT(m_pTagName); + RELEASEOBJECT(m_pTagContainer); + m_pTagName = new CRecordCString(); + m_pTagName->ReadFromStream(ReadHeader, pStream); + + SRecordHeader childHeader; + if (!childHeader.ReadFromStream(pStream)) + return; + + if (m_pTagName->m_strText == TN_PPT9) { + m_pTagContainer = new CRecordPP9ShapeBinaryTagExtension(); + dynamic_cast + (m_pTagContainer)->ReadFromStream(childHeader, pStream); + } else if (m_pTagName->m_strText == TN_PPT10) { + m_pTagContainer = new CRecordPP10ShapeBinaryTagExtension(); + dynamic_cast + (m_pTagContainer)->ReadFromStream(childHeader, pStream); + } else if (m_pTagName->m_strText == TN_PPT11) { + m_pTagContainer = new CRecordPP11ShapeBinaryTagExtension(); + dynamic_cast + (m_pTagContainer)->ReadFromStream(childHeader, pStream); + } + } +} diff --git a/MsBinaryFile/PptFile/Records/ShapeProgBinaryTagSubContainerOrAtom.h b/MsBinaryFile/PptFile/Records/ShapeProgBinaryTagSubContainerOrAtom.h index 05bf250a21..4c95411a43 100644 --- a/MsBinaryFile/PptFile/Records/ShapeProgBinaryTagSubContainerOrAtom.h +++ b/MsBinaryFile/PptFile/Records/ShapeProgBinaryTagSubContainerOrAtom.h @@ -46,53 +46,26 @@ class CRecordPP9ShapeBinaryTagExtension : public CUnknownRecord { public: CRecordStyleTextProp9Atom m_styleTextPropAtom; - virtual ~CRecordPP9ShapeBinaryTagExtension(){} - void ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) override - { - m_oHeader = oHeader; - - SRecordHeader ReadHeader; - ReadHeader.ReadFromStream(pStream); - - m_styleTextPropAtom.ReadFromStream(ReadHeader, pStream); - } + void ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) override; }; class CRecordPP10ShapeBinaryTagExtension : public CUnknownRecord { public: CRecordStyleTextProp10Atom m_styleTextPropAtom; - virtual ~CRecordPP10ShapeBinaryTagExtension(){} - void ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) override - { - m_oHeader = oHeader; - - SRecordHeader ReadHeader; - ReadHeader.ReadFromStream(pStream); - - m_styleTextPropAtom.ReadFromStream(ReadHeader, pStream); - } + void ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) override; }; class CRecordPP11ShapeBinaryTagExtension : public CUnknownRecord { public: CRecordStyleTextProp11Atom m_styleTextPropAtom; - virtual ~CRecordPP11ShapeBinaryTagExtension(){} - void ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) override - { - m_oHeader = oHeader; - - SRecordHeader ReadHeader; - ReadHeader.ReadFromStream(pStream); - - m_styleTextPropAtom.ReadFromStream(ReadHeader, pStream); - } + void ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) override; }; class CRecordShapeProgBinaryTagSubContainerOrAtom : public CUnknownRecord @@ -101,42 +74,8 @@ public: IRecord* m_pTagContainer; CRecordCString* m_pTagName; - CRecordShapeProgBinaryTagSubContainerOrAtom() : m_pTagContainer(NULL), m_pTagName(NULL){} - virtual ~CRecordShapeProgBinaryTagSubContainerOrAtom(){} + CRecordShapeProgBinaryTagSubContainerOrAtom(); - void ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) override - { - m_oHeader = oHeader; - LONG lPos = 0; StreamUtils::StreamPosition(lPos, pStream); - - SRecordHeader ReadHeader; - ReadHeader.ReadFromStream(pStream); - - if (ReadHeader.RecType == RT_CString) - { - RELEASEOBJECT(m_pTagName); - RELEASEOBJECT(m_pTagContainer); - m_pTagName = new CRecordCString(); - m_pTagName->ReadFromStream(ReadHeader, pStream); - - SRecordHeader childHeader; - if (!childHeader.ReadFromStream(pStream)) - return; - - if (m_pTagName->m_strText == TN_PPT9) { - m_pTagContainer = new CRecordPP9ShapeBinaryTagExtension(); - dynamic_cast - (m_pTagContainer)->ReadFromStream(childHeader, pStream); - } else if (m_pTagName->m_strText == TN_PPT10) { - m_pTagContainer = new CRecordPP10ShapeBinaryTagExtension(); - dynamic_cast - (m_pTagContainer)->ReadFromStream(childHeader, pStream); - } else if (m_pTagName->m_strText == TN_PPT11) { - m_pTagContainer = new CRecordPP11ShapeBinaryTagExtension(); - dynamic_cast - (m_pTagContainer)->ReadFromStream(childHeader, pStream); - } - } - } + void ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) override; }; } diff --git a/MsBinaryFile/PptFile/Records/SlideAtom.cpp b/MsBinaryFile/PptFile/Records/SlideAtom.cpp new file mode 100644 index 0000000000..b31f45d900 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/SlideAtom.cpp @@ -0,0 +1,35 @@ +#include "SlideAtom.h" + +CRecordSlideAtom::CRecordSlideAtom() +{ + m_oLayout.m_hash = 0; +} + +CRecordSlideAtom::~CRecordSlideAtom() +{ +} + +void CRecordSlideAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + m_oLayout.m_nGeom = (INT)StreamUtils::ReadLONG(pStream); + for (int nIndex = 0; nIndex < 8; nIndex++) + { + m_oLayout.m_pPlaceHolderID[nIndex] = StreamUtils::ReadBYTE(pStream); + m_oLayout.m_hash = (m_oLayout.m_hash << 4) + m_oLayout.m_pPlaceHolderID[nIndex]; + } + + m_oLayout.m_hash += (((_UINT64)m_oLayout.m_nGeom) << 32) ; + + m_nMasterIDRef = (UINT)StreamUtils::ReadDWORD(pStream); + m_nNotesIDRef = (UINT)StreamUtils::ReadDWORD(pStream); + + USHORT nFlag = StreamUtils::ReadWORD(pStream); + + m_bMasterObjects = ((nFlag & 0x01) == 0x01); + m_bMasterScheme = ((nFlag & 0x02) == 0x02); + m_bMasterBackground = ((nFlag & 0x04) == 0x04); + + StreamUtils::StreamSkip(2, pStream); +} diff --git a/MsBinaryFile/PptFile/Records/SlideAtom.h b/MsBinaryFile/PptFile/Records/SlideAtom.h index 77b86be81c..221d200b92 100644 --- a/MsBinaryFile/PptFile/Records/SlideAtom.h +++ b/MsBinaryFile/PptFile/Records/SlideAtom.h @@ -45,37 +45,8 @@ public: public: - CRecordSlideAtom() - { - m_oLayout.m_hash = 0; - } + CRecordSlideAtom(); + ~CRecordSlideAtom(); - ~CRecordSlideAtom() - { - } - - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - m_oHeader = oHeader; - - m_oLayout.m_nGeom = (INT)StreamUtils::ReadLONG(pStream); - for (int nIndex = 0; nIndex < 8; nIndex++) - { - m_oLayout.m_pPlaceHolderID[nIndex] = StreamUtils::ReadBYTE(pStream); - m_oLayout.m_hash = (m_oLayout.m_hash << 4) + m_oLayout.m_pPlaceHolderID[nIndex]; - } - - m_oLayout.m_hash += (((_UINT64)m_oLayout.m_nGeom) << 32) ; - - m_nMasterIDRef = (UINT)StreamUtils::ReadDWORD(pStream); - m_nNotesIDRef = (UINT)StreamUtils::ReadDWORD(pStream); - - USHORT nFlag = StreamUtils::ReadWORD(pStream); - - m_bMasterObjects = ((nFlag & 0x01) == 0x01); - m_bMasterScheme = ((nFlag & 0x02) == 0x02); - m_bMasterBackground = ((nFlag & 0x04) == 0x04); - - StreamUtils::StreamSkip(2, pStream); - } -}; \ No newline at end of file + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) override; +}; diff --git a/MsBinaryFile/PptFile/Records/SlideColorSchemeAtom.cpp b/MsBinaryFile/PptFile/Records/SlideColorSchemeAtom.cpp new file mode 100644 index 0000000000..588b2bb5cc --- /dev/null +++ b/MsBinaryFile/PptFile/Records/SlideColorSchemeAtom.cpp @@ -0,0 +1,41 @@ +#include "SlideColorSchemeAtom.h" + + +CRecordSplitMenuColorRecord::CRecordSplitMenuColorRecord() +{ +} + +CRecordSplitMenuColorRecord::~CRecordSplitMenuColorRecord() +{ +} + +void CRecordSplitMenuColorRecord::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + NSStreamReader::Read(pStream, m_oFillColor); + NSStreamReader::Read(pStream, m_oLineColor); + NSStreamReader::Read(pStream, m_oShadowColor); + NSStreamReader::Read(pStream, m_o3DColor); +} + +CRecordMostRecentlyUserColors::CRecordMostRecentlyUserColors() +{ +} + +CRecordMostRecentlyUserColors::~CRecordMostRecentlyUserColors() +{ +} + +void CRecordMostRecentlyUserColors::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + for (unsigned int i = 0; i < m_oHeader.RecLen / 4; i++) + { + SColorAtom color; + NSStreamReader::Read(pStream, color); + + m_oColors.push_back(color); + } +} diff --git a/MsBinaryFile/PptFile/Records/SlideColorSchemeAtom.h b/MsBinaryFile/PptFile/Records/SlideColorSchemeAtom.h index be3dad62e1..eafa4b9431 100644 --- a/MsBinaryFile/PptFile/Records/SlideColorSchemeAtom.h +++ b/MsBinaryFile/PptFile/Records/SlideColorSchemeAtom.h @@ -40,23 +40,10 @@ public: SColorAtom m_oShadowColor; SColorAtom m_o3DColor; - CRecordSplitMenuColorRecord() - { - } + CRecordSplitMenuColorRecord(); + ~CRecordSplitMenuColorRecord(); - ~CRecordSplitMenuColorRecord() - { - } - - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - m_oHeader = oHeader; - - NSStreamReader::Read(pStream, m_oFillColor); - NSStreamReader::Read(pStream, m_oLineColor); - NSStreamReader::Read(pStream, m_oShadowColor); - NSStreamReader::Read(pStream, m_o3DColor); - } + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) override; }; class CRecordMostRecentlyUserColors : public CUnknownRecord @@ -64,24 +51,9 @@ class CRecordMostRecentlyUserColors : public CUnknownRecord public: std::vector m_oColors; - CRecordMostRecentlyUserColors() - { - } - ~CRecordMostRecentlyUserColors() - { - } + CRecordMostRecentlyUserColors(); + ~CRecordMostRecentlyUserColors(); - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - m_oHeader = oHeader; - - for (unsigned int i = 0; i < m_oHeader.RecLen / 4; i++) - { - SColorAtom color; - NSStreamReader::Read(pStream, color); - - m_oColors.push_back(color); - } - } + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) override; }; diff --git a/MsBinaryFile/PptFile/Records/SlideContainer.cpp b/MsBinaryFile/PptFile/Records/SlideContainer.cpp new file mode 100644 index 0000000000..53b9e41b7c --- /dev/null +++ b/MsBinaryFile/PptFile/Records/SlideContainer.cpp @@ -0,0 +1,120 @@ +#include "SlideContainer.h" + + +CRecordSlide::CRecordSlide() +{ + m_bExistsTransition = false; + m_pSlideProgTagsContainer = NULL; + m_lCountReferences = 0; + + m_Index = -1; + m_IndexUser = 0; + + AddRef(); +} + +CRecordSlide::~CRecordSlide() +{ + Clear(); + RELEASEOBJECT ( m_pSlideProgTagsContainer ); +} + +void CRecordSlide::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + m_arRecords.clear(); + + LONG lPosition = 0; + StreamUtils::StreamPosition(lPosition, pStream); + + m_oHeader = oHeader; + + UINT lCurLen = 0; + SRecordHeader oRec; + + while (lCurLen < m_oHeader.RecLen) + { + if (oRec.ReadFromStream(pStream) == FALSE) + { + break; + } + + if ( RT_SlideShowSlideInfoAtom == oRec.RecType ) + { + m_bExistsTransition = true; + m_oSlideShowSlideInfoAtom.ReadFromStream ( oRec, pStream ); + + lCurLen += (8 + oRec.RecLen); + continue; + } + + if ( RT_ProgTags == oRec.RecType ) + { + m_pSlideProgTagsContainer = + new CRecordSlideProgTagsContainer(); + m_pSlideProgTagsContainer->ReadFromStream(oRec, pStream); + + lCurLen += (8 + oRec.RecLen); + continue; + } + + if (RT_VbaInfo == oRec.RecType) + { + auto pVbaInfo = new CRecordsContainer; + pVbaInfo->ReadFromStream(oRec, pStream); + m_arRecords.push_back(pVbaInfo); + + lCurLen += (8 + oRec.RecLen); + continue; + } + + + IRecord* pRecord = CreateByType ( oRec ); + + + + pRecord->ReadFromStream(oRec, pStream); + m_arRecords.push_back(pRecord); + + + lCurLen += (8 + oRec.RecLen); + } + if (lCurLen != m_oHeader.RecLen) + { + // нужно разобраться, что тут такое!!! + LONG lPosition = 0; + StreamUtils::StreamSeek(lPosition + m_oHeader.RecLen, pStream); + } +} + +bool CRecordSlide::IsSlide() +{ + for (size_t nIndex = 0; nIndex < m_arRecords.size(); ++nIndex) + { + if ((RT_Slide == m_arRecords[nIndex]->m_oHeader.RecType) || + (RT_MainMaster == m_arRecords[nIndex]->m_oHeader.RecType) || + (RT_Notes == m_arRecords[nIndex]->m_oHeader.RecType)) + { + return true; + } + } + return false; +} + +void CRecordSlide::AddRef() +{ + ++m_lCountReferences; +} + +void CRecordSlide::Release() +{ + --m_lCountReferences; + if (0 == m_lCountReferences) + delete this; +} + +CRecordSlide *CRecordSlide::QueryInterface() +{ + AddRef(); + return this; +} diff --git a/MsBinaryFile/PptFile/Records/SlideContainer.h b/MsBinaryFile/PptFile/Records/SlideContainer.h index 60b23482f0..a3dd3ca99c 100644 --- a/MsBinaryFile/PptFile/Records/SlideContainer.h +++ b/MsBinaryFile/PptFile/Records/SlideContainer.h @@ -54,119 +54,15 @@ private: public: - CRecordSlide() - { - m_bExistsTransition = false; - m_pSlideProgTagsContainer = NULL; - m_lCountReferences = 0; + CRecordSlide(); - m_Index = -1; - m_IndexUser = 0; + virtual ~CRecordSlide(); - AddRef(); - } + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream); - virtual ~CRecordSlide() - { - Clear(); - RELEASEOBJECT ( m_pSlideProgTagsContainer ); - } + bool IsSlide(); - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - m_oHeader = oHeader; - m_arRecords.clear(); - - LONG lPosition = 0; - StreamUtils::StreamPosition(lPosition, pStream); - - m_oHeader = oHeader; - - UINT lCurLen = 0; - SRecordHeader oRec; - - while (lCurLen < m_oHeader.RecLen) - { - if (oRec.ReadFromStream(pStream) == FALSE) - { - break; - } - - if ( RT_SlideShowSlideInfoAtom == oRec.RecType ) - { - m_bExistsTransition = true; - m_oSlideShowSlideInfoAtom.ReadFromStream ( oRec, pStream ); - - lCurLen += (8 + oRec.RecLen); - continue; - } - - if ( RT_ProgTags == oRec.RecType ) - { - m_pSlideProgTagsContainer = - new CRecordSlideProgTagsContainer(); - m_pSlideProgTagsContainer->ReadFromStream(oRec, pStream); - - lCurLen += (8 + oRec.RecLen); - continue; - } - - if (RT_VbaInfo == oRec.RecType) - { - auto pVbaInfo = new CRecordsContainer; - pVbaInfo->ReadFromStream(oRec, pStream); - m_arRecords.push_back(pVbaInfo); - - lCurLen += (8 + oRec.RecLen); - continue; - } - - - IRecord* pRecord = CreateByType ( oRec ); - - - - pRecord->ReadFromStream(oRec, pStream); - m_arRecords.push_back(pRecord); - - - lCurLen += (8 + oRec.RecLen); - } - if (lCurLen != m_oHeader.RecLen) - { - // нужно разобраться, что тут такое!!! - LONG lPosition = 0; - StreamUtils::StreamSeek(lPosition + m_oHeader.RecLen, pStream); - } - } - - bool IsSlide() - { - for (size_t nIndex = 0; nIndex < m_arRecords.size(); ++nIndex) - { - if ((RT_Slide == m_arRecords[nIndex]->m_oHeader.RecType) || - (RT_MainMaster == m_arRecords[nIndex]->m_oHeader.RecType) || - (RT_Notes == m_arRecords[nIndex]->m_oHeader.RecType)) - { - return true; - } - } - return false; - } - - void AddRef() - { - ++m_lCountReferences; - } - void Release() - { - --m_lCountReferences; - if (0 == m_lCountReferences) - delete this; - } - CRecordSlide* QueryInterface() - { - AddRef(); - return this; - } + void AddRef(); + void Release(); + CRecordSlide* QueryInterface(); }; diff --git a/MsBinaryFile/PptFile/Records/SlideFlags10Atom.cpp b/MsBinaryFile/PptFile/Records/SlideFlags10Atom.cpp new file mode 100644 index 0000000000..cc775b1c28 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/SlideFlags10Atom.cpp @@ -0,0 +1,12 @@ +#include "SlideFlags10Atom.h" + + +void PPT_FORMAT::CRecordSlideFlags10Atom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + _UINT32 data(StreamUtils::ReadLONG(pStream)); + + m_fPreserveMaster = ( 0x01 == ( 0x01 & ((BYTE)data) ) ); + m_fOverrideMasterAnimation = ( 0x02 == ( 0x02 & ((BYTE)data) ) ); +} diff --git a/MsBinaryFile/PptFile/Records/SlideFlags10Atom.h b/MsBinaryFile/PptFile/Records/SlideFlags10Atom.h index 9c7d0bfe49..a6c99e4cdd 100644 --- a/MsBinaryFile/PptFile/Records/SlideFlags10Atom.h +++ b/MsBinaryFile/PptFile/Records/SlideFlags10Atom.h @@ -39,15 +39,7 @@ namespace PPT_FORMAT class CRecordSlideFlags10Atom : public CUnknownRecord { public: - void ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) override - { - m_oHeader = oHeader; - - _UINT32 data(StreamUtils::ReadLONG(pStream)); - - m_fPreserveMaster = ( 0x01 == ( 0x01 & ((BYTE)data) ) ); - m_fOverrideMasterAnimation = ( 0x02 == ( 0x02 & ((BYTE)data) ) ); - } + void ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) override; public: bool m_fPreserveMaster; bool m_fOverrideMasterAnimation; diff --git a/MsBinaryFile/PptFile/Records/SlideListWithText.cpp b/MsBinaryFile/PptFile/Records/SlideListWithText.cpp new file mode 100644 index 0000000000..9130829f4a --- /dev/null +++ b/MsBinaryFile/PptFile/Records/SlideListWithText.cpp @@ -0,0 +1,117 @@ +#include "SlideListWithText.h" + + +CRecordSlideListWithText::CRecordSlideListWithText() : m_arSlides() +{ + m_Type = CollectionOfSlides; +} + +CRecordSlideListWithText::~CRecordSlideListWithText() +{ +} + +void CRecordSlideListWithText::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + m_Type = (Instances)m_oHeader.RecInstance; + + if (m_oHeader.IsContainer()) + { + // а по-другому и быть не могло... + _UINT32 lSymbolCount = 0; + + UINT lCurLen = 0; + SRecordHeader oRec; + + while (lCurLen < m_oHeader.RecLen) + { + if (oRec.ReadFromStream(pStream) == FALSE) + { + break; + } + + IRecord* pRecord = CreateByType(oRec); + + if (RT_StyleTextPropAtom == oRec.RecType) + { + ((CRecordStyleTextPropAtom*)(pRecord))->m_lCount = lSymbolCount; + } + else if (RT_TextSpecialInfoAtom == oRec.RecType) + { + ((CRecordTextSpecInfoAtom*)(pRecord))->m_lCount = lSymbolCount; + } + + pRecord->ReadFromStream(oRec, pStream); + lCurLen += (8 + oRec.RecLen); + + if (RT_SlidePersistAtom == oRec.RecType) + { + m_arSlides.push_back((CRecordSlidePersistAtom*)pRecord); + + std::vector elm; + m_arTextPlaceHolders.push_back(elm); + } + else + { + long nCurrentSlide = (long)m_arSlides.size() - 1; + if (0 > nCurrentSlide) + continue; + + CRecordTextHeaderAtom* pHeader = dynamic_cast(pRecord); + if (NULL != pHeader) + { + CTextFullSettings oAttr; + m_arTextPlaceHolders[nCurrentSlide].push_back(oAttr); + m_arTextPlaceHolders[nCurrentSlide][m_arTextPlaceHolders[nCurrentSlide].size() - 1].m_nTextType = pHeader->m_nTextType; + + m_arRecords.push_back(pRecord); + continue; + } + CRecordTextCharsAtom* pChars = dynamic_cast(pRecord); + CRecordTextBytesAtom* pBytes = dynamic_cast(pRecord); + + long nCurrentTextHeader = (long)m_arTextPlaceHolders[nCurrentSlide].size() - 1; + if (0 > nCurrentTextHeader) + continue; + + // здесь еще настойки кроме текста + if (NULL != pChars) + { + m_arTextPlaceHolders[nCurrentSlide][nCurrentTextHeader].m_strText = pChars->m_strText; + lSymbolCount = (_UINT32)pChars->m_strText.length(); + } + else if (NULL != pBytes) + { + m_arTextPlaceHolders[nCurrentSlide][nCurrentTextHeader].m_strText = pBytes->m_strText; + lSymbolCount = (_UINT32)pBytes->m_strText.length(); + } + + if (RT_StyleTextPropAtom == oRec.RecType) + { + m_arTextPlaceHolders[nCurrentSlide][nCurrentTextHeader].m_pTextStyleProp = + dynamic_cast(pRecord); + } + if (RT_TextSpecialInfoAtom == oRec.RecType) + { + m_arTextPlaceHolders[nCurrentSlide][nCurrentTextHeader].m_pTextSpecInfo = + dynamic_cast(pRecord); + } + if (RT_TextRulerAtom == oRec.RecType) + { + m_arTextPlaceHolders[nCurrentSlide][nCurrentTextHeader].m_pTextRuler = + dynamic_cast(pRecord); + } + if (RT_TextInteractiveInfoAtom == oRec.RecType) + { + CRecordTextInteractiveInfoAtom* pTxRanges = dynamic_cast(pRecord); + PPT_FORMAT::CTextRange oRange; + oRange.m_lStart = pTxRanges->m_lStart; + oRange.m_lEnd = pTxRanges->m_lEnd; + m_arTextPlaceHolders[nCurrentSlide][nCurrentTextHeader].m_arRanges.push_back(oRange); + } + } + + m_arRecords.push_back(pRecord); + } + } +} diff --git a/MsBinaryFile/PptFile/Records/SlideListWithText.h b/MsBinaryFile/PptFile/Records/SlideListWithText.h index f891e11d7e..16d46bde59 100644 --- a/MsBinaryFile/PptFile/Records/SlideListWithText.h +++ b/MsBinaryFile/PptFile/Records/SlideListWithText.h @@ -53,118 +53,9 @@ public: public: - CRecordSlideListWithText() : m_arSlides() - { - m_Type = CollectionOfSlides; - } + CRecordSlideListWithText(); - ~CRecordSlideListWithText() - { - } + ~CRecordSlideListWithText(); - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - m_oHeader = oHeader; - m_Type = (Instances)m_oHeader.RecInstance; - - if (m_oHeader.IsContainer()) - { - // а по-другому и быть не могло... - _UINT32 lSymbolCount = 0; - - UINT lCurLen = 0; - SRecordHeader oRec; - - while (lCurLen < m_oHeader.RecLen) - { - if (oRec.ReadFromStream(pStream) == FALSE) - { - break; - } - - IRecord* pRecord = CreateByType(oRec); - - if (RT_StyleTextPropAtom == oRec.RecType) - { - ((CRecordStyleTextPropAtom*)(pRecord))->m_lCount = lSymbolCount; - } - else if (RT_TextSpecialInfoAtom == oRec.RecType) - { - ((CRecordTextSpecInfoAtom*)(pRecord))->m_lCount = lSymbolCount; - } - - pRecord->ReadFromStream(oRec, pStream); - lCurLen += (8 + oRec.RecLen); - - if (RT_SlidePersistAtom == oRec.RecType) - { - m_arSlides.push_back((CRecordSlidePersistAtom*)pRecord); - - std::vector elm; - m_arTextPlaceHolders.push_back(elm); - } - else - { - long nCurrentSlide = (long)m_arSlides.size() - 1; - if (0 > nCurrentSlide) - continue; - - CRecordTextHeaderAtom* pHeader = dynamic_cast(pRecord); - if (NULL != pHeader) - { - CTextFullSettings oAttr; - m_arTextPlaceHolders[nCurrentSlide].push_back(oAttr); - m_arTextPlaceHolders[nCurrentSlide][m_arTextPlaceHolders[nCurrentSlide].size() - 1].m_nTextType = pHeader->m_nTextType; - - m_arRecords.push_back(pRecord); - continue; - } - CRecordTextCharsAtom* pChars = dynamic_cast(pRecord); - CRecordTextBytesAtom* pBytes = dynamic_cast(pRecord); - - long nCurrentTextHeader = (long)m_arTextPlaceHolders[nCurrentSlide].size() - 1; - if (0 > nCurrentTextHeader) - continue; - - // здесь еще настойки кроме текста - if (NULL != pChars) - { - m_arTextPlaceHolders[nCurrentSlide][nCurrentTextHeader].m_strText = pChars->m_strText; - lSymbolCount = (_UINT32)pChars->m_strText.length(); - } - else if (NULL != pBytes) - { - m_arTextPlaceHolders[nCurrentSlide][nCurrentTextHeader].m_strText = pBytes->m_strText; - lSymbolCount = (_UINT32)pBytes->m_strText.length(); - } - - if (RT_StyleTextPropAtom == oRec.RecType) - { - m_arTextPlaceHolders[nCurrentSlide][nCurrentTextHeader].m_pTextStyleProp = - dynamic_cast(pRecord); - } - if (RT_TextSpecialInfoAtom == oRec.RecType) - { - m_arTextPlaceHolders[nCurrentSlide][nCurrentTextHeader].m_pTextSpecInfo = - dynamic_cast(pRecord); - } - if (RT_TextRulerAtom == oRec.RecType) - { - m_arTextPlaceHolders[nCurrentSlide][nCurrentTextHeader].m_pTextRuler = - dynamic_cast(pRecord); - } - if (RT_TextInteractiveInfoAtom == oRec.RecType) - { - CRecordTextInteractiveInfoAtom* pTxRanges = dynamic_cast(pRecord); - PPT_FORMAT::CTextRange oRange; - oRange.m_lStart = pTxRanges->m_lStart; - oRange.m_lEnd = pTxRanges->m_lEnd; - m_arTextPlaceHolders[nCurrentSlide][nCurrentTextHeader].m_arRanges.push_back(oRange); - } - } - - m_arRecords.push_back(pRecord); - } - } - } + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream); }; diff --git a/MsBinaryFile/PptFile/Records/SlidePersistAtom.cpp b/MsBinaryFile/PptFile/Records/SlidePersistAtom.cpp new file mode 100644 index 0000000000..893d6fe098 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/SlidePersistAtom.cpp @@ -0,0 +1,29 @@ +#include "SlidePersistAtom.h" + + +CRecordSlidePersistAtom::CRecordSlidePersistAtom() +{ +} + +CRecordSlidePersistAtom::~CRecordSlidePersistAtom() +{ +} + +void CRecordSlidePersistAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + m_nPsrRef = StreamUtils::ReadDWORD(pStream); + + BYTE Mem = 0; + Mem = StreamUtils::ReadBYTE(pStream); + m_bShouldCollapse = ((Mem & 0x02) == 0x02); + m_bNonOutlineData = ((Mem & 0x04) == 0x04); + + StreamUtils::StreamSkip(3, pStream); + + m_nNumberText = (INT)StreamUtils::ReadLONG(pStream); + m_nSlideID = StreamUtils::ReadDWORD(pStream); + + StreamUtils::StreamSkip(4, pStream); +} diff --git a/MsBinaryFile/PptFile/Records/SlidePersistAtom.h b/MsBinaryFile/PptFile/Records/SlidePersistAtom.h index fdc7aa7458..1e60f184b4 100644 --- a/MsBinaryFile/PptFile/Records/SlidePersistAtom.h +++ b/MsBinaryFile/PptFile/Records/SlidePersistAtom.h @@ -43,31 +43,10 @@ public: INT m_nNumberText; _UINT32 m_nSlideID; - CRecordSlidePersistAtom() - { - } + CRecordSlidePersistAtom(); - ~CRecordSlidePersistAtom() - { - } + ~CRecordSlidePersistAtom(); - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - m_oHeader = oHeader; + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream); - m_nPsrRef = StreamUtils::ReadDWORD(pStream); - - BYTE Mem = 0; - Mem = StreamUtils::ReadBYTE(pStream); - m_bShouldCollapse = ((Mem & 0x02) == 0x02); - m_bNonOutlineData = ((Mem & 0x04) == 0x04); - - StreamUtils::StreamSkip(3, pStream); - - m_nNumberText = (INT)StreamUtils::ReadLONG(pStream); - m_nSlideID = StreamUtils::ReadDWORD(pStream); - - StreamUtils::StreamSkip(4, pStream); - } - -}; \ No newline at end of file +}; diff --git a/MsBinaryFile/PptFile/Records/SlideProgTagsContainer.cpp b/MsBinaryFile/PptFile/Records/SlideProgTagsContainer.cpp new file mode 100644 index 0000000000..607aa4162f --- /dev/null +++ b/MsBinaryFile/PptFile/Records/SlideProgTagsContainer.cpp @@ -0,0 +1,280 @@ +#include "SlideProgTagsContainer.h" + + +CRecordPP9SlideBinaryTagExtension::CRecordPP9SlideBinaryTagExtension() +{ + +} + +CRecordPP9SlideBinaryTagExtension::~CRecordPP9SlideBinaryTagExtension() +{ + for (auto pEl : m_rgTextMasterStyleAtom) + { + RELEASEOBJECT(pEl) + } +} + +void CRecordPP9SlideBinaryTagExtension::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + LONG lPos = 0; + StreamUtils::StreamPosition ( lPos, pStream ); + + UINT lCurLen = 0; + + SRecordHeader ReadHeader; + + while ( lCurLen < m_oHeader.RecLen ) + { + if ( ReadHeader.ReadFromStream(pStream) == false) + break; + + lCurLen += 8 + ReadHeader.RecLen; + auto pStyle = new CRecordTextMasterStyle9Atom; + pStyle->ReadFromStream(ReadHeader, pStream); + m_rgTextMasterStyleAtom.push_back(pStyle); + } + + StreamUtils::StreamSeek ( lPos + m_oHeader.RecLen, pStream ); +} + +CRecordPP10SlideBinaryTagExtension::CRecordPP10SlideBinaryTagExtension() : + m_pLinkedSlideAtom(nullptr), + m_pSlideFlagsAtom(nullptr), + m_pSlideTimeAtom(nullptr), + m_pHashCode10Atom(nullptr), + m_pExtTimeNodeContainer(nullptr), + m_pBuildListContainer(nullptr), + + m_haveLinkedSlide(false), + m_haveSlideFlags(false), + m_haveSlideTime(false), + m_haveHashCode(false), + m_haveExtTime(false), + m_haveBuildList(false) +{ +} + +CRecordPP10SlideBinaryTagExtension::~CRecordPP10SlideBinaryTagExtension() +{ + RELEASEOBJECT (m_pLinkedSlideAtom) + RELEASEOBJECT (m_pSlideFlagsAtom) + RELEASEOBJECT (m_pSlideTimeAtom) + RELEASEOBJECT (m_pHashCode10Atom) + RELEASEOBJECT (m_pExtTimeNodeContainer) + RELEASEOBJECT (m_pBuildListContainer) + + for (auto pEl : m_arrRgTextMasterStyleAtom) + RELEASEOBJECT(pEl) + for (auto pEl : m_arrRgComment10Container) + RELEASEOBJECT(pEl) + for (auto pEl : m_arrRgLinkedShape10Atom) + RELEASEOBJECT(pEl) +} + +void PPT_FORMAT::CRecordPP10SlideBinaryTagExtension::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + LONG lPos = 0; + StreamUtils::StreamPosition ( lPos, pStream ); + + UINT lCurLen = 0; + + SRecordHeader ReadHeader; + + while ( lCurLen < m_oHeader.RecLen ) + { + if ( ReadHeader.ReadFromStream(pStream) == false) + break; + + lCurLen += 8 + ReadHeader.RecLen; + + switch (ReadHeader.RecType) { + case RT_TextMasterStyle10Atom: + { + CRecordTextMasterStyleAtom* pRecord = + new CRecordTextMasterStyleAtom(); + pRecord->ReadFromStream(ReadHeader, pStream); + m_arrRgTextMasterStyleAtom.push_back(pRecord); + break; + } + + case RT_Comment10: + { + CRecordComment10Container* pRecord = + new CRecordComment10Container(); + pRecord->ReadFromStream(ReadHeader, pStream); + m_arrRgComment10Container.push_back(pRecord); + break; + } + + case RT_LinkedSlide10Atom : + { + m_pLinkedSlideAtom = new CRecordLinkedSlide10Atom(); + m_pLinkedSlideAtom->ReadFromStream(ReadHeader, pStream); + m_haveLinkedSlide = true; + break; + } + + case RT_LinkedShape10Atom : + { + CRecordLinkedShape10Atom* pRecord = + new CRecordLinkedShape10Atom(); + pRecord->ReadFromStream(ReadHeader, pStream); + m_arrRgLinkedShape10Atom.push_back(pRecord); + break; + } + + case RT_SlideFlags10Atom: + { + m_pSlideFlagsAtom = new CRecordSlideFlags10Atom(); + m_pSlideFlagsAtom->ReadFromStream(ReadHeader, pStream); + m_haveSlideFlags = true; + break; + } + + case RT_SlideTime10Atom: + { + m_pSlideTimeAtom = new CRecordSlideTime10Atom(); + m_pSlideTimeAtom->ReadFromStream(ReadHeader, pStream); + m_haveSlideTime = true; + break; + } + + case RT_HashCodeAtom: + { + m_pHashCode10Atom = new CRecordHashCode10Atom(); + m_pHashCode10Atom->ReadFromStream(ReadHeader, pStream); + m_haveHashCode = true; + break; + } + + case RT_TimeExtTimeNodeContainer: + { + m_pExtTimeNodeContainer = new CRecordExtTimeNodeContainer(); + m_pExtTimeNodeContainer->ReadFromStream(ReadHeader, pStream); + m_haveExtTime = true; + break; + } + + case RT_BuildList: + { + m_pBuildListContainer = new CRecordBuildListContainer(); + m_pBuildListContainer->ReadFromStream(ReadHeader, pStream); + m_haveBuildList = true; + break; + } + + default: + break; + } + } + + StreamUtils::StreamSeek ( lPos + m_oHeader.RecLen, pStream ); +} + +CRecordPP12SlideBinaryTagExtension::CRecordPP12SlideBinaryTagExtension() +{ + +} + +CRecordPP12SlideBinaryTagExtension::~CRecordPP12SlideBinaryTagExtension() +{ + +} + +CRecordSlideProgBinaryTagSubContainerOrAtom::CRecordSlideProgBinaryTagSubContainerOrAtom() : + m_pTagName(nullptr), m_pTagContainer(nullptr) +{} + +CRecordSlideProgBinaryTagSubContainerOrAtom::~CRecordSlideProgBinaryTagSubContainerOrAtom() +{ + RELEASEOBJECT(m_pTagName); + RELEASEOBJECT(m_pTagContainer); +} + +void CRecordSlideProgBinaryTagSubContainerOrAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + LONG lPos = 0; StreamUtils::StreamPosition(lPos, pStream); + + SRecordHeader ReadHeader; + ReadHeader.ReadFromStream(pStream); + + if (m_oHeader.RecType == RT_ProgBinaryTag) + { + m_pTagName = new CRecordCString(); + m_pTagName->ReadFromStream(ReadHeader, pStream); + + SRecordHeader childHeader; + if (!childHeader.ReadFromStream(pStream)) + return; + + if (m_pTagName->m_strText == TN_PPT9) { + m_pTagContainer = new CRecordPP9SlideBinaryTagExtension(); + dynamic_cast + (m_pTagContainer)->ReadFromStream(childHeader, pStream); + } else if (m_pTagName->m_strText == TN_PPT10) { + m_pTagContainer = new CRecordPP10SlideBinaryTagExtension(); + dynamic_cast + (m_pTagContainer)->ReadFromStream(childHeader, pStream); + } else if (m_pTagName->m_strText == TN_PPT12) { + m_pTagContainer = new CRecordPP12SlideBinaryTagExtension(); + dynamic_cast + (m_pTagContainer)->ReadFromStream(childHeader, pStream); + } + + } else if (m_oHeader.RecType == RT_ProgStringTag) + { + m_pTagContainer = new CRecordProgStringTagContainer(); + dynamic_cast + (m_pTagContainer)->ReadFromStream(ReadHeader, pStream); + } + LONG lSeek = lPos + m_oHeader.RecLen; + StreamUtils::StreamSeek(lSeek, pStream); +} + +CRecordSlideProgTagsContainer::CRecordSlideProgTagsContainer() +{ + +} + +CRecordSlideProgTagsContainer::~CRecordSlideProgTagsContainer() +{ + for (auto pEl : m_arrRgChildRec) + RELEASEOBJECT(pEl) +} + +void PPT_FORMAT::CRecordSlideProgTagsContainer::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + LONG lPos = 0; + StreamUtils::StreamPosition ( lPos, pStream ); + + LONG lCurLen(0); + SRecordHeader ReadHeader; + + while (lCurLen < (LONG)m_oHeader.RecLen) + { + if ( ReadHeader.ReadFromStream(pStream) == false) + break; + lCurLen += 8 + ReadHeader.RecLen; + CRecordSlideProgBinaryTagSubContainerOrAtom* pRecord = + new CRecordSlideProgBinaryTagSubContainerOrAtom(); + pRecord->ReadFromStream(ReadHeader, pStream); + m_arrRgChildRec.push_back(pRecord); + } + + StreamUtils::StreamSeek(lPos + m_oHeader.RecLen, pStream); +} + +CRecordPP10SlideBinaryTagExtension *CRecordSlideProgTagsContainer::getPP10SlideBinaryTagExtension() +{ + for (auto* rec : m_arrRgChildRec) + if (rec->m_pTagName && rec->m_pTagName->m_strText == TN_PPT10) + return (CRecordPP10SlideBinaryTagExtension*)rec->m_pTagContainer; + + return nullptr; +} diff --git a/MsBinaryFile/PptFile/Records/SlideProgTagsContainer.h b/MsBinaryFile/PptFile/Records/SlideProgTagsContainer.h index b61b01eda0..7c997f7c67 100644 --- a/MsBinaryFile/PptFile/Records/SlideProgTagsContainer.h +++ b/MsBinaryFile/PptFile/Records/SlideProgTagsContainer.h @@ -60,42 +60,11 @@ class CRecordPP9SlideBinaryTagExtension : public CUnknownRecord public: std::vector m_rgTextMasterStyleAtom; - CRecordPP9SlideBinaryTagExtension() - { + CRecordPP9SlideBinaryTagExtension(); - } + ~CRecordPP9SlideBinaryTagExtension(); - ~CRecordPP9SlideBinaryTagExtension() - { - for (auto pEl : m_rgTextMasterStyleAtom) - { - RELEASEOBJECT(pEl) - } - } - - virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ) - { - m_oHeader = oHeader; - LONG lPos = 0; - StreamUtils::StreamPosition ( lPos, pStream ); - - UINT lCurLen = 0; - - SRecordHeader ReadHeader; - - while ( lCurLen < m_oHeader.RecLen ) - { - if ( ReadHeader.ReadFromStream(pStream) == false) - break; - - lCurLen += 8 + ReadHeader.RecLen; - auto pStyle = new CRecordTextMasterStyle9Atom; - pStyle->ReadFromStream(ReadHeader, pStream); - m_rgTextMasterStyleAtom.push_back(pStyle); - } - - StreamUtils::StreamSeek ( lPos + m_oHeader.RecLen, pStream ); - } + virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ); }; @@ -103,141 +72,11 @@ class CRecordPP10SlideBinaryTagExtension : public CUnknownRecord { public: - CRecordPP10SlideBinaryTagExtension () : - m_pLinkedSlideAtom(nullptr), - m_pSlideFlagsAtom(nullptr), - m_pSlideTimeAtom(nullptr), - m_pHashCode10Atom(nullptr), - m_pExtTimeNodeContainer(nullptr), - m_pBuildListContainer(nullptr), + CRecordPP10SlideBinaryTagExtension (); - m_haveLinkedSlide(false), - m_haveSlideFlags(false), - m_haveSlideTime(false), - m_haveHashCode(false), - m_haveExtTime(false), - m_haveBuildList(false) - { - } + virtual ~CRecordPP10SlideBinaryTagExtension (); - virtual ~CRecordPP10SlideBinaryTagExtension () - { - RELEASEOBJECT (m_pLinkedSlideAtom) - RELEASEOBJECT (m_pSlideFlagsAtom) - RELEASEOBJECT (m_pSlideTimeAtom) - RELEASEOBJECT (m_pHashCode10Atom) - RELEASEOBJECT (m_pExtTimeNodeContainer) - RELEASEOBJECT (m_pBuildListContainer) - - for (auto pEl : m_arrRgTextMasterStyleAtom) - RELEASEOBJECT(pEl) - for (auto pEl : m_arrRgComment10Container) - RELEASEOBJECT(pEl) - for (auto pEl : m_arrRgLinkedShape10Atom) - RELEASEOBJECT(pEl) - } - - virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ) - { - m_oHeader = oHeader; - - LONG lPos = 0; - StreamUtils::StreamPosition ( lPos, pStream ); - - UINT lCurLen = 0; - - SRecordHeader ReadHeader; - - while ( lCurLen < m_oHeader.RecLen ) - { - if ( ReadHeader.ReadFromStream(pStream) == false) - break; - - lCurLen += 8 + ReadHeader.RecLen; - - switch (ReadHeader.RecType) { - case RT_TextMasterStyle10Atom: - { - CRecordTextMasterStyleAtom* pRecord = - new CRecordTextMasterStyleAtom(); - pRecord->ReadFromStream(ReadHeader, pStream); - m_arrRgTextMasterStyleAtom.push_back(pRecord); - break; - } - - case RT_Comment10: - { - CRecordComment10Container* pRecord = - new CRecordComment10Container(); - pRecord->ReadFromStream(ReadHeader, pStream); - m_arrRgComment10Container.push_back(pRecord); - break; - } - - case RT_LinkedSlide10Atom : - { - m_pLinkedSlideAtom = new CRecordLinkedSlide10Atom(); - m_pLinkedSlideAtom->ReadFromStream(ReadHeader, pStream); - m_haveLinkedSlide = true; - break; - } - - case RT_LinkedShape10Atom : - { - CRecordLinkedShape10Atom* pRecord = - new CRecordLinkedShape10Atom(); - pRecord->ReadFromStream(ReadHeader, pStream); - m_arrRgLinkedShape10Atom.push_back(pRecord); - break; - } - - case RT_SlideFlags10Atom: - { - m_pSlideFlagsAtom = new CRecordSlideFlags10Atom(); - m_pSlideFlagsAtom->ReadFromStream(ReadHeader, pStream); - m_haveSlideFlags = true; - break; - } - - case RT_SlideTime10Atom: - { - m_pSlideTimeAtom = new CRecordSlideTime10Atom(); - m_pSlideTimeAtom->ReadFromStream(ReadHeader, pStream); - m_haveSlideTime = true; - break; - } - - case RT_HashCodeAtom: - { - m_pHashCode10Atom = new CRecordHashCode10Atom(); - m_pHashCode10Atom->ReadFromStream(ReadHeader, pStream); - m_haveHashCode = true; - break; - } - - case RT_TimeExtTimeNodeContainer: - { - m_pExtTimeNodeContainer = new CRecordExtTimeNodeContainer(); - m_pExtTimeNodeContainer->ReadFromStream(ReadHeader, pStream); - m_haveExtTime = true; - break; - } - - case RT_BuildList: - { - m_pBuildListContainer = new CRecordBuildListContainer(); - m_pBuildListContainer->ReadFromStream(ReadHeader, pStream); - m_haveBuildList = true; - break; - } - - default: - break; - } - } - - StreamUtils::StreamSeek ( lPos + m_oHeader.RecLen, pStream ); - } + virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ); public: std::vector m_arrRgTextMasterStyleAtom; @@ -262,15 +101,9 @@ public: class CRecordPP12SlideBinaryTagExtension : public CUnknownRecord { public: - CRecordPP12SlideBinaryTagExtension() - { + CRecordPP12SlideBinaryTagExtension(); - } - - ~CRecordPP12SlideBinaryTagExtension() - { - - } + ~CRecordPP12SlideBinaryTagExtension(); virtual void ReadFromStream ( SRecordHeader & oHeader, POLE::Stream* pStream ) { @@ -291,54 +124,9 @@ public: class CRecordSlideProgBinaryTagSubContainerOrAtom : public CUnknownRecord { public: - CRecordSlideProgBinaryTagSubContainerOrAtom() : - m_pTagName(nullptr), m_pTagContainer(nullptr) - {} - ~CRecordSlideProgBinaryTagSubContainerOrAtom() - { - RELEASEOBJECT(m_pTagName); - RELEASEOBJECT(m_pTagContainer); - } - void ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) override - { - m_oHeader = oHeader; - LONG lPos = 0; StreamUtils::StreamPosition(lPos, pStream); - - SRecordHeader ReadHeader; - ReadHeader.ReadFromStream(pStream); - - if (m_oHeader.RecType == RT_ProgBinaryTag) - { - m_pTagName = new CRecordCString(); - m_pTagName->ReadFromStream(ReadHeader, pStream); - - SRecordHeader childHeader; - if (!childHeader.ReadFromStream(pStream)) - return; - - if (m_pTagName->m_strText == TN_PPT9) { - m_pTagContainer = new CRecordPP9SlideBinaryTagExtension(); - dynamic_cast - (m_pTagContainer)->ReadFromStream(childHeader, pStream); - } else if (m_pTagName->m_strText == TN_PPT10) { - m_pTagContainer = new CRecordPP10SlideBinaryTagExtension(); - dynamic_cast - (m_pTagContainer)->ReadFromStream(childHeader, pStream); - } else if (m_pTagName->m_strText == TN_PPT12) { - m_pTagContainer = new CRecordPP12SlideBinaryTagExtension(); - dynamic_cast - (m_pTagContainer)->ReadFromStream(childHeader, pStream); - } - - } else if (m_oHeader.RecType == RT_ProgStringTag) - { - m_pTagContainer = new CRecordProgStringTagContainer(); - dynamic_cast - (m_pTagContainer)->ReadFromStream(ReadHeader, pStream); - } - LONG lSeek = lPos + m_oHeader.RecLen; - StreamUtils::StreamSeek(lSeek, pStream); - } + CRecordSlideProgBinaryTagSubContainerOrAtom(); + ~CRecordSlideProgBinaryTagSubContainerOrAtom(); + void ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) override; public: CRecordCString* m_pTagName; // OPTIONAL @@ -349,50 +137,14 @@ class CRecordSlideProgTagsContainer : public CUnknownRecord { public: - CRecordSlideProgTagsContainer () - { + CRecordSlideProgTagsContainer (); - } - - ~CRecordSlideProgTagsContainer() - { - for (auto pEl : m_arrRgChildRec) - RELEASEOBJECT(pEl) - } + ~CRecordSlideProgTagsContainer(); - virtual void ReadFromStream (SRecordHeader & oHeader, POLE::Stream* pStream) - { - m_oHeader = oHeader; + virtual void ReadFromStream (SRecordHeader & oHeader, POLE::Stream* pStream) override; - LONG lPos = 0; - StreamUtils::StreamPosition ( lPos, pStream ); - - LONG lCurLen(0); - SRecordHeader ReadHeader; - - while (lCurLen < (LONG)m_oHeader.RecLen) - { - if ( ReadHeader.ReadFromStream(pStream) == false) - break; - lCurLen += 8 + ReadHeader.RecLen; - CRecordSlideProgBinaryTagSubContainerOrAtom* pRecord = - new CRecordSlideProgBinaryTagSubContainerOrAtom(); - pRecord->ReadFromStream(ReadHeader, pStream); - m_arrRgChildRec.push_back(pRecord); - } - - StreamUtils::StreamSeek(lPos + m_oHeader.RecLen, pStream); - } - - CRecordPP10SlideBinaryTagExtension* getPP10SlideBinaryTagExtension() - { - for (auto* rec : m_arrRgChildRec) - if (rec->m_pTagName && rec->m_pTagName->m_strText == TN_PPT10) - return (CRecordPP10SlideBinaryTagExtension*)rec->m_pTagContainer; - - return nullptr; - } + CRecordPP10SlideBinaryTagExtension* getPP10SlideBinaryTagExtension(); public: std::vector m_arrRgChildRec; diff --git a/MsBinaryFile/PptFile/Records/SlideTime10Atom.cpp b/MsBinaryFile/PptFile/Records/SlideTime10Atom.cpp new file mode 100644 index 0000000000..b6f319e218 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/SlideTime10Atom.cpp @@ -0,0 +1,10 @@ +#include "SlideTime10Atom.h" + + +void CRecordSlideTime10Atom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + m_oFileTime.dwLowDateTime = StreamUtils::ReadDWORD(pStream); + m_oFileTime.dwHighDateTime = StreamUtils::ReadDWORD(pStream); +} diff --git a/MsBinaryFile/PptFile/Records/SlideTime10Atom.h b/MsBinaryFile/PptFile/Records/SlideTime10Atom.h index 78dd949531..65b43905ef 100644 --- a/MsBinaryFile/PptFile/Records/SlideTime10Atom.h +++ b/MsBinaryFile/PptFile/Records/SlideTime10Atom.h @@ -47,13 +47,7 @@ typedef struct _FILETIME { class CRecordSlideTime10Atom : public CUnknownRecord { public: -void ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) override -{ - m_oHeader = oHeader; - - m_oFileTime.dwLowDateTime = StreamUtils::ReadDWORD(pStream); - m_oFileTime.dwHighDateTime = StreamUtils::ReadDWORD(pStream); -} +void ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) override; public: FILETIME m_oFileTime; diff --git a/MsBinaryFile/PptFile/Records/SlideViewInfoAtom.cpp b/MsBinaryFile/PptFile/Records/SlideViewInfoAtom.cpp new file mode 100644 index 0000000000..207a22669f --- /dev/null +++ b/MsBinaryFile/PptFile/Records/SlideViewInfoAtom.cpp @@ -0,0 +1,19 @@ +#include "SlideViewInfoAtom.h" + + +CRecordSlideViewInfoAtom::CRecordSlideViewInfoAtom() +{ +} + +CRecordSlideViewInfoAtom::~CRecordSlideViewInfoAtom() +{ +} + +void CRecordSlideViewInfoAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + m_bShowGuides = StreamUtils::ReadBYTE(pStream); + m_bSnapToGrid = StreamUtils::ReadBYTE(pStream); + m_bSnapToShape = StreamUtils::ReadBYTE(pStream); +} diff --git a/MsBinaryFile/PptFile/Records/SlideViewInfoAtom.h b/MsBinaryFile/PptFile/Records/SlideViewInfoAtom.h index 937ea3dff8..6485127b5a 100644 --- a/MsBinaryFile/PptFile/Records/SlideViewInfoAtom.h +++ b/MsBinaryFile/PptFile/Records/SlideViewInfoAtom.h @@ -39,22 +39,9 @@ class CRecordSlideViewInfoAtom : public CUnknownRecord BOOL1 m_bSnapToShape; public: - - CRecordSlideViewInfoAtom() - { - } + CRecordSlideViewInfoAtom(); + ~CRecordSlideViewInfoAtom(); - ~CRecordSlideViewInfoAtom() - { - } + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) override; - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - m_oHeader = oHeader; - - m_bShowGuides = StreamUtils::ReadBYTE(pStream); - m_bSnapToGrid = StreamUtils::ReadBYTE(pStream); - m_bSnapToShape = StreamUtils::ReadBYTE(pStream); - } - -}; \ No newline at end of file +}; diff --git a/MsBinaryFile/PptFile/Records/SoundCollAtom.cpp b/MsBinaryFile/PptFile/Records/SoundCollAtom.cpp new file mode 100644 index 0000000000..d0e149d96a --- /dev/null +++ b/MsBinaryFile/PptFile/Records/SoundCollAtom.cpp @@ -0,0 +1,17 @@ +#include "SoundCollAtom.h" + + +CRecordSoundCollAtom::CRecordSoundCollAtom() +{ +} + +CRecordSoundCollAtom::~CRecordSoundCollAtom() +{ +} + +void CRecordSoundCollAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + m_nObjectIdSeed = StreamUtils::ReadDWORD(pStream); +} diff --git a/MsBinaryFile/PptFile/Records/SoundCollAtom.h b/MsBinaryFile/PptFile/Records/SoundCollAtom.h index 27ca63baa2..d726a00da3 100644 --- a/MsBinaryFile/PptFile/Records/SoundCollAtom.h +++ b/MsBinaryFile/PptFile/Records/SoundCollAtom.h @@ -37,18 +37,8 @@ class CRecordSoundCollAtom : public CUnknownRecord public: INT m_nObjectIdSeed; - CRecordSoundCollAtom() - { - } + CRecordSoundCollAtom(); + ~CRecordSoundCollAtom(); - ~CRecordSoundCollAtom() - { - } - - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - m_oHeader = oHeader; - - m_nObjectIdSeed = StreamUtils::ReadDWORD(pStream); - } -}; \ No newline at end of file + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) override; +}; diff --git a/MsBinaryFile/PptFile/Records/SoundCollectionContainer.cpp b/MsBinaryFile/PptFile/Records/SoundCollectionContainer.cpp new file mode 100644 index 0000000000..d52b52363c --- /dev/null +++ b/MsBinaryFile/PptFile/Records/SoundCollectionContainer.cpp @@ -0,0 +1,15 @@ +#include "SoundCollectionContainer.h" + + +CRecordSoundCollectionContainer::CRecordSoundCollectionContainer() +{ +} + +CRecordSoundCollectionContainer::~CRecordSoundCollectionContainer() +{ +} + +void CRecordSoundCollectionContainer::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + CRecordsContainer::ReadFromStream(oHeader, pStream); +} diff --git a/MsBinaryFile/PptFile/Records/SoundCollectionContainer.h b/MsBinaryFile/PptFile/Records/SoundCollectionContainer.h index 378658691c..e5c11b0d13 100644 --- a/MsBinaryFile/PptFile/Records/SoundCollectionContainer.h +++ b/MsBinaryFile/PptFile/Records/SoundCollectionContainer.h @@ -36,16 +36,9 @@ class CRecordSoundCollectionContainer : public CRecordsContainer { public: - CRecordSoundCollectionContainer() - { - } + CRecordSoundCollectionContainer(); - ~CRecordSoundCollectionContainer() - { - } + ~CRecordSoundCollectionContainer(); - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - CRecordsContainer::ReadFromStream(oHeader, pStream); - } -}; \ No newline at end of file + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) override; +}; diff --git a/MsBinaryFile/PptFile/Records/SoundContainer.cpp b/MsBinaryFile/PptFile/Records/SoundContainer.cpp new file mode 100644 index 0000000000..a567e5ad44 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/SoundContainer.cpp @@ -0,0 +1,15 @@ +#include "SoundContainer.h" + + +CRecordSoundContainer::CRecordSoundContainer() +{ +} + +CRecordSoundContainer::~CRecordSoundContainer() +{ +} + +void CRecordSoundContainer::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + CRecordsContainer::ReadFromStream(oHeader, pStream); +} diff --git a/MsBinaryFile/PptFile/Records/SoundContainer.h b/MsBinaryFile/PptFile/Records/SoundContainer.h index cc83928557..dc7bcd68a8 100644 --- a/MsBinaryFile/PptFile/Records/SoundContainer.h +++ b/MsBinaryFile/PptFile/Records/SoundContainer.h @@ -35,18 +35,9 @@ class CRecordSoundContainer : public CRecordsContainer { public: - - CRecordSoundContainer() - { - } + CRecordSoundContainer(); + ~CRecordSoundContainer(); - ~CRecordSoundContainer() - { - } + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) override; - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - CRecordsContainer::ReadFromStream(oHeader, pStream); - } - -}; \ No newline at end of file +}; diff --git a/MsBinaryFile/PptFile/Records/SoundDataBlob.cpp b/MsBinaryFile/PptFile/Records/SoundDataBlob.cpp new file mode 100644 index 0000000000..3efe609f83 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/SoundDataBlob.cpp @@ -0,0 +1,44 @@ +#include "SoundDataBlob.h" + + +CRecordSoundDataBlob::CRecordSoundDataBlob() +{ + m_pData = NULL; + m_lSize = 0; +} + +CRecordSoundDataBlob::~CRecordSoundDataBlob() +{ + ReleaseData(); +} + +void CRecordSoundDataBlob::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + m_lSize = m_oHeader.RecLen; + + if (0 < m_lSize) + { + m_pData = new BYTE[m_lSize]; + pStream->read(m_pData, m_lSize); + } +} + +void CRecordSoundDataBlob::ReleaseData() +{ + RELEASEARRAYOBJECTS(m_pData); +} + +void CRecordSoundDataBlob::SaveToFile(std::wstring strFile) +{ + if ((NULL == m_pData) || (0 >= m_lSize)) + return; + + NSFile::CFileBinary oFile; + oFile.CreateFileW(strFile); + + oFile.WriteFile((BYTE*)m_pData, (DWORD)m_lSize); + oFile.CloseFile(); + + ReleaseData(); +} diff --git a/MsBinaryFile/PptFile/Records/SoundDataBlob.h b/MsBinaryFile/PptFile/Records/SoundDataBlob.h index 275529ccaa..a7168eebdc 100644 --- a/MsBinaryFile/PptFile/Records/SoundDataBlob.h +++ b/MsBinaryFile/PptFile/Records/SoundDataBlob.h @@ -39,45 +39,13 @@ class CRecordSoundDataBlob : public CUnknownRecord public: - CRecordSoundDataBlob() - { - m_pData = NULL; - m_lSize = 0; - } + CRecordSoundDataBlob(); - ~CRecordSoundDataBlob() - { - ReleaseData(); - } + ~CRecordSoundDataBlob(); - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - m_oHeader = oHeader; - m_lSize = m_oHeader.RecLen; + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) override; - if (0 < m_lSize) - { - m_pData = new BYTE[m_lSize]; - pStream->read(m_pData, m_lSize); - } - } + void ReleaseData(); - void ReleaseData() - { - RELEASEARRAYOBJECTS(m_pData); - } - - void SaveToFile(std::wstring strFile) - { - if ((NULL == m_pData) || (0 >= m_lSize)) - return; - - NSFile::CFileBinary oFile; - oFile.CreateFileW(strFile); - - oFile.WriteFile((BYTE*)m_pData, (DWORD)m_lSize); - oFile.CloseFile(); - - ReleaseData(); - } -}; \ No newline at end of file + void SaveToFile(std::wstring strFile); +}; diff --git a/MsBinaryFile/PptFile/Records/StyleTextProp10Atom.cpp b/MsBinaryFile/PptFile/Records/StyleTextProp10Atom.cpp new file mode 100644 index 0000000000..7bb5f1055d --- /dev/null +++ b/MsBinaryFile/PptFile/Records/StyleTextProp10Atom.cpp @@ -0,0 +1,22 @@ +#include "StyleTextProp10Atom.h" + + +void CRecordStyleTextProp10Atom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + LONG lPos = 0; + StreamUtils::StreamPosition ( lPos, pStream ); + + LONG lCurPos = 0; + StreamUtils::StreamPosition ( lCurPos, pStream ); + + while ( lPos + (LONG)m_oHeader.RecLen > lCurPos) + { + STextCFException10 style; + style.ReadFromStream(pStream); + rgStyleTextProp10.push_back(style); + + StreamUtils::StreamPosition ( lCurPos, pStream ); + } + StreamUtils::StreamSeek(lPos + m_oHeader.RecLen, pStream); +} diff --git a/MsBinaryFile/PptFile/Records/StyleTextProp10Atom.h b/MsBinaryFile/PptFile/Records/StyleTextProp10Atom.h index 50902fb5b3..148054a8b2 100644 --- a/MsBinaryFile/PptFile/Records/StyleTextProp10Atom.h +++ b/MsBinaryFile/PptFile/Records/StyleTextProp10Atom.h @@ -42,24 +42,7 @@ class CRecordStyleTextProp10Atom : public CUnknownRecord public: std::vector rgStyleTextProp10; - virtual void ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) - { - m_oHeader = oHeader; - LONG lPos = 0; - StreamUtils::StreamPosition ( lPos, pStream ); - LONG lCurPos = 0; - StreamUtils::StreamPosition ( lCurPos, pStream ); - - while ( lPos + (LONG)m_oHeader.RecLen > lCurPos) - { - STextCFException10 style; - style.ReadFromStream(pStream); - rgStyleTextProp10.push_back(style); - - StreamUtils::StreamPosition ( lCurPos, pStream ); - } - StreamUtils::StreamSeek(lPos + m_oHeader.RecLen, pStream); - } + virtual void ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) override; }; } diff --git a/MsBinaryFile/PptFile/Records/StyleTextProp11Atom.cpp b/MsBinaryFile/PptFile/Records/StyleTextProp11Atom.cpp new file mode 100644 index 0000000000..e40061620f --- /dev/null +++ b/MsBinaryFile/PptFile/Records/StyleTextProp11Atom.cpp @@ -0,0 +1,22 @@ +#include "StyleTextProp11Atom.h" + + +void CRecordStyleTextProp11Atom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + LONG lPos = 0; + StreamUtils::StreamPosition ( lPos, pStream ); + + LONG lCurPos = 0; + StreamUtils::StreamPosition ( lCurPos, pStream ); + + while ( lPos + (LONG)m_oHeader.RecLen > lCurPos) + { + SStyleTextProp11 style; + style.ReadFromStream(pStream); + m_rgStyleTextProp11.push_back(style); + + StreamUtils::StreamPosition ( lCurPos, pStream ); + } + StreamUtils::StreamSeek(lPos + m_oHeader.RecLen, pStream); +} diff --git a/MsBinaryFile/PptFile/Records/StyleTextProp11Atom.h b/MsBinaryFile/PptFile/Records/StyleTextProp11Atom.h index 52e0a6246b..e0d1918a89 100644 --- a/MsBinaryFile/PptFile/Records/StyleTextProp11Atom.h +++ b/MsBinaryFile/PptFile/Records/StyleTextProp11Atom.h @@ -47,24 +47,6 @@ class CRecordStyleTextProp11Atom : public CUnknownRecord public: std::vector m_rgStyleTextProp11; - virtual void ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) - { - m_oHeader = oHeader; - LONG lPos = 0; - StreamUtils::StreamPosition ( lPos, pStream ); - - LONG lCurPos = 0; - StreamUtils::StreamPosition ( lCurPos, pStream ); - - while ( lPos + (LONG)m_oHeader.RecLen > lCurPos) - { - SStyleTextProp11 style; - style.ReadFromStream(pStream); - m_rgStyleTextProp11.push_back(style); - - StreamUtils::StreamPosition ( lCurPos, pStream ); - } - StreamUtils::StreamSeek(lPos + m_oHeader.RecLen, pStream); - } + virtual void ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) override; }; } diff --git a/MsBinaryFile/PptFile/Records/StyleTextProp9Atom.cpp b/MsBinaryFile/PptFile/Records/StyleTextProp9Atom.cpp new file mode 100644 index 0000000000..800fd636e9 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/StyleTextProp9Atom.cpp @@ -0,0 +1,30 @@ +#include "StyleTextProp9Atom.h" + + +CRecordStyleTextProp9Atom::~CRecordStyleTextProp9Atom() +{ +} + +void CRecordStyleTextProp9Atom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + LONG lCurPos; StreamUtils::StreamPosition(lCurPos, pStream); + LONG lEndPos = lCurPos + m_oHeader.RecLen; + + while(lCurPos < lEndPos) + { + SStyleTextProp9 rec; + rec.ReadFromStream(pStream); + m_rgStyleTextProp9.push_back(rec); + + StreamUtils::StreamPosition(lCurPos, pStream); + } +} + +void SStyleTextProp9::ReadFromStream(POLE::Stream *pStream) +{ + m_pf9.ReadFromStream(pStream); + m_cf9.ReadFromStream(pStream); + m_si.ReadFromStream(pStream); +} diff --git a/MsBinaryFile/PptFile/Records/StyleTextProp9Atom.h b/MsBinaryFile/PptFile/Records/StyleTextProp9Atom.h index 31d9092705..e1b3e67da5 100644 --- a/MsBinaryFile/PptFile/Records/StyleTextProp9Atom.h +++ b/MsBinaryFile/PptFile/Records/StyleTextProp9Atom.h @@ -44,38 +44,16 @@ struct SStyleTextProp9 STextSIException m_si; - void ReadFromStream(POLE::Stream* pStream) - { - m_pf9.ReadFromStream(pStream); - m_cf9.ReadFromStream(pStream); - m_si.ReadFromStream(pStream); - } + void ReadFromStream(POLE::Stream* pStream); }; class CRecordStyleTextProp9Atom : public CUnknownRecord { public: - virtual ~CRecordStyleTextProp9Atom() - { - } + virtual ~CRecordStyleTextProp9Atom(); - virtual void ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) - { - m_oHeader = oHeader; - - LONG lCurPos; StreamUtils::StreamPosition(lCurPos, pStream); - LONG lEndPos = lCurPos + m_oHeader.RecLen; - - while(lCurPos < lEndPos) - { - SStyleTextProp9 rec; - rec.ReadFromStream(pStream); - m_rgStyleTextProp9.push_back(rec); - - StreamUtils::StreamPosition(lCurPos, pStream); - } - } + virtual void ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) override; public: std::vector m_rgStyleTextProp9; diff --git a/MsBinaryFile/PptFile/Records/StyleTextPropAtom.cpp b/MsBinaryFile/PptFile/Records/StyleTextPropAtom.cpp new file mode 100644 index 0000000000..f1925a642d --- /dev/null +++ b/MsBinaryFile/PptFile/Records/StyleTextPropAtom.cpp @@ -0,0 +1,56 @@ +#include "StyleTextPropAtom.h" + + +CRecordStyleTextPropAtom::CRecordStyleTextPropAtom() +{ + m_lCount = 0; + m_lOffsetInStream = 0; +} + +CRecordStyleTextPropAtom::~CRecordStyleTextPropAtom() +{ + m_lCount = 0; +} + +void CRecordStyleTextPropAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + StreamUtils::StreamPosition(m_lOffsetInStream, pStream); + + _UINT32 lMemCount = 0; + _UINT32 lCountItems = 0; + + if (0 == m_lCount) + { + StreamUtils::StreamSeek(m_lOffsetInStream + m_oHeader.RecLen, pStream); + return; + } + + while (lMemCount < m_lCount + 1) + { + CTextPFRunRecord elm; + m_arrPFs.push_back(elm); + m_arrPFs[lCountItems].LoadFromStream(pStream); + lMemCount += m_arrPFs[lCountItems].m_lCount; + + ++lCountItems; + } + + lMemCount = 0; + lCountItems = 0; + while (lMemCount < m_lCount + 1) + { + CTextCFRunRecord elm; + m_arrCFs.push_back(elm); + + m_arrCFs[lCountItems].LoadFromStream(pStream); + lMemCount += m_arrCFs[lCountItems].m_lCount; + + ++lCountItems; + } + + // на всякий случай... + // здесь когда текст сначала другой (т.е. например - placeholder в мастере) - + // то у нас неправильно выставился m_lCount... + StreamUtils::StreamSeek(m_lOffsetInStream + m_oHeader.RecLen, pStream); +} diff --git a/MsBinaryFile/PptFile/Records/StyleTextPropAtom.h b/MsBinaryFile/PptFile/Records/StyleTextPropAtom.h index 0e903c4bae..f120008a4e 100644 --- a/MsBinaryFile/PptFile/Records/StyleTextPropAtom.h +++ b/MsBinaryFile/PptFile/Records/StyleTextPropAtom.h @@ -46,58 +46,10 @@ public: std::vector m_arrPFs; std::vector m_arrCFs; - CRecordStyleTextPropAtom() - { - m_lCount = 0; - m_lOffsetInStream = 0; - } - ~CRecordStyleTextPropAtom() - { - m_lCount = 0; - } + CRecordStyleTextPropAtom(); + ~CRecordStyleTextPropAtom(); - void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - m_oHeader = oHeader; - StreamUtils::StreamPosition(m_lOffsetInStream, pStream); - - _UINT32 lMemCount = 0; - _UINT32 lCountItems = 0; - - if (0 == m_lCount) - { - StreamUtils::StreamSeek(m_lOffsetInStream + m_oHeader.RecLen, pStream); - return; - } - - while (lMemCount < m_lCount + 1) - { - CTextPFRunRecord elm; - m_arrPFs.push_back(elm); - m_arrPFs[lCountItems].LoadFromStream(pStream); - lMemCount += m_arrPFs[lCountItems].m_lCount; - - ++lCountItems; - } - - lMemCount = 0; - lCountItems = 0; - while (lMemCount < m_lCount + 1) - { - CTextCFRunRecord elm; - m_arrCFs.push_back(elm); - - m_arrCFs[lCountItems].LoadFromStream(pStream); - lMemCount += m_arrCFs[lCountItems].m_lCount; - - ++lCountItems; - } - - // на всякий случай... - // здесь когда текст сначала другой (т.е. например - placeholder в мастере) - - // то у нас неправильно выставился m_lCount... - StreamUtils::StreamSeek(m_lOffsetInStream + m_oHeader.RecLen, pStream); - } + void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) override; }; diff --git a/MsBinaryFile/PptFile/Records/TextBookmarkAtom.cpp b/MsBinaryFile/PptFile/Records/TextBookmarkAtom.cpp new file mode 100644 index 0000000000..1e97af08f7 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/TextBookmarkAtom.cpp @@ -0,0 +1,15 @@ +#include "TextBookmarkAtom.h" + + +CRecordTextBookmarkAtom::CRecordTextBookmarkAtom() +{ +} + +CRecordTextBookmarkAtom::~CRecordTextBookmarkAtom() +{ +} + +void CRecordTextBookmarkAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + return CUnknownRecord::ReadFromStream(oHeader, pStream); +} diff --git a/MsBinaryFile/PptFile/Records/TextBookmarkAtom.h b/MsBinaryFile/PptFile/Records/TextBookmarkAtom.h index 9f288e1cad..e125144c59 100644 --- a/MsBinaryFile/PptFile/Records/TextBookmarkAtom.h +++ b/MsBinaryFile/PptFile/Records/TextBookmarkAtom.h @@ -39,18 +39,8 @@ class CRecordTextBookmarkAtom : public CUnknownRecord UINT m_nBookmarkID; public: - - CRecordTextBookmarkAtom() - { - } + CRecordTextBookmarkAtom(); + ~CRecordTextBookmarkAtom(); - ~CRecordTextBookmarkAtom() - { - } - - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - return CUnknownRecord::ReadFromStream(oHeader, pStream); - } - -}; \ No newline at end of file + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) override; +}; diff --git a/MsBinaryFile/PptFile/Records/TextBytesAtom.cpp b/MsBinaryFile/PptFile/Records/TextBytesAtom.cpp new file mode 100644 index 0000000000..e0e018467c --- /dev/null +++ b/MsBinaryFile/PptFile/Records/TextBytesAtom.cpp @@ -0,0 +1,41 @@ +#include "TextBytesAtom.h" + + +CRecordTextBytesAtom::CRecordTextBytesAtom() +{ +} + +CRecordTextBytesAtom::~CRecordTextBytesAtom() +{ +} + +void CRecordTextBytesAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + //UTF-16 Unicode character whose high byte is 0x00. + unsigned short *pUTF16 = new unsigned short[m_oHeader.RecLen]; + unsigned char *pUTF16_low = new unsigned char [m_oHeader.RecLen]; + + if (pUTF16 && pUTF16_low) + { + pStream->read(pUTF16_low, m_oHeader.RecLen); + + for (UINT i = 0 ; i < m_oHeader.RecLen; i++) + { + pUTF16[i] = pUTF16_low[i]; + } + + m_strText = NSFile::CUtf8Converter::GetWStringFromUTF16(pUTF16, m_oHeader.RecLen); + + } + + RELEASEARRAYOBJECTS(pUTF16_low); + RELEASEARRAYOBJECTS(pUTF16); + + //std::string tmpStrTextA = StreamUtils::ReadCStringA(pStream, m_oHeader.RecLen); + + //std::wstring tmpStrTextW (tmpStrTextA.begin(), tmpStrTextA.end()); + + //m_strText = std_string2string(tmpStrTextW); +} diff --git a/MsBinaryFile/PptFile/Records/TextBytesAtom.h b/MsBinaryFile/PptFile/Records/TextBytesAtom.h index 7a8ce87e15..b90a126989 100644 --- a/MsBinaryFile/PptFile/Records/TextBytesAtom.h +++ b/MsBinaryFile/PptFile/Records/TextBytesAtom.h @@ -38,44 +38,8 @@ public: std::wstring m_strText; public: - - CRecordTextBytesAtom() - { - } - - ~CRecordTextBytesAtom() - { - } - - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - m_oHeader = oHeader; - - //UTF-16 Unicode character whose high byte is 0x00. - unsigned short *pUTF16 = new unsigned short[m_oHeader.RecLen]; - unsigned char *pUTF16_low = new unsigned char [m_oHeader.RecLen]; - - if (pUTF16 && pUTF16_low) - { - pStream->read(pUTF16_low, m_oHeader.RecLen); - - for (UINT i = 0 ; i < m_oHeader.RecLen; i++) - { - pUTF16[i] = pUTF16_low[i]; - } - - m_strText = NSFile::CUtf8Converter::GetWStringFromUTF16(pUTF16, m_oHeader.RecLen); - - } - - RELEASEARRAYOBJECTS(pUTF16_low); - RELEASEARRAYOBJECTS(pUTF16); - - //std::string tmpStrTextA = StreamUtils::ReadCStringA(pStream, m_oHeader.RecLen); - - //std::wstring tmpStrTextW (tmpStrTextA.begin(), tmpStrTextA.end()); - - //m_strText = std_string2string(tmpStrTextW); - } + CRecordTextBytesAtom(); + ~CRecordTextBytesAtom(); + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) override; }; diff --git a/MsBinaryFile/PptFile/Records/TextCFException10.cpp b/MsBinaryFile/PptFile/Records/TextCFException10.cpp new file mode 100644 index 0000000000..f3c694f06c --- /dev/null +++ b/MsBinaryFile/PptFile/Records/TextCFException10.cpp @@ -0,0 +1,14 @@ +#include "TextCFException10.h" + + +void STextCFException10::ReadFromStream(POLE::Stream *pStream) +{ + m_masks.ReadFromStream(pStream); + + if (m_masks.m_newEATypeface) + m_newEAFontRef = new USHORT(StreamUtils::ReadSHORT(pStream)); + if (m_masks.m_csTypeface) + m_newEAFontRef = new USHORT(StreamUtils::ReadSHORT(pStream)); + if (m_masks.m_pp11ext) + m_pp11ext = new _UINT32(StreamUtils::ReadDWORD(pStream)); +} diff --git a/MsBinaryFile/PptFile/Records/TextCFException10.h b/MsBinaryFile/PptFile/Records/TextCFException10.h index 5cf4e8e6fe..c24a112aa7 100644 --- a/MsBinaryFile/PptFile/Records/TextCFException10.h +++ b/MsBinaryFile/PptFile/Records/TextCFException10.h @@ -41,16 +41,7 @@ struct STextCFException10 nullable m_csFontRef; nullable<_UINT32> m_pp11ext; - virtual void ReadFromStream(POLE::Stream* pStream) - { - m_masks.ReadFromStream(pStream); - if (m_masks.m_newEATypeface) - m_newEAFontRef = new USHORT(StreamUtils::ReadSHORT(pStream)); - if (m_masks.m_csTypeface) - m_newEAFontRef = new USHORT(StreamUtils::ReadSHORT(pStream)); - if (m_masks.m_pp11ext) - m_pp11ext = new _UINT32(StreamUtils::ReadDWORD(pStream)); - } + virtual void ReadFromStream(POLE::Stream* pStream); }; } diff --git a/MsBinaryFile/PptFile/Records/TextCFException9.cpp b/MsBinaryFile/PptFile/Records/TextCFException9.cpp new file mode 100644 index 0000000000..135a158b67 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/TextCFException9.cpp @@ -0,0 +1,10 @@ +#include "TextCFException9.h" + + +void STextCFException9::ReadFromStream(POLE::Stream *pStream) +{ + m_masks.ReadFromStream(pStream); + + if (m_masks.m_pp10ext) + m_pp10runid = 0xF & StreamUtils::ReadDWORD(pStream); +} diff --git a/MsBinaryFile/PptFile/Records/TextCFException9.h b/MsBinaryFile/PptFile/Records/TextCFException9.h index 569192559b..38de35764c 100644 --- a/MsBinaryFile/PptFile/Records/TextCFException9.h +++ b/MsBinaryFile/PptFile/Records/TextCFException9.h @@ -43,12 +43,6 @@ struct STextCFException9 nullable_uint m_pp10runid; // 4 bits - void ReadFromStream(POLE::Stream* pStream) - { - m_masks.ReadFromStream(pStream); - - if (m_masks.m_pp10ext) - m_pp10runid = 0xF & StreamUtils::ReadDWORD(pStream); - } + void ReadFromStream(POLE::Stream* pStream); }; } diff --git a/MsBinaryFile/PptFile/Records/TextCFExceptionAtom.cpp b/MsBinaryFile/PptFile/Records/TextCFExceptionAtom.cpp new file mode 100644 index 0000000000..e7cdd72a66 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/TextCFExceptionAtom.cpp @@ -0,0 +1,23 @@ +#include "TextCFExceptionAtom.h" + + +CRecordTextCFExceptionAtom::CRecordTextCFExceptionAtom() +{ +} + +CRecordTextCFExceptionAtom::~CRecordTextCFExceptionAtom() +{ +} + +void CRecordTextCFExceptionAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + LONG lPosition = 0; + StreamUtils::StreamPosition(lPosition, pStream); + + m_oCFRun.LoadFromStream(pStream, false); + + // это на всякий случай... + StreamUtils::StreamSeek(lPosition + m_oHeader.RecLen, pStream); +} diff --git a/MsBinaryFile/PptFile/Records/TextCFExceptionAtom.h b/MsBinaryFile/PptFile/Records/TextCFExceptionAtom.h index 9b366db473..13d4c10f57 100644 --- a/MsBinaryFile/PptFile/Records/TextCFExceptionAtom.h +++ b/MsBinaryFile/PptFile/Records/TextCFExceptionAtom.h @@ -37,25 +37,10 @@ class CRecordTextCFExceptionAtom : public CUnknownRecord public: CTextCFRunRecord m_oCFRun; - CRecordTextCFExceptionAtom() - { - } - ~CRecordTextCFExceptionAtom() - { - } + CRecordTextCFExceptionAtom(); + ~CRecordTextCFExceptionAtom(); - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - m_oHeader = oHeader; + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) override; - LONG lPosition = 0; - StreamUtils::StreamPosition(lPosition, pStream); - - m_oCFRun.LoadFromStream(pStream, false); - - // это на всякий случай... - StreamUtils::StreamSeek(lPosition + m_oHeader.RecLen, pStream); - } - -}; \ No newline at end of file +}; diff --git a/MsBinaryFile/PptFile/Records/TextCharsAtom.cpp b/MsBinaryFile/PptFile/Records/TextCharsAtom.cpp new file mode 100644 index 0000000000..8401ad3c92 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/TextCharsAtom.cpp @@ -0,0 +1,16 @@ +#include "TextCharsAtom.h" + + +CRecordTextCharsAtom::CRecordTextCharsAtom() +{ +} + +CRecordTextCharsAtom::~CRecordTextCharsAtom() +{ +} + +void CRecordTextCharsAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + m_strText = StreamUtils::ReadStringW(pStream, m_oHeader.RecLen / 2); +} diff --git a/MsBinaryFile/PptFile/Records/TextCharsAtom.h b/MsBinaryFile/PptFile/Records/TextCharsAtom.h index babc34e048..80b879e364 100644 --- a/MsBinaryFile/PptFile/Records/TextCharsAtom.h +++ b/MsBinaryFile/PptFile/Records/TextCharsAtom.h @@ -38,19 +38,8 @@ public: std::wstring m_strText; public: - - CRecordTextCharsAtom() - { - } + CRecordTextCharsAtom(); + ~CRecordTextCharsAtom(); - ~CRecordTextCharsAtom() - { - } - - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - m_oHeader = oHeader; - m_strText = StreamUtils::ReadStringW(pStream, m_oHeader.RecLen / 2); - } - -}; \ No newline at end of file + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) override; +}; diff --git a/MsBinaryFile/PptFile/Records/TextDefaults9Atom.cpp b/MsBinaryFile/PptFile/Records/TextDefaults9Atom.cpp new file mode 100644 index 0000000000..ed6f1b5d3c --- /dev/null +++ b/MsBinaryFile/PptFile/Records/TextDefaults9Atom.cpp @@ -0,0 +1,9 @@ +#include "TextDefaults9Atom.h" + + +void CRecordTextDefaults9Atom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + m_cf9.ReadFromStream(pStream); + m_pf9.ReadFromStream(pStream); +} diff --git a/MsBinaryFile/PptFile/Records/TextDefaults9Atom.h b/MsBinaryFile/PptFile/Records/TextDefaults9Atom.h index 59083afb2c..784cd69c42 100644 --- a/MsBinaryFile/PptFile/Records/TextDefaults9Atom.h +++ b/MsBinaryFile/PptFile/Records/TextDefaults9Atom.h @@ -44,12 +44,6 @@ public: STextPFException9 m_pf9; - - virtual void ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) - { - m_oHeader = oHeader; - m_cf9.ReadFromStream(pStream); - m_pf9.ReadFromStream(pStream); - } + virtual void ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) override; }; } diff --git a/MsBinaryFile/PptFile/Records/TextFullSettings.cpp b/MsBinaryFile/PptFile/Records/TextFullSettings.cpp new file mode 100644 index 0000000000..87a7fe01c7 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/TextFullSettings.cpp @@ -0,0 +1,56 @@ +#include "TextFullSettings.h" + + +CTextFullSettings::CTextFullSettings() : m_arRanges() +{ + m_pTextStyleProp = NULL; + m_pTextSpecInfo = NULL; + m_pTextRuler = NULL; + + m_nTextType = 0xFFFFFFFF; + m_lStyleThemeIndex = 0; //default + m_strText.clear(); +} + +CTextFullSettings::CTextFullSettings(const CTextFullSettings &oSrc) +{ + *this = oSrc; +} + +CTextFullSettings &CTextFullSettings::operator =(const CTextFullSettings &oSrc) +{ + m_pTextStyleProp = oSrc.m_pTextStyleProp; + m_pTextSpecInfo = oSrc.m_pTextSpecInfo; + m_pTextRuler = oSrc.m_pTextRuler; + m_lStyleThemeIndex = oSrc.m_lStyleThemeIndex; + + m_nTextType = oSrc.m_nTextType; + m_strText = oSrc.m_strText; + + m_arRanges = oSrc.m_arRanges; + return (*this); +} + +CTextFullSettings::~CTextFullSettings() +{ + m_pTextStyleProp = NULL; + m_pTextSpecInfo = NULL; + m_pTextRuler = NULL; +} + +std::wstring CTextFullSettings::ApplyProperties(CTextAttributesEx *pTextAttributes) +{ + if (NULL == pTextAttributes) + return m_strText; + + pTextAttributes->m_lTextType = m_nTextType; + pTextAttributes->m_lStyleThemeIndex = m_lStyleThemeIndex; + + if (NULL != m_pTextStyleProp) + PPT_FORMAT::ConvertPPTTextToEditorStructure(m_pTextStyleProp->m_arrPFs, m_pTextStyleProp->m_arrCFs, m_strText, *pTextAttributes); + + if (NULL != m_pTextRuler) + pTextAttributes->m_oRuler = m_pTextRuler->m_oTextRuler; + + return m_strText; +} diff --git a/MsBinaryFile/PptFile/Records/TextFullSettings.h b/MsBinaryFile/PptFile/Records/TextFullSettings.h index dd135d576e..f74ded4851 100644 --- a/MsBinaryFile/PptFile/Records/TextFullSettings.h +++ b/MsBinaryFile/PptFile/Records/TextFullSettings.h @@ -54,54 +54,10 @@ public: _UINT32 m_lStyleThemeIndex; public: - CTextFullSettings() : m_arRanges() - { - m_pTextStyleProp = NULL; - m_pTextSpecInfo = NULL; - m_pTextRuler = NULL; - - m_nTextType = 0xFFFFFFFF; - m_lStyleThemeIndex = 0; //default - m_strText.clear(); - } - CTextFullSettings(const CTextFullSettings& oSrc) - { - *this = oSrc; - } - CTextFullSettings& operator =(const CTextFullSettings& oSrc) - { - m_pTextStyleProp = oSrc.m_pTextStyleProp; - m_pTextSpecInfo = oSrc.m_pTextSpecInfo; - m_pTextRuler = oSrc.m_pTextRuler; - m_lStyleThemeIndex = oSrc.m_lStyleThemeIndex; - - m_nTextType = oSrc.m_nTextType; - m_strText = oSrc.m_strText; - - m_arRanges = oSrc.m_arRanges; - return (*this); - } - ~CTextFullSettings() - { - m_pTextStyleProp = NULL; - m_pTextSpecInfo = NULL; - m_pTextRuler = NULL; - } + CTextFullSettings(); + CTextFullSettings(const CTextFullSettings& oSrc); + CTextFullSettings& operator =(const CTextFullSettings& oSrc); + ~CTextFullSettings(); - std::wstring ApplyProperties(CTextAttributesEx* pTextAttributes) - { - if (NULL == pTextAttributes) - return m_strText; - - pTextAttributes->m_lTextType = m_nTextType; - pTextAttributes->m_lStyleThemeIndex = m_lStyleThemeIndex; - - if (NULL != m_pTextStyleProp) - PPT_FORMAT::ConvertPPTTextToEditorStructure(m_pTextStyleProp->m_arrPFs, m_pTextStyleProp->m_arrCFs, m_strText, *pTextAttributes); - - if (NULL != m_pTextRuler) - pTextAttributes->m_oRuler = m_pTextRuler->m_oTextRuler; - - return m_strText; - } + std::wstring ApplyProperties(CTextAttributesEx* pTextAttributes); }; diff --git a/MsBinaryFile/PptFile/Records/TextHeaderAtom.cpp b/MsBinaryFile/PptFile/Records/TextHeaderAtom.cpp new file mode 100644 index 0000000000..d3ba10434f --- /dev/null +++ b/MsBinaryFile/PptFile/Records/TextHeaderAtom.cpp @@ -0,0 +1,16 @@ +#include "TextHeaderAtom.h" + + +CRecordTextHeaderAtom::CRecordTextHeaderAtom() +{ +} + +CRecordTextHeaderAtom::~CRecordTextHeaderAtom() +{ +} + +void CRecordTextHeaderAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + m_nTextType = (UINT)StreamUtils::ReadDWORD(pStream); +} diff --git a/MsBinaryFile/PptFile/Records/TextHeaderAtom.h b/MsBinaryFile/PptFile/Records/TextHeaderAtom.h index 88bd500089..d366d3b10a 100644 --- a/MsBinaryFile/PptFile/Records/TextHeaderAtom.h +++ b/MsBinaryFile/PptFile/Records/TextHeaderAtom.h @@ -38,19 +38,9 @@ public: UINT m_nTextType; public: - - CRecordTextHeaderAtom() - { - } + CRecordTextHeaderAtom(); + ~CRecordTextHeaderAtom(); - ~CRecordTextHeaderAtom() - { - } + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) override; - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - m_oHeader = oHeader; - m_nTextType = (UINT)StreamUtils::ReadDWORD(pStream); - } - -}; \ No newline at end of file +}; diff --git a/MsBinaryFile/PptFile/Records/TextInteractiveInfoAtom.cpp b/MsBinaryFile/PptFile/Records/TextInteractiveInfoAtom.cpp new file mode 100644 index 0000000000..dfbc3e105b --- /dev/null +++ b/MsBinaryFile/PptFile/Records/TextInteractiveInfoAtom.cpp @@ -0,0 +1,20 @@ +#include "TextInteractiveInfoAtom.h" + + +CRecordTextInteractiveInfoAtom::CRecordTextInteractiveInfoAtom() +{ + m_lStart = 0; + m_lEnd = 0; +} + +CRecordTextInteractiveInfoAtom::~CRecordTextInteractiveInfoAtom() +{ +} + +void CRecordTextInteractiveInfoAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + m_lStart = StreamUtils::ReadLONG(pStream); + m_lEnd = StreamUtils::ReadLONG(pStream); +} diff --git a/MsBinaryFile/PptFile/Records/TextInteractiveInfoAtom.h b/MsBinaryFile/PptFile/Records/TextInteractiveInfoAtom.h index 1d96a64d40..a2449da629 100644 --- a/MsBinaryFile/PptFile/Records/TextInteractiveInfoAtom.h +++ b/MsBinaryFile/PptFile/Records/TextInteractiveInfoAtom.h @@ -38,22 +38,8 @@ public: LONG m_lStart; LONG m_lEnd; - CRecordTextInteractiveInfoAtom() - { - m_lStart = 0; - m_lEnd = 0; - } + CRecordTextInteractiveInfoAtom(); + ~CRecordTextInteractiveInfoAtom(); - ~CRecordTextInteractiveInfoAtom() - { - } - - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - m_oHeader = oHeader; - - m_lStart = StreamUtils::ReadLONG(pStream); - m_lEnd = StreamUtils::ReadLONG(pStream); - } - -}; \ No newline at end of file + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) override; +}; diff --git a/MsBinaryFile/PptFile/Records/TextMasterStyle9Atom.cpp b/MsBinaryFile/PptFile/Records/TextMasterStyle9Atom.cpp new file mode 100644 index 0000000000..5afaaea92b --- /dev/null +++ b/MsBinaryFile/PptFile/Records/TextMasterStyle9Atom.cpp @@ -0,0 +1,38 @@ +#include "TextMasterStyle9Atom.h" + + +void CRecordTextMasterStyle9Atom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + LONG lPos; StreamUtils::StreamPosition(lPos, pStream); + + + m_cLevels = StreamUtils::ReadWORD(pStream); + if (m_cLevels > 0) + { + m_lstLvl1 = new STextMasterStyle9Level; + m_lstLvl1->ReadFromStream(pStream); + if (m_cLevels > 1) + { + m_lstLvl2 = new STextMasterStyle9Level; + m_lstLvl2->ReadFromStream(pStream); + if (m_cLevels > 2) + { + m_lstLvl3 = new STextMasterStyle9Level; + m_lstLvl3->ReadFromStream(pStream); + if (m_cLevels > 3) + { + m_lstLvl4 = new STextMasterStyle9Level; + m_lstLvl4->ReadFromStream(pStream); + if (m_cLevels > 4) + { + m_lstLvl5 = new STextMasterStyle9Level; + m_lstLvl5->ReadFromStream(pStream); + } + } + } + } + } + + StreamUtils::StreamSeek(lPos + m_oHeader.RecLen, pStream); +} diff --git a/MsBinaryFile/PptFile/Records/TextMasterStyle9Atom.h b/MsBinaryFile/PptFile/Records/TextMasterStyle9Atom.h index dd6c3ca2c4..466c052a8e 100644 --- a/MsBinaryFile/PptFile/Records/TextMasterStyle9Atom.h +++ b/MsBinaryFile/PptFile/Records/TextMasterStyle9Atom.h @@ -47,40 +47,7 @@ public: nullable m_lstLvl4; nullable m_lstLvl5; - void ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) override - { - m_oHeader = oHeader; - LONG lPos; StreamUtils::StreamPosition(lPos, pStream); - - m_cLevels = StreamUtils::ReadWORD(pStream); - if (m_cLevels > 0) - { - m_lstLvl1 = new STextMasterStyle9Level; - m_lstLvl1->ReadFromStream(pStream); - if (m_cLevels > 1) - { - m_lstLvl2 = new STextMasterStyle9Level; - m_lstLvl2->ReadFromStream(pStream); - if (m_cLevels > 2) - { - m_lstLvl3 = new STextMasterStyle9Level; - m_lstLvl3->ReadFromStream(pStream); - if (m_cLevels > 3) - { - m_lstLvl4 = new STextMasterStyle9Level; - m_lstLvl4->ReadFromStream(pStream); - if (m_cLevels > 4) - { - m_lstLvl5 = new STextMasterStyle9Level; - m_lstLvl5->ReadFromStream(pStream); - } - } - } - } - } - - StreamUtils::StreamSeek(lPos + m_oHeader.RecLen, pStream); - } + void ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) override; }; } diff --git a/MsBinaryFile/PptFile/Records/TextMasterStyle9Level.cpp b/MsBinaryFile/PptFile/Records/TextMasterStyle9Level.cpp new file mode 100644 index 0000000000..04ec54ff63 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/TextMasterStyle9Level.cpp @@ -0,0 +1,8 @@ +#include "TextMasterStyle9Level.h" + + +void STextMasterStyle9Level::ReadFromStream(POLE::Stream *pStream) +{ + m_pf9.ReadFromStream(pStream); + m_cf9.ReadFromStream(pStream); +} diff --git a/MsBinaryFile/PptFile/Records/TextMasterStyle9Level.h b/MsBinaryFile/PptFile/Records/TextMasterStyle9Level.h index 84120b85bc..02ef9a00f8 100644 --- a/MsBinaryFile/PptFile/Records/TextMasterStyle9Level.h +++ b/MsBinaryFile/PptFile/Records/TextMasterStyle9Level.h @@ -43,10 +43,6 @@ struct STextMasterStyle9Level STextCFException9 m_cf9; - void ReadFromStream(POLE::Stream* pStream) - { - m_pf9.ReadFromStream(pStream); - m_cf9.ReadFromStream(pStream); - } + void ReadFromStream(POLE::Stream* pStream); }; } diff --git a/MsBinaryFile/PptFile/Records/TextMasterStyleAtom.cpp b/MsBinaryFile/PptFile/Records/TextMasterStyleAtom.cpp new file mode 100644 index 0000000000..6380c3d1d4 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/TextMasterStyleAtom.cpp @@ -0,0 +1,86 @@ +#include "TextMasterStyleAtom.h" + + +CRecordTextMasterStyleAtom::CRecordTextMasterStyleAtom() : PPT_FORMAT::CTextStyles() +{ + m_nTextType = -1; +} + +CRecordTextMasterStyleAtom::~CRecordTextMasterStyleAtom() +{ +} + +void CRecordTextMasterStyleAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + LONG lPosition = 0; + StreamUtils::StreamPosition(lPosition, pStream); + + m_nTextType = m_oHeader.RecInstance; + + bool bIsLevelsPresent = (0x05 <= m_oHeader.RecInstance); + + int lLevels = StreamUtils::ReadWORD(pStream); + if (0 < lLevels) + LoadLevel(0, pStream, bIsLevelsPresent); + if (1 < lLevels) + LoadLevel(1, pStream, bIsLevelsPresent); + if (2 < lLevels) + LoadLevel(2, pStream, bIsLevelsPresent); + if (3 < lLevels) + LoadLevel(3, pStream, bIsLevelsPresent); + if (4 < lLevels) + LoadLevel(4, pStream, bIsLevelsPresent); + + // походу нужно делать так: ---------------------------------------------- + if (m_pLevels[0].is_init()) + { + if (!m_pLevels[1].is_init()) + m_pLevels[1] = m_pLevels[0].get(); + else + m_pLevels[1]->ApplyBefore(m_pLevels[0].get()); + } + if (m_pLevels[1].is_init()) + { + if (!m_pLevels[2].is_init()) + m_pLevels[2] = m_pLevels[1].get(); + else + m_pLevels[2]->ApplyBefore(m_pLevels[1].get()); + } + if (m_pLevels[2].is_init()) + { + if (!m_pLevels[3].is_init()) + m_pLevels[3] = m_pLevels[2].get(); + else + m_pLevels[3]->ApplyBefore(m_pLevels[2].get()); + } + if (m_pLevels[3].is_init()) + { + if (!m_pLevels[4].is_init()) + m_pLevels[4] = m_pLevels[3].get(); + else + m_pLevels[4]->ApplyBefore(m_pLevels[3].get()); + } + // ----------------------------------------------------------------------- + + // это на всякий случай... + StreamUtils::StreamSeek(lPosition + m_oHeader.RecLen, pStream); +} + +void CRecordTextMasterStyleAtom::LoadLevel(LONG lLevel, POLE::Stream *pStream, bool bIsLevelPresent) +{ + LONG lLevelOld = lLevel; + + if (bIsLevelPresent) + lLevel = StreamUtils::ReadSHORT(pStream); + + CTextPFRunRecord oPF; + CTextCFRunRecord oCF; + oPF.LoadFromStream(pStream, false); + oCF.LoadFromStream(pStream, false); + + m_pLevels[lLevelOld] = new PPT_FORMAT::CTextStyleLevel(); + m_pLevels[lLevelOld]->m_oPFRun = oPF.m_oRun; + m_pLevels[lLevelOld]->m_oCFRun = oCF.m_oRun; +} diff --git a/MsBinaryFile/PptFile/Records/TextMasterStyleAtom.h b/MsBinaryFile/PptFile/Records/TextMasterStyleAtom.h index a73c42ad23..02bab90329 100644 --- a/MsBinaryFile/PptFile/Records/TextMasterStyleAtom.h +++ b/MsBinaryFile/PptFile/Records/TextMasterStyleAtom.h @@ -37,87 +37,12 @@ class CRecordTextMasterStyleAtom : public CUnknownRecord, public PPT_FORMAT::CTe public: LONG m_nTextType; - CRecordTextMasterStyleAtom() : PPT_FORMAT::CTextStyles() - { - m_nTextType = -1; - } - ~CRecordTextMasterStyleAtom() - { - } + CRecordTextMasterStyleAtom(); + ~CRecordTextMasterStyleAtom(); - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - m_oHeader = oHeader; + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) override; - LONG lPosition = 0; - StreamUtils::StreamPosition(lPosition, pStream); - - m_nTextType = m_oHeader.RecInstance; - - bool bIsLevelsPresent = (0x05 <= m_oHeader.RecInstance); - - int lLevels = StreamUtils::ReadWORD(pStream); - if (0 < lLevels) - LoadLevel(0, pStream, bIsLevelsPresent); - if (1 < lLevels) - LoadLevel(1, pStream, bIsLevelsPresent); - if (2 < lLevels) - LoadLevel(2, pStream, bIsLevelsPresent); - if (3 < lLevels) - LoadLevel(3, pStream, bIsLevelsPresent); - if (4 < lLevels) - LoadLevel(4, pStream, bIsLevelsPresent); - - // походу нужно делать так: ---------------------------------------------- - if (m_pLevels[0].is_init()) - { - if (!m_pLevels[1].is_init()) - m_pLevels[1] = m_pLevels[0].get(); - else - m_pLevels[1]->ApplyBefore(m_pLevels[0].get()); - } - if (m_pLevels[1].is_init()) - { - if (!m_pLevels[2].is_init()) - m_pLevels[2] = m_pLevels[1].get(); - else - m_pLevels[2]->ApplyBefore(m_pLevels[1].get()); - } - if (m_pLevels[2].is_init()) - { - if (!m_pLevels[3].is_init()) - m_pLevels[3] = m_pLevels[2].get(); - else - m_pLevels[3]->ApplyBefore(m_pLevels[2].get()); - } - if (m_pLevels[3].is_init()) - { - if (!m_pLevels[4].is_init()) - m_pLevels[4] = m_pLevels[3].get(); - else - m_pLevels[4]->ApplyBefore(m_pLevels[3].get()); - } - // ----------------------------------------------------------------------- - - // это на всякий случай... - StreamUtils::StreamSeek(lPosition + m_oHeader.RecLen, pStream); - } protected: - void LoadLevel(LONG lLevel, POLE::Stream* pStream, bool bIsLevelPresent) - { - LONG lLevelOld = lLevel; - - if (bIsLevelPresent) - lLevel = StreamUtils::ReadSHORT(pStream); - - CTextPFRunRecord oPF; - CTextCFRunRecord oCF; - oPF.LoadFromStream(pStream, false); - oCF.LoadFromStream(pStream, false); - - m_pLevels[lLevelOld] = new PPT_FORMAT::CTextStyleLevel(); - m_pLevels[lLevelOld]->m_oPFRun = oPF.m_oRun; - m_pLevels[lLevelOld]->m_oCFRun = oCF.m_oRun; - } -}; \ No newline at end of file + void LoadLevel(LONG lLevel, POLE::Stream* pStream, bool bIsLevelPresent); +}; diff --git a/MsBinaryFile/PptFile/Records/TextPFException9.cpp b/MsBinaryFile/PptFile/Records/TextPFException9.cpp new file mode 100644 index 0000000000..3b7803df8a --- /dev/null +++ b/MsBinaryFile/PptFile/Records/TextPFException9.cpp @@ -0,0 +1,83 @@ +#include "TextPFException9.h" + + +void STextAutoNumberScheme::ReadFromStream(POLE::Stream *pStream) +{ + m_eScheme = (TextAutoNumberSchemeEnum)StreamUtils::ReadSHORT(pStream); + m_nStartNum = StreamUtils::ReadSHORT(pStream); +} + +std::wstring STextAutoNumberScheme::SchemeToStr() const +{ + switch (m_eScheme) + { + case ANM_AlphaLcPeriod:{ return L"alphaLcPeriod"; break;} + case ANM_AlphaUcPeriod:{ return L"alphaUcPeriod"; break;} + case ANM_ArabicParenRight:{ return L"arabicParenR"; break;} + case ANM_ArabicPeriod:{ return L"arabicPeriod"; break;} + case ANM_RomanLcParenBoth:{ return L"romanLcParenBoth"; break;} + case ANM_RomanLcParenRight:{ return L"romanLcParenR"; break;} + case ANM_RomanLcPeriod:{ return L"romanLcPeriod"; break;} + case ANM_RomanUcPeriod:{ return L"romanUcPeriod"; break;} + case ANM_AlphaLcParenBoth:{ return L"alphaLcParenBoth"; break;} + case ANM_AlphaLcParenRight:{ return L"alphaLcParenR"; break;} + case ANM_AlphaUcParenBoth:{ return L"alphaUcParenBoth"; break;} + case ANM_AlphaUcParenRight:{ return L"alphaUcParenR"; break;} + case ANM_ArabicParenBoth:{ return L"arabicParenBoth"; break;} + case ANM_ArabicPlain:{ return L"arabicPlain"; break;} + case ANM_RomanUcParenBoth:{ return L"romanUcParenBoth"; break;} + case ANM_RomanUcParenRight:{ return L"romanUcParenR"; break;} + case ANM_ChsPlain:{ return L"ea1ChsPlain"; break;} + case ANM_ChsPeriod:{ return L"ea1ChsPeriod"; break;} + case ANM_CircleNumDBPlain:{ return L"circleNumDbPlain"; break;} + case ANM_CircleNumWDBWhitePlain:{ return L"circleNumWdWhitePlain"; break;} + case ANM_CircleNumWDBBlackPlain:{ return L"circleNumWdBlackPlain"; break;} + case ANM_ChtPlain:{ return L"ea1ChtPlain"; break;} + case ANM_ChtPeriod:{ return L"ea1ChtPeriod"; break;} + case ANM_Arabic1Minus:{ return L"arabic1Minus"; break;} + case ANM_Arabic2Minus:{ return L"arabic2Minus"; break;} + case ANM_Hebrew2Minus:{ return L"hebrew2Minus"; break;} + case ANM_JpnKorPlain:{ return L"ea1JpnKorPlain"; break;} + case ANM_JpnKorPeriod:{ return L"ea1JpnKorPeriod"; break;} + case ANM_ArabicDbPlain:{ return L"arabicDbPlain"; break;} + case ANM_ArabicDbPeriod:{ return L"arabicDbPeriod"; break;} + case ANM_ThaiAlphaPeriod:{ return L"thaiAlphaPeriod"; break;} + case ANM_ThaiAlphaParenRight:{ return L"thaiAlphaParenR"; break;} + case ANM_ThaiAlphaParenBoth:{ return L"thaiAlphaParenBoth"; break;} + case ANM_ThaiNumPeriod:{ return L"thaiNumPeriod"; break;} + case ANM_ThaiNumParenRight:{ return L"thaiNumParenR"; break;} + case ANM_ThaiNumParenBoth:{ return L"thaiNumParenBoth"; break;} + case ANM_HindiAlphaPeriod:{ return L"hindiAlphaPeriod"; break;} + case ANM_HindiNumPeriod:{ return L"hindiNumPeriod"; break;} + case ANM_JpnChsDBPeriod:{ return L"ea1JpnChsDbPeriod"; break;} + case ANM_HindiNumParenRight:{ return L"hindiNumParenR"; break;} + case ANM_HindiAlpha1Period:{ return L"hindiAlpha1Period"; break;} + } + return L"alphaUcPeriod"; +} + +void STextPFException9::ReadFromStream(POLE::Stream *pStream) +{ + m_masks.ReadFromStream(pStream); + + if (m_masks.m_bulletBlip) // 0x0800000 2^23 + m_optBulletBlipRef = StreamUtils::ReadSHORT(pStream); + + if (m_masks.m_bulletHasScheme) // 0x2000000 2^25 + m_optfBulletHasAutoNumber = (bool)StreamUtils::ReadSHORT(pStream); + + if(m_masks.m_bulletScheme) // 0x1000000 2^24 + { + auto pBulletAutoNumberScheme = new STextAutoNumberScheme; + pBulletAutoNumberScheme->ReadFromStream(pStream); + m_optBulletAutoNumberScheme = pBulletAutoNumberScheme; + } + else if (m_optfBulletHasAutoNumber.get_value_or(false)) + { + auto pBulletAutoNumberScheme = new STextAutoNumberScheme; + pBulletAutoNumberScheme->m_nStartNum = 1; + pBulletAutoNumberScheme->m_eScheme = ANM_ArabicPeriod; + m_optBulletAutoNumberScheme = pBulletAutoNumberScheme; + } + +} diff --git a/MsBinaryFile/PptFile/Records/TextPFException9.h b/MsBinaryFile/PptFile/Records/TextPFException9.h index 3e309b3bf8..076f9661cb 100644 --- a/MsBinaryFile/PptFile/Records/TextPFException9.h +++ b/MsBinaryFile/PptFile/Records/TextPFException9.h @@ -42,61 +42,9 @@ struct STextAutoNumberScheme SHORT m_nStartNum; - void ReadFromStream(POLE::Stream* pStream){ - m_eScheme = (TextAutoNumberSchemeEnum)StreamUtils::ReadSHORT(pStream); - m_nStartNum = StreamUtils::ReadSHORT(pStream); - } - - - std::wstring SchemeToStr()const - { - switch (m_eScheme) - { - case ANM_AlphaLcPeriod:{ return L"alphaLcPeriod"; break;} - case ANM_AlphaUcPeriod:{ return L"alphaUcPeriod"; break;} - case ANM_ArabicParenRight:{ return L"arabicParenR"; break;} - case ANM_ArabicPeriod:{ return L"arabicPeriod"; break;} - case ANM_RomanLcParenBoth:{ return L"romanLcParenBoth"; break;} - case ANM_RomanLcParenRight:{ return L"romanLcParenR"; break;} - case ANM_RomanLcPeriod:{ return L"romanLcPeriod"; break;} - case ANM_RomanUcPeriod:{ return L"romanUcPeriod"; break;} - case ANM_AlphaLcParenBoth:{ return L"alphaLcParenBoth"; break;} - case ANM_AlphaLcParenRight:{ return L"alphaLcParenR"; break;} - case ANM_AlphaUcParenBoth:{ return L"alphaUcParenBoth"; break;} - case ANM_AlphaUcParenRight:{ return L"alphaUcParenR"; break;} - case ANM_ArabicParenBoth:{ return L"arabicParenBoth"; break;} - case ANM_ArabicPlain:{ return L"arabicPlain"; break;} - case ANM_RomanUcParenBoth:{ return L"romanUcParenBoth"; break;} - case ANM_RomanUcParenRight:{ return L"romanUcParenR"; break;} - case ANM_ChsPlain:{ return L"ea1ChsPlain"; break;} - case ANM_ChsPeriod:{ return L"ea1ChsPeriod"; break;} - case ANM_CircleNumDBPlain:{ return L"circleNumDbPlain"; break;} - case ANM_CircleNumWDBWhitePlain:{ return L"circleNumWdWhitePlain"; break;} - case ANM_CircleNumWDBBlackPlain:{ return L"circleNumWdBlackPlain"; break;} - case ANM_ChtPlain:{ return L"ea1ChtPlain"; break;} - case ANM_ChtPeriod:{ return L"ea1ChtPeriod"; break;} - case ANM_Arabic1Minus:{ return L"arabic1Minus"; break;} - case ANM_Arabic2Minus:{ return L"arabic2Minus"; break;} - case ANM_Hebrew2Minus:{ return L"hebrew2Minus"; break;} - case ANM_JpnKorPlain:{ return L"ea1JpnKorPlain"; break;} - case ANM_JpnKorPeriod:{ return L"ea1JpnKorPeriod"; break;} - case ANM_ArabicDbPlain:{ return L"arabicDbPlain"; break;} - case ANM_ArabicDbPeriod:{ return L"arabicDbPeriod"; break;} - case ANM_ThaiAlphaPeriod:{ return L"thaiAlphaPeriod"; break;} - case ANM_ThaiAlphaParenRight:{ return L"thaiAlphaParenR"; break;} - case ANM_ThaiAlphaParenBoth:{ return L"thaiAlphaParenBoth"; break;} - case ANM_ThaiNumPeriod:{ return L"thaiNumPeriod"; break;} - case ANM_ThaiNumParenRight:{ return L"thaiNumParenR"; break;} - case ANM_ThaiNumParenBoth:{ return L"thaiNumParenBoth"; break;} - case ANM_HindiAlphaPeriod:{ return L"hindiAlphaPeriod"; break;} - case ANM_HindiNumPeriod:{ return L"hindiNumPeriod"; break;} - case ANM_JpnChsDBPeriod:{ return L"ea1JpnChsDbPeriod"; break;} - case ANM_HindiNumParenRight:{ return L"hindiNumParenR"; break;} - case ANM_HindiAlpha1Period:{ return L"hindiAlpha1Period"; break;} - } - return L"alphaUcPeriod"; - } + void ReadFromStream(POLE::Stream* pStream); + std::wstring SchemeToStr()const; }; @@ -110,30 +58,6 @@ struct STextPFException9 nullable m_optBulletAutoNumberScheme; - void ReadFromStream(POLE::Stream* pStream) - { - m_masks.ReadFromStream(pStream); - - if (m_masks.m_bulletBlip) // 0x0800000 2^23 - m_optBulletBlipRef = StreamUtils::ReadSHORT(pStream); - - if (m_masks.m_bulletHasScheme) // 0x2000000 2^25 - m_optfBulletHasAutoNumber = (bool)StreamUtils::ReadSHORT(pStream); - - if(m_masks.m_bulletScheme) // 0x1000000 2^24 - { - auto pBulletAutoNumberScheme = new STextAutoNumberScheme; - pBulletAutoNumberScheme->ReadFromStream(pStream); - m_optBulletAutoNumberScheme = pBulletAutoNumberScheme; - } - else if (m_optfBulletHasAutoNumber.get_value_or(false)) - { - auto pBulletAutoNumberScheme = new STextAutoNumberScheme; - pBulletAutoNumberScheme->m_nStartNum = 1; - pBulletAutoNumberScheme->m_eScheme = ANM_ArabicPeriod; - m_optBulletAutoNumberScheme = pBulletAutoNumberScheme; - } - - } + void ReadFromStream(POLE::Stream* pStream); }; } diff --git a/MsBinaryFile/PptFile/Records/TextPFExceptionAtom.cpp b/MsBinaryFile/PptFile/Records/TextPFExceptionAtom.cpp new file mode 100644 index 0000000000..4bd56b81bf --- /dev/null +++ b/MsBinaryFile/PptFile/Records/TextPFExceptionAtom.cpp @@ -0,0 +1,24 @@ +#include "TextPFExceptionAtom.h" + + +CRecordTextPFExceptionAtom::CRecordTextPFExceptionAtom() +{ +} + +CRecordTextPFExceptionAtom::~CRecordTextPFExceptionAtom() +{ +} + +void CRecordTextPFExceptionAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + LONG lPosition = 0; + StreamUtils::StreamPosition(lPosition, pStream); + + m_oPFRun.LoadFromStream(pStream, m_oHeader.RecLen == 12); + + // это на всякий случай... + POLE::uint64 current_pos = pStream->tell(); + StreamUtils::StreamSeek(lPosition + m_oHeader.RecLen, pStream); +} diff --git a/MsBinaryFile/PptFile/Records/TextPFExceptionAtom.h b/MsBinaryFile/PptFile/Records/TextPFExceptionAtom.h index 6aa7cec33b..b1aed43a8c 100644 --- a/MsBinaryFile/PptFile/Records/TextPFExceptionAtom.h +++ b/MsBinaryFile/PptFile/Records/TextPFExceptionAtom.h @@ -37,26 +37,9 @@ class CRecordTextPFExceptionAtom : public CUnknownRecord public: CTextPFRunRecord m_oPFRun; - CRecordTextPFExceptionAtom() - { - } - ~CRecordTextPFExceptionAtom() - { - } - - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - m_oHeader = oHeader; - - LONG lPosition = 0; - StreamUtils::StreamPosition(lPosition, pStream); - - m_oPFRun.LoadFromStream(pStream, m_oHeader.RecLen == 12); - - // это на всякий случай... - POLE::uint64 current_pos = pStream->tell(); - StreamUtils::StreamSeek(lPosition + m_oHeader.RecLen, pStream); - } + CRecordTextPFExceptionAtom(); + ~CRecordTextPFExceptionAtom(); + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) override; }; diff --git a/MsBinaryFile/PptFile/Records/TextRulerAtom.cpp b/MsBinaryFile/PptFile/Records/TextRulerAtom.cpp new file mode 100644 index 0000000000..e70bdc1d0a --- /dev/null +++ b/MsBinaryFile/PptFile/Records/TextRulerAtom.cpp @@ -0,0 +1,22 @@ +#include "TextRulerAtom.h" + + +CRecordTextRulerAtom::CRecordTextRulerAtom() +{ +} + +CRecordTextRulerAtom::~CRecordTextRulerAtom() +{ +} + +void CRecordTextRulerAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + LONG lOffset = 0; + StreamUtils::StreamPosition(lOffset, pStream); + + NSStreamReader::Read(pStream, m_oTextRuler); + + // на всякий случай... + StreamUtils::StreamSeek(lOffset + m_oHeader.RecLen, pStream); +} diff --git a/MsBinaryFile/PptFile/Records/TextRulerAtom.h b/MsBinaryFile/PptFile/Records/TextRulerAtom.h index 82c890d0be..7380ae6869 100644 --- a/MsBinaryFile/PptFile/Records/TextRulerAtom.h +++ b/MsBinaryFile/PptFile/Records/TextRulerAtom.h @@ -38,25 +38,9 @@ public: PPT_FORMAT::CTextRuler m_oTextRuler; public: - - CRecordTextRulerAtom() - { - } + CRecordTextRulerAtom(); + ~CRecordTextRulerAtom(); - ~CRecordTextRulerAtom() - { - } + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) override; - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - m_oHeader = oHeader; - LONG lOffset = 0; - StreamUtils::StreamPosition(lOffset, pStream); - - NSStreamReader::Read(pStream, m_oTextRuler); - - // на всякий случай... - StreamUtils::StreamSeek(lOffset + m_oHeader.RecLen, pStream); - } - -}; \ No newline at end of file +}; diff --git a/MsBinaryFile/PptFile/Records/TextSIException.cpp b/MsBinaryFile/PptFile/Records/TextSIException.cpp new file mode 100644 index 0000000000..1b21a2e4b1 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/TextSIException.cpp @@ -0,0 +1,70 @@ +#include "TextSIException.h" + + +SSmartTags::SSmartTags(){} + +SSmartTags::SSmartTags(const SSmartTags &other) +{ + m_count = other.m_count; + m_rgSmartTagIndex = other.m_rgSmartTagIndex; +} + +void SSmartTags::ReadFromStream(POLE::Stream *pStream) +{ + m_count = StreamUtils::ReadDWORD(pStream); + for (_UINT32 i = 0; i < m_count; i++) + { + _UINT32 SmartTagIndex = StreamUtils::ReadDWORD(pStream); + m_rgSmartTagIndex.push_back(SmartTagIndex); + } +} + +STextSIException::STextSIException() +{ + +} + +STextSIException::~STextSIException() +{ + +} + +void STextSIException::ReadFromStream(POLE::Stream *pStream) +{ + _UINT16 flags = StreamUtils::ReadWORD(pStream); + StreamUtils::StreamSkip(2, pStream); + + m_spell = 0x1 & flags; + m_lang = 0x2 & flags; + m_altLang = 0x4 & flags; + + + m_fPp10ext = 0x20 & flags; + m_fBidi = 0x40 & flags; + + + m_smartTag = 0x200 & flags; + + if (m_spell) + m_spellInfo = StreamUtils::ReadWORD(pStream); + if (m_lang) + m_altLang = StreamUtils::ReadWORD(pStream); + if (m_altLang) + m_altLid = StreamUtils::ReadWORD(pStream); + if (m_fBidi) + m_bidi = StreamUtils::ReadWORD(pStream); + + if (m_fPp10ext) + { + m_pp10runid = 0x0F & StreamUtils::ReadBYTE(pStream); + StreamUtils::StreamSkip(2, pStream); + m_grammarError = 0x80 & StreamUtils::ReadBYTE(pStream); + } + + if (m_smartTag) + { + StreamUtils::StreamSkip(StreamUtils::ReadDWORD(pStream) * 4, pStream); + // m_smartTags = new SSmartTags; + // m_smartTags->ReadFromStream(pStream); + } +} diff --git a/MsBinaryFile/PptFile/Records/TextSIException.h b/MsBinaryFile/PptFile/Records/TextSIException.h index 095d7a243f..24da790232 100644 --- a/MsBinaryFile/PptFile/Records/TextSIException.h +++ b/MsBinaryFile/PptFile/Records/TextSIException.h @@ -36,38 +36,21 @@ namespace PPT_FORMAT { struct SSmartTags { - SSmartTags(){} - SSmartTags(const SSmartTags& other) - { - m_count = other.m_count; - m_rgSmartTagIndex = other.m_rgSmartTagIndex; - } + SSmartTags(); + SSmartTags(const SSmartTags& other); ~SSmartTags(){} _UINT32 m_count; std::vector<_UINT32> m_rgSmartTagIndex; - void ReadFromStream(POLE::Stream* pStream) - { - m_count = StreamUtils::ReadDWORD(pStream); - for (_UINT32 i = 0; i < m_count; i++) - { - _UINT32 SmartTagIndex = StreamUtils::ReadDWORD(pStream); - m_rgSmartTagIndex.push_back(SmartTagIndex); - } - } + + void ReadFromStream(POLE::Stream* pStream); }; struct STextSIException { - STextSIException() - { - - } - ~STextSIException() - { - - } + STextSIException(); + ~STextSIException(); bool m_spell; bool m_lang; bool m_altLang; @@ -87,44 +70,7 @@ struct STextSIException // nullable m_smartTags; - void ReadFromStream(POLE::Stream* pStream) - { - _UINT16 flags = StreamUtils::ReadWORD(pStream); - StreamUtils::StreamSkip(2, pStream); - m_spell = 0x1 & flags; - m_lang = 0x2 & flags; - m_altLang = 0x4 & flags; - - - m_fPp10ext = 0x20 & flags; - m_fBidi = 0x40 & flags; - - - m_smartTag = 0x200 & flags; - - if (m_spell) - m_spellInfo = StreamUtils::ReadWORD(pStream); - if (m_lang) - m_altLang = StreamUtils::ReadWORD(pStream); - if (m_altLang) - m_altLid = StreamUtils::ReadWORD(pStream); - if (m_fBidi) - m_bidi = StreamUtils::ReadWORD(pStream); - - if (m_fPp10ext) - { - m_pp10runid = 0x0F & StreamUtils::ReadBYTE(pStream); - StreamUtils::StreamSkip(2, pStream); - m_grammarError = 0x80 & StreamUtils::ReadBYTE(pStream); - } - - if (m_smartTag) - { - StreamUtils::StreamSkip(StreamUtils::ReadDWORD(pStream) * 4, pStream); -// m_smartTags = new SSmartTags; -// m_smartTags->ReadFromStream(pStream); - } - } + void ReadFromStream(POLE::Stream* pStream); }; } diff --git a/MsBinaryFile/PptFile/Records/TextSIExceptionAtom.cpp b/MsBinaryFile/PptFile/Records/TextSIExceptionAtom.cpp new file mode 100644 index 0000000000..e7d09149cf --- /dev/null +++ b/MsBinaryFile/PptFile/Records/TextSIExceptionAtom.cpp @@ -0,0 +1,23 @@ +#include "TextSIExceptionAtom.h" + + +CRecordTextSIExceptionAtom::CRecordTextSIExceptionAtom() +{ +} + +CRecordTextSIExceptionAtom::~CRecordTextSIExceptionAtom() +{ +} + +void CRecordTextSIExceptionAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + LONG lPosition = 0; + StreamUtils::StreamPosition(lPosition, pStream); + + NSStreamReader::Read(pStream, m_oSIRun, false); + + // это на всякий случай... + StreamUtils::StreamSeek(lPosition + m_oHeader.RecLen, pStream); +} diff --git a/MsBinaryFile/PptFile/Records/TextSIExceptionAtom.h b/MsBinaryFile/PptFile/Records/TextSIExceptionAtom.h index 6adc9131e5..c84290cf15 100644 --- a/MsBinaryFile/PptFile/Records/TextSIExceptionAtom.h +++ b/MsBinaryFile/PptFile/Records/TextSIExceptionAtom.h @@ -37,25 +37,9 @@ class CRecordTextSIExceptionAtom : public CUnknownRecord public: CTextSIRun m_oSIRun; - CRecordTextSIExceptionAtom() - { - } - ~CRecordTextSIExceptionAtom() - { - } + CRecordTextSIExceptionAtom(); + ~CRecordTextSIExceptionAtom(); - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - m_oHeader = oHeader; - - LONG lPosition = 0; - StreamUtils::StreamPosition(lPosition, pStream); - - NSStreamReader::Read(pStream, m_oSIRun, false); - - // это на всякий случай... - StreamUtils::StreamSeek(lPosition + m_oHeader.RecLen, pStream); - } - -}; \ No newline at end of file + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) override; +}; diff --git a/MsBinaryFile/PptFile/Records/TextSpecInfoAtom.cpp b/MsBinaryFile/PptFile/Records/TextSpecInfoAtom.cpp new file mode 100644 index 0000000000..522d38d691 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/TextSpecInfoAtom.cpp @@ -0,0 +1,66 @@ +#include "TextSpecInfoAtom.h" + + +CRecordTextSpecInfoAtom::CRecordTextSpecInfoAtom() +{ + m_lCount = 0; + m_lOffsetInStream = 0; +} + +CRecordTextSpecInfoAtom::~CRecordTextSpecInfoAtom() +{ + m_lCount = 0; +} + +void CRecordTextSpecInfoAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + StreamUtils::StreamPosition(m_lOffsetInStream, pStream); + + _UINT32 lMemCount = 0; + while (true) + { + PPT_FORMAT::CTextSIRun elm; + m_arrSIs.push_back(elm); + + NSStreamReader::Read(pStream, m_arrSIs.back()); + lMemCount += m_arrSIs.back().lCount; + + long sz = (long)(pStream->tell() - m_lOffsetInStream); + + if (sz >= (long)m_oHeader.RecLen) + break; + } + + // на всякий случай... + // здесь когда текст сначала другой (т.е. например - placeholder в мастере) - + // то у нас неправильно выставился m_lCount... на число m_lCount пилюем .. берем структур si скока прописано + StreamUtils::StreamSeek(m_lOffsetInStream + m_oHeader.RecLen, pStream); +} + +void CRecordTextSpecInfoAtom::ApplyProperties(CTextAttributesEx *pText) +{ + if (m_arrSIs.size() < 1) return; + + int pos_text = 0, pos_si = 0; + size_t ind = 0; + + for (size_t i = 0; i < pText->m_arParagraphs.size(); i++) + { + if (ind >= m_arrSIs.size()) break; + + for (size_t j = 0 ; j < pText->m_arParagraphs[i].m_arSpans.size(); j++) + { + if (pos_text + pText->m_arParagraphs[i].m_arSpans[j].m_strText.length() > pos_si + m_arrSIs[ind].lCount ) + { + pos_si += m_arrSIs[ind].lCount; + ind++; + } + if (ind >= m_arrSIs.size()) break; + if (m_arrSIs[ind].bLang) + pText->m_arParagraphs[i].m_arSpans[j].m_oRun.Language = m_arrSIs[ind].Lang; + pos_text += pText->m_arParagraphs[i].m_arSpans[j].m_strText.length() ; + } + + } +} diff --git a/MsBinaryFile/PptFile/Records/TextSpecInfoAtom.h b/MsBinaryFile/PptFile/Records/TextSpecInfoAtom.h index 31faf876cd..4f44fddd69 100644 --- a/MsBinaryFile/PptFile/Records/TextSpecInfoAtom.h +++ b/MsBinaryFile/PptFile/Records/TextSpecInfoAtom.h @@ -43,68 +43,10 @@ public: std::vector m_arrSIs; - CRecordTextSpecInfoAtom() - { - m_lCount = 0; - m_lOffsetInStream = 0; - } + CRecordTextSpecInfoAtom(); + ~CRecordTextSpecInfoAtom(); - ~CRecordTextSpecInfoAtom() - { - m_lCount = 0; - } - - void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - m_oHeader = oHeader; - StreamUtils::StreamPosition(m_lOffsetInStream, pStream); - - _UINT32 lMemCount = 0; - while (true) - { - PPT_FORMAT::CTextSIRun elm; - m_arrSIs.push_back(elm); - - NSStreamReader::Read(pStream, m_arrSIs.back()); - lMemCount += m_arrSIs.back().lCount; - - long sz = (long)(pStream->tell() - m_lOffsetInStream); - - if (sz >= (long)m_oHeader.RecLen) - break; - } - - // на всякий случай... - // здесь когда текст сначала другой (т.е. например - placeholder в мастере) - - // то у нас неправильно выставился m_lCount... на число m_lCount пилюем .. берем структур si скока прописано - StreamUtils::StreamSeek(m_lOffsetInStream + m_oHeader.RecLen, pStream); - } - - void ApplyProperties(CTextAttributesEx* pText) - { - if (m_arrSIs.size() < 1) return; - - int pos_text = 0, pos_si = 0; - size_t ind = 0; - - for (size_t i = 0; i < pText->m_arParagraphs.size(); i++) - { - if (ind >= m_arrSIs.size()) break; - - for (size_t j = 0 ; j < pText->m_arParagraphs[i].m_arSpans.size(); j++) - { - if (pos_text + pText->m_arParagraphs[i].m_arSpans[j].m_strText.length() > pos_si + m_arrSIs[ind].lCount ) - { - pos_si += m_arrSIs[ind].lCount; - ind++; - } - if (ind >= m_arrSIs.size()) break; - if (m_arrSIs[ind].bLang) - pText->m_arParagraphs[i].m_arSpans[j].m_oRun.Language = m_arrSIs[ind].Lang; - pos_text += pText->m_arParagraphs[i].m_arSpans[j].m_strText.length() ; - } - - } - } + void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) override; + void ApplyProperties(CTextAttributesEx* pText); }; diff --git a/MsBinaryFile/PptFile/Records/UserEditAtom.cpp b/MsBinaryFile/PptFile/Records/UserEditAtom.cpp new file mode 100644 index 0000000000..085bf5831a --- /dev/null +++ b/MsBinaryFile/PptFile/Records/UserEditAtom.cpp @@ -0,0 +1,53 @@ +#include "UserEditAtom.h" + + +CRecordUserEditAtom::CRecordUserEditAtom() +{ + m_nEncryptSessionPersistIdRef = 0; +} + +CRecordUserEditAtom::~CRecordUserEditAtom() +{ +} + +void CRecordUserEditAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + m_nLastSlideIdRef = StreamUtils::ReadDWORD(pStream); + + m_nVersion = StreamUtils::ReadWORD(pStream); + m_nMinorVersion = StreamUtils::ReadBYTE(pStream); + m_nMajorVersion = StreamUtils::ReadBYTE(pStream); + + m_nOffsetLastEdit = StreamUtils::ReadDWORD(pStream); + m_nOffsetPersistDirectory = StreamUtils::ReadDWORD(pStream); + m_nOffsetDocPersistIdRef = StreamUtils::ReadDWORD(pStream); + + m_nPersistIdSeed = StreamUtils::ReadDWORD(pStream); + m_nLastView = StreamUtils::ReadWORD(pStream); + + StreamUtils::StreamSkip(2, pStream); + + if (m_oHeader.RecLen > 28) + { + m_nEncryptSessionPersistIdRef = StreamUtils::ReadDWORD(pStream); + } +} + +CRecordUserEditAtom &CRecordUserEditAtom::operator =(const CRecordUserEditAtom &oSrc) +{ + m_nLastSlideIdRef = oSrc.m_nLastSlideIdRef; + + m_nVersion = oSrc.m_nVersion; + m_nMinorVersion = oSrc.m_nMinorVersion; + m_nMajorVersion = oSrc.m_nMajorVersion; + + m_nOffsetLastEdit = oSrc.m_nOffsetLastEdit; + m_nOffsetPersistDirectory = oSrc.m_nOffsetPersistDirectory; + m_nOffsetDocPersistIdRef = oSrc.m_nOffsetDocPersistIdRef; + m_nPersistIdSeed = oSrc.m_nPersistIdSeed; + m_nLastView = oSrc.m_nLastView; + m_nEncryptSessionPersistIdRef = oSrc.m_nEncryptSessionPersistIdRef; + return (*this); +} diff --git a/MsBinaryFile/PptFile/Records/UserEditAtom.h b/MsBinaryFile/PptFile/Records/UserEditAtom.h index bdcb6e358b..d3899c0d77 100644 --- a/MsBinaryFile/PptFile/Records/UserEditAtom.h +++ b/MsBinaryFile/PptFile/Records/UserEditAtom.h @@ -53,54 +53,11 @@ public: USHORT m_nLastView; - CRecordUserEditAtom() - { - m_nEncryptSessionPersistIdRef = 0; - } - ~CRecordUserEditAtom() - { - } + CRecordUserEditAtom(); + ~CRecordUserEditAtom(); - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - m_oHeader = oHeader; - - m_nLastSlideIdRef = StreamUtils::ReadDWORD(pStream); + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) override; - m_nVersion = StreamUtils::ReadWORD(pStream); - m_nMinorVersion = StreamUtils::ReadBYTE(pStream); - m_nMajorVersion = StreamUtils::ReadBYTE(pStream); - - m_nOffsetLastEdit = StreamUtils::ReadDWORD(pStream); - m_nOffsetPersistDirectory = StreamUtils::ReadDWORD(pStream); - m_nOffsetDocPersistIdRef = StreamUtils::ReadDWORD(pStream); - - m_nPersistIdSeed = StreamUtils::ReadDWORD(pStream); - m_nLastView = StreamUtils::ReadWORD(pStream); - - StreamUtils::StreamSkip(2, pStream); - - if (m_oHeader.RecLen > 28) - { - m_nEncryptSessionPersistIdRef = StreamUtils::ReadDWORD(pStream); - } - } - - CRecordUserEditAtom& operator =(const CRecordUserEditAtom& oSrc) - { - m_nLastSlideIdRef = oSrc.m_nLastSlideIdRef; - - m_nVersion = oSrc.m_nVersion; - m_nMinorVersion = oSrc.m_nMinorVersion; - m_nMajorVersion = oSrc.m_nMajorVersion; - - m_nOffsetLastEdit = oSrc.m_nOffsetLastEdit; - m_nOffsetPersistDirectory = oSrc.m_nOffsetPersistDirectory; - m_nOffsetDocPersistIdRef = oSrc.m_nOffsetDocPersistIdRef; - m_nPersistIdSeed = oSrc.m_nPersistIdSeed; - m_nLastView = oSrc.m_nLastView; - m_nEncryptSessionPersistIdRef = oSrc.m_nEncryptSessionPersistIdRef; - return (*this); - } -}; \ No newline at end of file + CRecordUserEditAtom& operator =(const CRecordUserEditAtom& oSrc); +}; diff --git a/MsBinaryFile/PptFile/Records/VBAInfoAtom.cpp b/MsBinaryFile/PptFile/Records/VBAInfoAtom.cpp new file mode 100644 index 0000000000..9d21358f39 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/VBAInfoAtom.cpp @@ -0,0 +1,81 @@ +#include "VBAInfoAtom.h" + + +CRecordVBAInfoAtom::CRecordVBAInfoAtom() +{ +} + +CRecordVBAInfoAtom::~CRecordVBAInfoAtom() +{ +} + +void CRecordVBAInfoAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + m_nObjStgDataRef = StreamUtils::ReadDWORD(pStream); + m_nHasMacros = StreamUtils::ReadDWORD(pStream); + m_nVersion = StreamUtils::ReadDWORD(pStream); +} + +CRecordVBAInfoContainer::CRecordVBAInfoContainer() +{} + +CRecordVBAInfoContainer::~CRecordVBAInfoContainer() +{} + +void CRecordVBAInfoContainer::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + CRecordsContainer::ReadFromStream(oHeader, pStream); +} + +CRecordVbaProjectStg::CRecordVbaProjectStg(std::wstring strTemp) : m_strTmpDirectory(strTemp) +{ +} + +CRecordVbaProjectStg::~CRecordVbaProjectStg() +{ +} + +void CRecordVbaProjectStg::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + ULONG decompressedSize = m_oHeader.RecLen, compressedSize = m_oHeader.RecLen; + + BYTE* pData = new BYTE[compressedSize]; + if (!pData) return; + + if (m_oHeader.RecInstance == 0x01) + { + decompressedSize = StreamUtils::ReadDWORD(pStream) + 64; + compressedSize -= 4; + } + pStream->read(pData, compressedSize); + + //if (pDecryptor) + //{ + // pDecryptor->Decrypt((char*)pData, compressedSize, 0); + //} + + if (m_oHeader.RecInstance == 0x01) + { + BYTE* pDataUncompress = new BYTE[decompressedSize]; + NSZip::Decompress(pData, compressedSize, pDataUncompress, decompressedSize); + + delete []pData; + pData = pDataUncompress; + } + + m_sFileName = m_strTmpDirectory + FILE_SEPARATOR_STR + L"vbaProject.bin"; + + NSFile::CFileBinary file; + if (file.CreateFileW(m_sFileName)) + { + file.WriteFile(pData, decompressedSize); + file.CloseFile(); + } + delete[] pData; + pData = NULL; +} diff --git a/MsBinaryFile/PptFile/Records/VBAInfoAtom.h b/MsBinaryFile/PptFile/Records/VBAInfoAtom.h index 615100af3c..ed1b2c44f5 100644 --- a/MsBinaryFile/PptFile/Records/VBAInfoAtom.h +++ b/MsBinaryFile/PptFile/Records/VBAInfoAtom.h @@ -40,37 +40,20 @@ public: UINT m_nHasMacros; UINT m_nVersion; - CRecordVBAInfoAtom() - { - } - ~CRecordVBAInfoAtom() - { - } - - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - m_oHeader = oHeader; - - m_nObjStgDataRef = StreamUtils::ReadDWORD(pStream); - m_nHasMacros = StreamUtils::ReadDWORD(pStream); - m_nVersion = StreamUtils::ReadDWORD(pStream); - } + CRecordVBAInfoAtom(); + ~CRecordVBAInfoAtom(); + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) override; }; class CRecordVBAInfoContainer : public CRecordsContainer { public: - CRecordVBAInfoContainer() - {} - ~CRecordVBAInfoContainer() - {} - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - m_oHeader = oHeader; - CRecordsContainer::ReadFromStream(oHeader, pStream); - } + CRecordVBAInfoContainer(); + ~CRecordVBAInfoContainer(); + + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream); }; class CRecordVbaProjectStg : public CUnknownRecord @@ -79,54 +62,9 @@ public: std::wstring m_sFileName; std::wstring m_strTmpDirectory; - CRecordVbaProjectStg(std::wstring strTemp) : m_strTmpDirectory(strTemp) - { - } - ~CRecordVbaProjectStg() - { - } - - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - m_oHeader = oHeader; - - ULONG decompressedSize = m_oHeader.RecLen, compressedSize = m_oHeader.RecLen; - - BYTE* pData = new BYTE[compressedSize]; - if (!pData) return; - - if (m_oHeader.RecInstance == 0x01) - { - decompressedSize = StreamUtils::ReadDWORD(pStream) + 64; - compressedSize -= 4; - } - pStream->read(pData, compressedSize); - - //if (pDecryptor) - //{ - // pDecryptor->Decrypt((char*)pData, compressedSize, 0); - //} - - if (m_oHeader.RecInstance == 0x01) - { - BYTE* pDataUncompress = new BYTE[decompressedSize]; - NSZip::Decompress(pData, compressedSize, pDataUncompress, decompressedSize); - - delete []pData; - pData = pDataUncompress; - } - - m_sFileName = m_strTmpDirectory + FILE_SEPARATOR_STR + L"vbaProject.bin"; - - NSFile::CFileBinary file; - if (file.CreateFileW(m_sFileName)) - { - file.WriteFile(pData, decompressedSize); - file.CloseFile(); - } - delete[] pData; - pData = NULL; - } + CRecordVbaProjectStg(std::wstring strTemp); + ~CRecordVbaProjectStg(); + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) override; }; diff --git a/MsBinaryFile/PptFile/Records/ViewInfoAtom.cpp b/MsBinaryFile/PptFile/Records/ViewInfoAtom.cpp new file mode 100644 index 0000000000..e463393338 --- /dev/null +++ b/MsBinaryFile/PptFile/Records/ViewInfoAtom.cpp @@ -0,0 +1,26 @@ +#include "ViewInfoAtom.h" + + +CRecordViewInfoAtom::CRecordViewInfoAtom() +{ +} + +CRecordViewInfoAtom::~CRecordViewInfoAtom() +{ +} + +void CRecordViewInfoAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + m_oCurScale.FromStream(pStream); + m_oPrevScale.FromStream(pStream); + NSStreamReader::Read(pStream, m_oViewSize); + NSStreamReader::Read(pStream, m_oOrigin); + + m_bZoomToFit = StreamUtils::ReadBYTE(pStream); + m_bDraftMode = StreamUtils::ReadBYTE(pStream); + + // 2 байта зарезервированы... + StreamUtils::StreamSkip(2, pStream); +} diff --git a/MsBinaryFile/PptFile/Records/ViewInfoAtom.h b/MsBinaryFile/PptFile/Records/ViewInfoAtom.h index 549350c120..5cbbd35dc8 100644 --- a/MsBinaryFile/PptFile/Records/ViewInfoAtom.h +++ b/MsBinaryFile/PptFile/Records/ViewInfoAtom.h @@ -43,29 +43,9 @@ class CRecordViewInfoAtom : public CUnknownRecord BOOL1 m_bDraftMode; public: - - CRecordViewInfoAtom() - { - } + CRecordViewInfoAtom(); + ~CRecordViewInfoAtom(); - ~CRecordViewInfoAtom() - { - } + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) override; - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - m_oHeader = oHeader; - - m_oCurScale.FromStream(pStream); - m_oPrevScale.FromStream(pStream); - NSStreamReader::Read(pStream, m_oViewSize); - NSStreamReader::Read(pStream, m_oOrigin); - - m_bZoomToFit = StreamUtils::ReadBYTE(pStream); - m_bDraftMode = StreamUtils::ReadBYTE(pStream); - - // 2 байта зарезервированы... - StreamUtils::StreamSkip(2, pStream); - } - -}; \ No newline at end of file +}; diff --git a/MsBinaryFile/PptFile/Records/ZoomViewInfoAtom.cpp b/MsBinaryFile/PptFile/Records/ZoomViewInfoAtom.cpp new file mode 100644 index 0000000000..4babbcc90e --- /dev/null +++ b/MsBinaryFile/PptFile/Records/ZoomViewInfoAtom.cpp @@ -0,0 +1,25 @@ +#include "ZoomViewInfoAtom.h" + +CRecordZoomViewInfoAtom::CRecordZoomViewInfoAtom() +{ +} + +CRecordZoomViewInfoAtom::~CRecordZoomViewInfoAtom() +{ +} + +void CRecordZoomViewInfoAtom::ReadFromStream(SRecordHeader &oHeader, POLE::Stream *pStream) +{ + m_oHeader = oHeader; + + m_oCurScale.ReadFromStream(pStream); + + StreamUtils::StreamSkip(24, pStream); + + m_oOrigin.ReadFromStream(pStream); + + m_fUseVarScale = StreamUtils::ReadBYTE(pStream); + m_fDraftMode = StreamUtils::ReadBYTE(pStream); + + StreamUtils::StreamSkip(2, pStream); +} diff --git a/MsBinaryFile/PptFile/Records/ZoomViewInfoAtom.h b/MsBinaryFile/PptFile/Records/ZoomViewInfoAtom.h index 8a30222908..013ba90d30 100644 --- a/MsBinaryFile/PptFile/Records/ZoomViewInfoAtom.h +++ b/MsBinaryFile/PptFile/Records/ZoomViewInfoAtom.h @@ -46,28 +46,10 @@ public: BOOL1 m_fUseVarScale; BOOL1 m_fDraftMode; - CRecordZoomViewInfoAtom() - { - } - ~CRecordZoomViewInfoAtom() - { - } + CRecordZoomViewInfoAtom(); + ~CRecordZoomViewInfoAtom(); - virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) - { - m_oHeader = oHeader; - - m_oCurScale.ReadFromStream(pStream); - - StreamUtils::StreamSkip(24, pStream); - - m_oOrigin.ReadFromStream(pStream); - - m_fUseVarScale = StreamUtils::ReadBYTE(pStream); - m_fDraftMode = StreamUtils::ReadBYTE(pStream); - - StreamUtils::StreamSkip(2, pStream); - } + virtual void ReadFromStream(SRecordHeader & oHeader, POLE::Stream* pStream) override; }; } diff --git a/MsBinaryFile/PptFile/Structures/ColorIndex.cpp b/MsBinaryFile/PptFile/Structures/ColorIndex.cpp new file mode 100644 index 0000000000..19c603ace5 --- /dev/null +++ b/MsBinaryFile/PptFile/Structures/ColorIndex.cpp @@ -0,0 +1,15 @@ +#include "ColorIndex.h" + +void PPT_FORMAT::ColorIndex::clear() +{ + m_red = m_green = m_blue = 0; + m_index = 0xFF; // Color is undefined. +} + +void PPT_FORMAT::ColorIndex::ReadFromStream(POLE::Stream *pStream) +{ + m_red = StreamUtils::ReadBYTE(pStream); + m_green = StreamUtils::ReadBYTE(pStream); + m_blue = StreamUtils::ReadBYTE(pStream); + m_index = StreamUtils::ReadBYTE(pStream); +} diff --git a/MsBinaryFile/PptFile/Structures/ColorIndex.h b/MsBinaryFile/PptFile/Structures/ColorIndex.h index b54e5a5182..62a263b5e2 100644 --- a/MsBinaryFile/PptFile/Structures/ColorIndex.h +++ b/MsBinaryFile/PptFile/Structures/ColorIndex.h @@ -34,27 +34,18 @@ #include "IStruct.h" + namespace PPT_FORMAT { -struct ColorIndex : public IStruct { - +struct ColorIndex : public IStruct +{ BYTE m_red; BYTE m_green; BYTE m_blue; BYTE m_index; - void clear() - { - m_red = m_green = m_blue = 0; - m_index = 0xFF; // Color is undefined. - } - void ReadFromStream(POLE::Stream * pStream) - { - m_red = StreamUtils::ReadBYTE(pStream); - m_green = StreamUtils::ReadBYTE(pStream); - m_blue = StreamUtils::ReadBYTE(pStream); - m_index = StreamUtils::ReadBYTE(pStream); - } + void clear(); + void ReadFromStream(POLE::Stream *pStream) override; }; } diff --git a/MsBinaryFile/PptFile/Structures/ColorIndexStruct.cpp b/MsBinaryFile/PptFile/Structures/ColorIndexStruct.cpp new file mode 100644 index 0000000000..0b596553cc --- /dev/null +++ b/MsBinaryFile/PptFile/Structures/ColorIndexStruct.cpp @@ -0,0 +1,21 @@ +#include "ColorIndexStruct.h" + + +PPT_FORMAT::ColorIndexStruct::ColorIndexStruct() +{ + clear(); +} + +void PPT_FORMAT::ColorIndexStruct::clear() +{ + m_red = m_green = m_blue = 0; + m_index = 0; +} + +void PPT_FORMAT::ColorIndexStruct::ReadFromStream(POLE::Stream *pStream) +{ + m_red = StreamUtils::ReadBYTE(pStream); + m_green = StreamUtils::ReadBYTE(pStream); + m_blue = StreamUtils::ReadBYTE(pStream); + m_index = StreamUtils::ReadBYTE(pStream); +} diff --git a/MsBinaryFile/PptFile/Structures/ColorIndexStruct.h b/MsBinaryFile/PptFile/Structures/ColorIndexStruct.h index 293c7c3e80..4b4568862f 100644 --- a/MsBinaryFile/PptFile/Structures/ColorIndexStruct.h +++ b/MsBinaryFile/PptFile/Structures/ColorIndexStruct.h @@ -36,30 +36,16 @@ namespace PPT_FORMAT { -struct ColorIndexStruct : public IStruct { - +struct ColorIndexStruct : public IStruct +{ BYTE m_red; BYTE m_green; BYTE m_blue; BYTE m_index; - ColorIndexStruct() - { - clear(); - } + ColorIndexStruct(); - void clear() - { - m_red = m_green = m_blue = 0; - m_index = 0; - } - - void ReadFromStream(POLE::Stream * pStream) - { - m_red = StreamUtils::ReadBYTE(pStream); - m_green = StreamUtils::ReadBYTE(pStream); - m_blue = StreamUtils::ReadBYTE(pStream); - m_index = StreamUtils::ReadBYTE(pStream); - } + void clear(); + void ReadFromStream(POLE::Stream *pStream) override; }; } diff --git a/MsBinaryFile/PptFile/Structures/ColorStruct.cpp b/MsBinaryFile/PptFile/Structures/ColorStruct.cpp new file mode 100644 index 0000000000..3d83eb24fd --- /dev/null +++ b/MsBinaryFile/PptFile/Structures/ColorStruct.cpp @@ -0,0 +1,20 @@ +#include "ColorStruct.h" + + +PPT_FORMAT::ColorStruct::ColorStruct() +{ + clear(); +} + +void PPT_FORMAT::ColorStruct::clear() +{ + m_red = m_green = m_blue = 0; +} + +void PPT_FORMAT::ColorStruct::ReadFromStream(POLE::Stream *pStream) +{ + m_red = StreamUtils::ReadBYTE(pStream); + m_green = StreamUtils::ReadBYTE(pStream); + m_blue = StreamUtils::ReadBYTE(pStream); + StreamUtils::StreamSkip(1, pStream); +} diff --git a/MsBinaryFile/PptFile/Structures/ColorStruct.h b/MsBinaryFile/PptFile/Structures/ColorStruct.h index e3c4705ca7..376fcfe886 100644 --- a/MsBinaryFile/PptFile/Structures/ColorStruct.h +++ b/MsBinaryFile/PptFile/Structures/ColorStruct.h @@ -36,28 +36,16 @@ namespace PPT_FORMAT { -struct ColorStruct { - +struct ColorStruct +{ BYTE m_red; BYTE m_green; BYTE m_blue; - ColorStruct() - { - clear(); - } - void clear() - { - m_red = m_green = m_blue = 0; - } + ColorStruct(); + void clear(); - void ReadFromStream(POLE::Stream * pStream) - { - m_red = StreamUtils::ReadBYTE(pStream); - m_green = StreamUtils::ReadBYTE(pStream); - m_blue = StreamUtils::ReadBYTE(pStream); - StreamUtils::StreamSkip(1, pStream); - } + void ReadFromStream(POLE::Stream * pStream) override; }; } diff --git a/MsBinaryFile/PptFile/Structures/DateTimeStruct.cpp b/MsBinaryFile/PptFile/Structures/DateTimeStruct.cpp new file mode 100644 index 0000000000..9a7d2a1021 --- /dev/null +++ b/MsBinaryFile/PptFile/Structures/DateTimeStruct.cpp @@ -0,0 +1,19 @@ +#include "DateTimeStruct.h" + + +PPT_FORMAT::DateTimeStruct::DateTimeStruct() : + m_wYear(0), m_wMonth(0), m_wDayOfWeek(0), m_wDay(0), + m_wHour(0), m_wMinute(0), m_wSecond(0), m_wMilliseconds(0) +{} + +void PPT_FORMAT::DateTimeStruct::ReadFromStream(POLE::Stream *pStream) +{ + m_wYear = StreamUtils::ReadWORD(pStream); + m_wMonth = StreamUtils::ReadWORD(pStream); + m_wDayOfWeek = StreamUtils::ReadWORD(pStream); + m_wDay = StreamUtils::ReadWORD(pStream); + m_wHour = StreamUtils::ReadWORD(pStream); + m_wMinute = StreamUtils::ReadWORD(pStream); + m_wSecond = StreamUtils::ReadWORD(pStream); + m_wMilliseconds = StreamUtils::ReadWORD(pStream); +} diff --git a/MsBinaryFile/PptFile/Structures/DateTimeStruct.h b/MsBinaryFile/PptFile/Structures/DateTimeStruct.h index c9cc52f77f..dd1ebe7654 100644 --- a/MsBinaryFile/PptFile/Structures/DateTimeStruct.h +++ b/MsBinaryFile/PptFile/Structures/DateTimeStruct.h @@ -49,21 +49,8 @@ struct DateTimeStruct : public IStruct WORD m_wSecond; WORD m_wMilliseconds; - DateTimeStruct() : - m_wYear(0), m_wMonth(0), m_wDayOfWeek(0), m_wDay(0), - m_wHour(0), m_wMinute(0), m_wSecond(0), m_wMilliseconds(0) - {} - void ReadFromStream(POLE::Stream *pStream) override - { - m_wYear = StreamUtils::ReadWORD(pStream); - m_wMonth = StreamUtils::ReadWORD(pStream); - m_wDayOfWeek = StreamUtils::ReadWORD(pStream); - m_wDay = StreamUtils::ReadWORD(pStream); - m_wHour = StreamUtils::ReadWORD(pStream); - m_wMinute = StreamUtils::ReadWORD(pStream); - m_wSecond = StreamUtils::ReadWORD(pStream); - m_wMilliseconds = StreamUtils::ReadWORD(pStream); - } + DateTimeStruct(); + void ReadFromStream(POLE::Stream *pStream) override; }; } diff --git a/MsBinaryFile/PptFile/Structures/PointStruct.cpp b/MsBinaryFile/PptFile/Structures/PointStruct.cpp new file mode 100644 index 0000000000..5912727cb3 --- /dev/null +++ b/MsBinaryFile/PptFile/Structures/PointStruct.cpp @@ -0,0 +1,8 @@ +#include "PointStruct.h" + + +void PPT_FORMAT::PointStruct::ReadFromStream(POLE::Stream *pStream) +{ + m_x = StreamUtils::ReadLONG(pStream); + m_y = StreamUtils::ReadLONG(pStream); +} diff --git a/MsBinaryFile/PptFile/Structures/PointStruct.h b/MsBinaryFile/PptFile/Structures/PointStruct.h index 0760110ded..59cea60472 100644 --- a/MsBinaryFile/PptFile/Structures/PointStruct.h +++ b/MsBinaryFile/PptFile/Structures/PointStruct.h @@ -40,10 +40,6 @@ struct PointStruct : public IStruct _UINT32 m_x; _UINT32 m_y; - void ReadFromStream(POLE::Stream *pStream) override - { - m_x = StreamUtils::ReadLONG(pStream); - m_y = StreamUtils::ReadLONG(pStream); - } + void ReadFromStream(POLE::Stream *pStream) override; }; } diff --git a/MsBinaryFile/PptFile/Structures/RatioStruct.cpp b/MsBinaryFile/PptFile/Structures/RatioStruct.cpp new file mode 100644 index 0000000000..3cb6f8f4e5 --- /dev/null +++ b/MsBinaryFile/PptFile/Structures/RatioStruct.cpp @@ -0,0 +1,8 @@ +#include "RatioStruct.h" + + +void PPT_FORMAT::RatioStruct::ReadFromStream(POLE::Stream *pStream) +{ + m_nNumber = StreamUtils::ReadLONG(pStream); + m_nDenom = StreamUtils::ReadLONG(pStream); +} diff --git a/MsBinaryFile/PptFile/Structures/RatioStruct.h b/MsBinaryFile/PptFile/Structures/RatioStruct.h index 2d59200650..32fe23a6f0 100644 --- a/MsBinaryFile/PptFile/Structures/RatioStruct.h +++ b/MsBinaryFile/PptFile/Structures/RatioStruct.h @@ -42,10 +42,7 @@ struct RatioStruct : public IStruct LONG m_nNumber; LONG m_nDenom; - void ReadFromStream(POLE::Stream* pStream) override - { - m_nNumber = StreamUtils::ReadLONG(pStream); - m_nDenom = StreamUtils::ReadLONG(pStream); - } + + void ReadFromStream(POLE::Stream* pStream) override; }; } diff --git a/MsBinaryFile/PptFile/Structures/RectStruct.cpp b/MsBinaryFile/PptFile/Structures/RectStruct.cpp new file mode 100644 index 0000000000..4abd918c1e --- /dev/null +++ b/MsBinaryFile/PptFile/Structures/RectStruct.cpp @@ -0,0 +1,10 @@ +#include "RectStruct.h" + + +void PPT_FORMAT::RectStruct::ReadFromStream(POLE::Stream *pStream) +{ + m_nTop = StreamUtils::ReadLONG(pStream); + m_nLeft = StreamUtils::ReadLONG(pStream); + m_nRight = StreamUtils::ReadLONG(pStream); + m_nBottom = StreamUtils::ReadLONG(pStream); +} diff --git a/MsBinaryFile/PptFile/Structures/RectStruct.h b/MsBinaryFile/PptFile/Structures/RectStruct.h index eee7350217..c7deaa055d 100644 --- a/MsBinaryFile/PptFile/Structures/RectStruct.h +++ b/MsBinaryFile/PptFile/Structures/RectStruct.h @@ -44,12 +44,7 @@ struct RectStruct : public IStruct _INT32 m_nRight; _INT32 m_nBottom; - void ReadFromStream(POLE::Stream *pStream) override - { - m_nTop = StreamUtils::ReadLONG(pStream); - m_nLeft = StreamUtils::ReadLONG(pStream); - m_nRight = StreamUtils::ReadLONG(pStream); - m_nBottom = StreamUtils::ReadLONG(pStream); - } + + void ReadFromStream(POLE::Stream *pStream) override; }; } diff --git a/MsBinaryFile/PptFile/Structures/ScalingStruct.cpp b/MsBinaryFile/PptFile/Structures/ScalingStruct.cpp new file mode 100644 index 0000000000..6862788c9b --- /dev/null +++ b/MsBinaryFile/PptFile/Structures/ScalingStruct.cpp @@ -0,0 +1,8 @@ +#include "ScalingStruct.h" + + +void PPT_FORMAT::ScalingStruct::ReadFromStream(POLE::Stream *pStream) +{ + m_x.ReadFromStream(pStream); + m_y.ReadFromStream(pStream); +} diff --git a/MsBinaryFile/PptFile/Structures/ScalingStruct.h b/MsBinaryFile/PptFile/Structures/ScalingStruct.h index 4df800f955..9ef9b0c49d 100644 --- a/MsBinaryFile/PptFile/Structures/ScalingStruct.h +++ b/MsBinaryFile/PptFile/Structures/ScalingStruct.h @@ -42,10 +42,6 @@ struct ScalingStruct : public IStruct RatioStruct m_x; RatioStruct m_y; - void ReadFromStream(POLE::Stream* pStream) override - { - m_x.ReadFromStream(pStream); - m_y.ReadFromStream(pStream); - } + void ReadFromStream(POLE::Stream* pStream) override; }; } diff --git a/MsBinaryFile/PptFile/Structures/SmallRectStruct.cpp b/MsBinaryFile/PptFile/Structures/SmallRectStruct.cpp new file mode 100644 index 0000000000..5d6f989033 --- /dev/null +++ b/MsBinaryFile/PptFile/Structures/SmallRectStruct.cpp @@ -0,0 +1,10 @@ +#include "SmallRectStruct.h" + + +void PPT_FORMAT::SmallRectStruct::ReadFromStream(POLE::Stream *pStream) +{ + m_nTop = StreamUtils::ReadSHORT(pStream); + m_nLeft = StreamUtils::ReadSHORT(pStream); + m_nRight = StreamUtils::ReadSHORT(pStream); + m_nBottom = StreamUtils::ReadSHORT(pStream); +} diff --git a/MsBinaryFile/PptFile/Structures/SmallRectStruct.h b/MsBinaryFile/PptFile/Structures/SmallRectStruct.h index 84c5351f97..9bbdfe38b0 100644 --- a/MsBinaryFile/PptFile/Structures/SmallRectStruct.h +++ b/MsBinaryFile/PptFile/Structures/SmallRectStruct.h @@ -43,12 +43,7 @@ struct SmallRectStruct : public IStruct _INT16 m_nRight; _INT16 m_nBottom; - void ReadFromStream(POLE::Stream *pStream) override - { - m_nTop = StreamUtils::ReadSHORT(pStream); - m_nLeft = StreamUtils::ReadSHORT(pStream); - m_nRight = StreamUtils::ReadSHORT(pStream); - m_nBottom = StreamUtils::ReadSHORT(pStream); - } + + void ReadFromStream(POLE::Stream *pStream) override; }; } diff --git a/MsBinaryFile/PptFile/Structures/TmsfTimeStruct.cpp b/MsBinaryFile/PptFile/Structures/TmsfTimeStruct.cpp new file mode 100644 index 0000000000..d846606025 --- /dev/null +++ b/MsBinaryFile/PptFile/Structures/TmsfTimeStruct.cpp @@ -0,0 +1,10 @@ +#include "TmsfTimeStruct.h" + + +void PPT_FORMAT::TmsfTimeStruct::ReadFromStream(POLE::Stream *pStream) +{ + m_nTrack = StreamUtils::ReadBYTE(pStream); + m_nMinute = StreamUtils::ReadBYTE(pStream); + m_nSecond = StreamUtils::ReadBYTE(pStream); + m_nFrame = StreamUtils::ReadBYTE(pStream); +} diff --git a/MsBinaryFile/PptFile/Structures/TmsfTimeStruct.h b/MsBinaryFile/PptFile/Structures/TmsfTimeStruct.h index 5cf0fd4f3f..c384437553 100644 --- a/MsBinaryFile/PptFile/Structures/TmsfTimeStruct.h +++ b/MsBinaryFile/PptFile/Structures/TmsfTimeStruct.h @@ -44,12 +44,7 @@ struct TmsfTimeStruct : public IStruct BYTE m_nSecond; BYTE m_nFrame; - void ReadFromStream(POLE::Stream *pStream) override - { - m_nTrack = StreamUtils::ReadBYTE(pStream); - m_nMinute = StreamUtils::ReadBYTE(pStream); - m_nSecond = StreamUtils::ReadBYTE(pStream); - m_nFrame = StreamUtils::ReadBYTE(pStream); - } + + void ReadFromStream(POLE::Stream *pStream) override; }; } diff --git a/MsBinaryFile/PptFile/Structures/WideColorStruct.cpp b/MsBinaryFile/PptFile/Structures/WideColorStruct.cpp new file mode 100644 index 0000000000..9538201322 --- /dev/null +++ b/MsBinaryFile/PptFile/Structures/WideColorStruct.cpp @@ -0,0 +1,9 @@ +#include "WideColorStruct.h" + + +void PPT_FORMAT::WideColorStruct::ReadFromStream(POLE::Stream *pStream) +{ + m_nRed = StreamUtils::ReadWORD(pStream); + m_nGreen = StreamUtils::ReadWORD(pStream); + m_nBlue = StreamUtils::ReadWORD(pStream); +} diff --git a/MsBinaryFile/PptFile/Structures/WideColorStruct.h b/MsBinaryFile/PptFile/Structures/WideColorStruct.h index a20dc9b65c..ff7316caa9 100644 --- a/MsBinaryFile/PptFile/Structures/WideColorStruct.h +++ b/MsBinaryFile/PptFile/Structures/WideColorStruct.h @@ -43,11 +43,7 @@ struct WideColorStruct : IStruct USHORT m_nGreen; USHORT m_nBlue; - void ReadFromStream(POLE::Stream *pStream) override - { - m_nRed = StreamUtils::ReadWORD(pStream); - m_nGreen = StreamUtils::ReadWORD(pStream); - m_nBlue = StreamUtils::ReadWORD(pStream); - } + + void ReadFromStream(POLE::Stream *pStream) override; }; } diff --git a/X2tConverter/build/Qt/X2tConverter.pro b/X2tConverter/build/Qt/X2tConverter.pro index f0f2b944fd..fff7bbe591 100644 --- a/X2tConverter/build/Qt/X2tConverter.pro +++ b/X2tConverter/build/Qt/X2tConverter.pro @@ -38,3 +38,119 @@ build_x2t_as_library { HEADERS += ../../src/dylib/x2t.h SOURCES += ../../src/dylib/x2t.cpp } + +SOURCES += \ + ../../../MsBinaryFile/PptFile/Records/Animations/AnimationInfoAtom.cpp \ + ../../../MsBinaryFile/PptFile/Records/Animations/AnimationInfoContainer.cpp \ + ../../../MsBinaryFile/PptFile/Records/Animations/BuildAtom.cpp \ + ../../../MsBinaryFile/PptFile/Records/Animations/BuildListSubContainer.cpp \ + ../../../MsBinaryFile/PptFile/Records/Animations/ChartBuildAtom.cpp \ + ../../../MsBinaryFile/PptFile/Records/Animations/ChartBuildContainer.cpp \ + ../../../MsBinaryFile/PptFile/Records/Animations/ClientVisualElementContainer.cpp \ + ../../../MsBinaryFile/PptFile/Records/Animations/DiagramBuildAtom.cpp \ + ../../../MsBinaryFile/PptFile/Records/Animations/DiagramBuildContainer.cpp \ + ../../../MsBinaryFile/PptFile/Records/Animations/ExtTimeNodeContainer.cpp \ + ../../../MsBinaryFile/PptFile/Records/Animations/HashCode10Atom.cpp \ + ../../../MsBinaryFile/PptFile/Records/Animations/LevelInfoAtom.cpp \ + ../../../MsBinaryFile/PptFile/Records/Animations/ParaBuildAtom.cpp \ + ../../../MsBinaryFile/PptFile/Records/Animations/ParaBuildContainer.cpp \ + ../../../MsBinaryFile/PptFile/Records/Animations/ParaBuildLevel.cpp \ + ../../../MsBinaryFile/PptFile/Records/Animations/SubEffectContainer.cpp \ + ../../../MsBinaryFile/PptFile/Records/Animations/TimeAnimateBehaviorAtom.cpp \ + ../../../MsBinaryFile/PptFile/Records/Animations/TimeAnimateBehaviorContainer.cpp \ + ../../../MsBinaryFile/PptFile/Records/Animations/TimeAnimateColor.cpp \ + ../../../MsBinaryFile/PptFile/Records/Animations/TimeAnimateColorBy.cpp \ + ../../../MsBinaryFile/PptFile/Records/Animations/TimeAnimationValueAtom.cpp \ + ../../../MsBinaryFile/PptFile/Records/Animations/TimeAnimationValueListContainer.cpp \ + ../../../MsBinaryFile/PptFile/Records/Animations/TimeAnimationValueListEntry.cpp \ + ../../../MsBinaryFile/PptFile/Records/Animations/TimeBehaviorAtom.cpp \ + ../../../MsBinaryFile/PptFile/Records/Animations/TimeBehaviorContainer.cpp \ + ../../../MsBinaryFile/PptFile/Records/Animations/TimeColorBehaviorAtom.cpp \ + ../../../MsBinaryFile/PptFile/Records/Animations/TimeColorBehaviorContainer.cpp \ + ../../../MsBinaryFile/PptFile/Records/Animations/TimeCommandBehaviorAtom.cpp \ + ../../../MsBinaryFile/PptFile/Records/Animations/TimeCommandBehaviorContainer.cpp \ + ../../../MsBinaryFile/PptFile/Records/Animations/TimeConditionAtom.cpp \ + ../../../MsBinaryFile/PptFile/Records/Animations/TimeConditionContainer.cpp \ + ../../../MsBinaryFile/PptFile/Records/Animations/TimeEffectBehaviorAtom.cpp \ + ../../../MsBinaryFile/PptFile/Records/Animations/TimeEffectBehaviorContainer.cpp \ + ../../../MsBinaryFile/PptFile/Records/Animations/TimeIterateDataAtom.cpp \ + ../../../MsBinaryFile/PptFile/Records/Animations/TimeModifierAtom.cpp \ + ../../../MsBinaryFile/PptFile/Records/Animations/TimeMotionBehaviorAtom.cpp \ + ../../../MsBinaryFile/PptFile/Records/Animations/TimeMotionBehaviorContainer.cpp \ + ../../../MsBinaryFile/PptFile/Records/Animations/TimeNodeAtom.cpp \ + ../../../MsBinaryFile/PptFile/Records/Animations/TimePropertyList4TimeBehavior.cpp \ + ../../../MsBinaryFile/PptFile/Records/Animations/TimePropertyList4TimeNodeContainer.cpp \ + ../../../MsBinaryFile/PptFile/Records/Animations/TimeRotationBehaviorAtom.cpp \ + ../../../MsBinaryFile/PptFile/Records/Animations/TimeRotationBehaviorContainer.cpp \ + ../../../MsBinaryFile/PptFile/Records/Animations/TimeScaleBehaviorAtom.cpp \ + ../../../MsBinaryFile/PptFile/Records/Animations/TimeScaleBehaviorContainer.cpp \ + ../../../MsBinaryFile/PptFile/Records/Animations/TimeSequenceDataAtom.cpp \ + ../../../MsBinaryFile/PptFile/Records/Animations/TimeSetBehaviorAtom.cpp \ + ../../../MsBinaryFile/PptFile/Records/Animations/TimeSetBehaviorContainer.cpp \ + ../../../MsBinaryFile/PptFile/Records/Animations/TimeStringListContainer.cpp \ + ../../../MsBinaryFile/PptFile/Records/Animations/TimeVariant4Behavior.cpp \ + ../../../MsBinaryFile/PptFile/Records/Animations/VisualPageAtom.cpp \ + ../../../MsBinaryFile/PptFile/Records/Animations/VisualShapeAtom.cpp \ + ../../../MsBinaryFile/PptFile/Records/Animations/VisualShapeChartElementAtom.cpp \ + ../../../MsBinaryFile/PptFile/Records/Animations/VisualShapeGeneralAtom.cpp \ + ../../../MsBinaryFile/PptFile/Records/Animations/VisualSoundAtom.cpp \ + ../../../MsBinaryFile/PptFile/Records/BlipCollection9Container.cpp \ + ../../../MsBinaryFile/PptFile/Records/BookmarkEntityAtom.cpp \ + ../../../MsBinaryFile/PptFile/Records/BookmarkSeedAtom.cpp \ + ../../../MsBinaryFile/PptFile/Records/BuildAtom.cpp \ + ../../../MsBinaryFile/PptFile/Records/CFMasks.cpp \ + ../../../MsBinaryFile/PptFile/Records/CString.cpp \ + ../../../MsBinaryFile/PptFile/Records/ColorSchemeAtom.cpp \ + ../../../MsBinaryFile/PptFile/Records/Comment10Container.cpp \ + ../../../MsBinaryFile/PptFile/Records/CurrentUserAtom.cpp \ + ../../../MsBinaryFile/PptFile/Records/DocInfoListContainer.cpp \ + ../../../MsBinaryFile/PptFile/Records/DocProgTagsContainer.cpp \ + ../../../MsBinaryFile/PptFile/Records/DocRoutingSlipAtom.cpp \ + ../../../MsBinaryFile/PptFile/Records/DocumentAtom.cpp \ + ../../../MsBinaryFile/PptFile/Records/DocumentRecords.cpp \ + ../../../MsBinaryFile/PptFile/Records/DocumentTextInfo.cpp \ + ../../../MsBinaryFile/PptFile/Records/Drawing/BlipStoreContainer.cpp \ + ../../../MsBinaryFile/PptFile/Records/Drawing/BlipStoreEntry.cpp \ + ../../../MsBinaryFile/PptFile/Records/Drawing/ChildAnchor.cpp \ + ../../../MsBinaryFile/PptFile/Records/Drawing/ClientAnchor.cpp \ + ../../../MsBinaryFile/PptFile/Records/Drawing/DrawingContainer.cpp \ + ../../../MsBinaryFile/PptFile/Records/Drawing/DrawingGroup.cpp \ + ../../../MsBinaryFile/PptFile/Records/Drawing/DrawingRecord.cpp \ + ../../../MsBinaryFile/PptFile/Records/Drawing/GroupShape.cpp \ + ../../../MsBinaryFile/PptFile/Records/Drawing/Shape.cpp \ + ../../../MsBinaryFile/PptFile/Records/Drawing/ShapeProperties.cpp \ + ../../../MsBinaryFile/PptFile/Records/Drawing/TextBox.cpp \ + ../../../MsBinaryFile/PptFile/Records/EndDocument.cpp \ + ../../../MsBinaryFile/PptFile/Records/ExCDAudioContainer.cpp \ + ../../../MsBinaryFile/PptFile/Records/ExControlAtom.cpp \ + ../../../MsBinaryFile/PptFile/Records/ExHyperlinkAtom.cpp \ + ../../../MsBinaryFile/PptFile/Records/ExMIDIAudioContainer.cpp \ + ../../../MsBinaryFile/PptFile/Records/ExMediaAtom.cpp \ + ../../../MsBinaryFile/PptFile/Records/ExObjListAtom.cpp \ + ../../../MsBinaryFile/PptFile/Records/ExObjListContainer.cpp \ + ../../../MsBinaryFile/PptFile/Records/ExObjRefAtom.cpp \ + ../../../MsBinaryFile/PptFile/Records/ExOleEmbedAtom.cpp \ + ../../../MsBinaryFile/PptFile/Records/ExOleLinkAtom.cpp \ + ../../../MsBinaryFile/PptFile/Records/ExOleObjAtom.cpp \ + ../../../MsBinaryFile/PptFile/Records/ExVideoContainer.cpp \ + ../../../MsBinaryFile/PptFile/Records/ExWAVAudioEmbeddedContainer.cpp \ + ../../../MsBinaryFile/PptFile/Records/ExWAVAudioLinkContainer.cpp \ + ../../../MsBinaryFile/PptFile/Records/FontCollection10Container.cpp \ + ../../../MsBinaryFile/PptFile/Records/FontEmbedFlags10Atom.cpp \ + ../../../MsBinaryFile/PptFile/Records/FontEntityAtom.cpp \ + ../../../MsBinaryFile/PptFile/Records/GridSpacing10Atom.cpp \ + ../../../MsBinaryFile/PptFile/Records/GuideAtom.cpp \ + ../../../MsBinaryFile/PptFile/Records/HeadersFootersAtom.cpp \ + ../../../MsBinaryFile/PptFile/Records/InteractiveInfoAtom.cpp \ + ../../../MsBinaryFile/PptFile/Records/KinsokuAtom.cpp \ + ../../../MsBinaryFile/PptFile/Records/KinsokuContainer.cpp \ + ../../../MsBinaryFile/PptFile/Records/KinsokuFollowingAtom.cpp \ + ../../../MsBinaryFile/PptFile/Records/KinsokuLeadingAtom.cpp \ + ../../../MsBinaryFile/PptFile/Records/LinkedShape10Atom.cpp \ + ../../../MsBinaryFile/PptFile/Records/LinkedSlide10Atom.cpp \ + ../../../MsBinaryFile/PptFile/Records/MasterPersistAtom.cpp \ + ../../../MsBinaryFile/PptFile/Records/MasterTextPropAtom.cpp \ + ../../../MsBinaryFile/PptFile/Records/MetafileBlob.cpp \ + ../../../MsBinaryFile/PptFile/Records/MouseInteractiveInfoContainer.cpp \ + ../../../MsBinaryFile/PptFile/Records/MouseTextInteractiveInfoAtom.cpp \ + ../../../MsBinaryFile/PptFile/Records/NamedShowSlidesAtom.cpp