[prev in list] [next in list] [prev in thread] [next in thread]
List: koffice-devel
Subject: Regarding mso ppttoxml parse trailing byte error
From: amit aggarwal <amitcs06 () gmail ! com>
Date: 2010-03-28 8:23:01
Message-ID: 203ea2fe1003280111u445f24f8i46f693160aab04a7 () mail ! gmail ! com
[Download RAW message or body]
Hello,
I am facing in ppttoxml trailing bytes error for the attached ppt.
During analysis found couple of error in mso.xml but still not able to
found the correct problem.
10601 SlideProgTagsContainer "RecordHeader:recVer: 15(F),
recInstance: 0(0), recType: 5000(1388), recLen: 101(65), "
10609 SlideProgBinaryTagContainer "RecordHeader:recVer: 15(F),
recInstance: 0(0), recType: 5002(138A), recLen: 41(29), "
10617 PP10SlideBinaryTagExtension "RecordHeader:recVer: 0(0),
recInstance: 0(0), recType: 4026(FBA), recLen: 16(10), "
10641 PP10SlideBinaryTagExtension "RecordHeader:recVer: 0(0),
recInstance: 0(0), recType: 4026(FBA), recLen: 16(10), "
188954 trailing bytes in stream "PowerPoint Document"
Please help me for the same.
--
Thanks
Amit Aggarwal
["test.ppt" (application/vnd.ms-powerpoint)]
["mso.xml" (text/xml)]
<?xml version="1.0" encoding="UTF-8"?>
<mso xmlns="http://www.example.org/mso" \
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" \
xsi:schemaLocation="http://www.example.org/mso mso.xsd"> <struct \
name="RecordHeader"> <uint4 name="recVer" />
<uint12 name="recInstance" />
<uint16 name="recType">
<!--
this limitation helps debugging
-->
<limitation expression=">0" />
</uint16>
<uint32 name="recLen" />
</struct>
<struct name="CurrentUserAtom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0x0FF6" />
</type>
<uint32 name="size">
<limitation value="0x14" />
</uint32>
<uint32 name="headerToken">
<limitation value="0xE391C05F|0xF3D1C4DF" />
</uint32>
<uint32 name="offsetToCurrentEdit" />
<uint16 name="lenUserName">
<limitation expression="<=255" />
</uint16>
<uint16 name="docFileVersion">
<limitation value="0x03F4" />
</uint16>
<uint8 name="majorVersion">
<limitation value="0x03" />
</uint8>
<uint8 name="minorVersion">
<limitation value="0x00" />
</uint8>
<uint16 name="unused" />
<uint8 name="ansiUserName" count="lenUserName" />
<uint32 name="relVersion">
<limitation value="0x8|0x9" />
</uint32>
<uint16 name="unicodeUserName" count="lenUserName"
condition="rh.recLen>3*lenUserName+0x18" />
<uint8 name="unknown" count="rh.recLen-0x18-3*lenUserName"
condition="rh.recLen-0x18-3*lenUserName>0" />
</struct>
<struct name="TODOS">
<type name="anon" type="Byte" array="true" />
</struct>
<struct name="Byte">
<uint8 name="b" />
</struct>
<struct name="CurrentUserStream">
<type name="anon1" type="CurrentUserAtom" />
<type name="trailing" type="Byte" array="true" />
</struct>
<struct name="PicturesStream">
<type name="anon1" type="OfficeArtBStoreDelay" />
<type name="trailing" type="Byte" array="true" />
</struct>
<struct name="OfficeArtBStoreDelay">
<type name="anon1" array="true" type="OfficeArtBStoreContainerFileBlock" />
</struct>
<struct name="OfficeArtRecordHeader">
<uint4 name="recVer" />
<uint12 name="recInstance" />
<uint16 name="recType" />
<uint32 name="recLen" />
</struct>
<struct name="OfficeArtFBSE">
<type name="rh" type="OfficeArtRecordHeader">
<limitation name="recVer" value="0x2" />
<limitation name="recInstance" value="0|1|2|3|4|5|6|7|0x11|0x12" />
<!--
<limitation name="recInstance"
value="0xF01A|0xF01B|0xF01C|0xF01D|0xF01E|0xF01F|0xF029" />
-->
<limitation name="recType" value="0xF007" />
</type>
<uint8 name="btWin32" />
<uint8 name="btMacOS" />
<uint8 name="rgbUid" count="16" />
<uint16 name="tag" />
<uint32 name="size" />
<uint32 name="cRef" />
<uint32 name="foDelay" />
<uint8 name="unused1" />
<uint8 name="cbName" />
<uint8 name="unused2" />
<uint8 name="unused3" />
<uint8 name="nameData" count="cbName" condition="cbName>0" />
<type name="embeddedBlip" type="OfficeArtBlip" condition="rh.recLen > 36 + \
cbName"> <!--
this limitation is currently not supported because it requires
dynamic introspection <limitation name="rh.recInstance"
value="rh.recInstance" />
-->
</type>
</struct>
<struct name="OfficeArtBlipEMF">
<type name="rh" type="OfficeArtRecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0x3D4|0x3D5" />
<limitation name="recType" value="0xF01A" />
</type>
<uint8 name="rgbUid1" count="16" />
<uint8 name="rgbUid2" count="16" condition="rh.recInstance == 0x3D5" />
<type name="metafileHeader" type="OfficeArtMetafileHeader" />
<uint8 name="BLIPFileData" count="rh.recLen-((rh.recInstance==0x3D4)?50:66)" />
</struct>
<struct name="OfficeArtBlipWMF">
<type name="rh" type="OfficeArtRecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0x216|0x217" />
<limitation name="recType" value="0xF01B" />
</type>
<uint8 name="rgbUid1" count="16" />
<uint8 name="rgbUid2" count="16" condition="rh.recInstance == 0x217" />
<type name="metafileHeader" type="OfficeArtMetafileHeader" />
<uint8 name="BLIPFileData" count="rh.recLen-((rh.recInstance==0x216)?50:66)" />
</struct>
<struct name="OfficeArtBlipPICT">
<type name="rh" type="OfficeArtRecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0x542|0x543" />
<limitation name="recType" value="0xF01C" />
</type>
<uint8 name="rgbUid1" count="16" />
<uint8 name="rgbUid2" count="16" condition="rh.recInstance == 0x543" />
<type name="metafileHeader" type="OfficeArtMetafileHeader" />
<uint8 name="BLIPFileData" count="rh.recLen-((rh.recInstance==0x542)?50:66)" />
</struct>
<struct name="OfficeArtBlipJPEG">
<type name="rh" type="OfficeArtRecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0x46A|0x46B|0x6E2|0x6E3" />
<limitation name="recType" value="0xF01D" />
</type>
<uint8 name="rgbUid1" count="16" />
<uint8 name="rgbUid2" count="16"
condition="rh.recInstance == 0x46B || rh.recInstance == 0x6E3" />
<uint8 name="tag" />
<uint8 name="BLIPFileData"
count="rh.recLen-((rh.recInstance == 0x46A || rh.recInstance == 0x6E2)?17:33)" />
</struct>
<struct name="OfficeArtBlipPNG">
<type name="rh" type="OfficeArtRecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0x6E0|0x6E1" />
<limitation name="recType" value="0xF01E" />
</type>
<uint8 name="rgbUid1" count="16" />
<uint8 name="rgbUid2" count="16" condition="rh.recInstance == 0x6E1" />
<uint8 name="tag" />
<uint8 name="BLIPFileData" count="rh.recLen-((rh.recInstance==0x6E0)?17:33)" />
</struct>
<struct name="OfficeArtBlipDIB">
<type name="rh" type="OfficeArtRecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0x7A8|0x7A9" />
<limitation name="recType" value="0xF01F" />
</type>
<uint8 name="rgbUid1" count="16" />
<uint8 name="rgbUid2" count="16" condition="rh.recInstance == 0x7A9" />
<uint8 name="tag" />
<uint8 name="BLIPFileData" count="rh.recLen-((rh.recInstance==0x7A8)?17:33)" />
</struct>
<struct name="OfficeArtBlipTIFF">
<type name="rh" type="OfficeArtRecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0x6E4|0x6E5" />
<limitation name="recType" value="0xF020" />
</type>
<uint8 name="rgbUid1" count="16" />
<uint8 name="rgbUid2" count="16" condition="rh.recInstance == 0x6E5" />
<uint8 name="tag" />
<uint8 name="BLIPFileData" count="rh.recLen-((rh.recInstance==0x6E4)?17:33)" />
</struct>
<struct name="OfficeArtMetafileHeader">
<uint32 name="cbSize" />
<type name="rcBounds" type="RECT" />
<type name="ptSize" type="POINT" />
<uint32 name="cbsave" />
<uint8 name="compression" />
<uint8 name="filter" />
</struct>
<struct name="RECT">
<int32 name="left" />
<int32 name="top" />
<int32 name="right" />
<int32 name="bottom" />
</struct>
<struct name="POINT">
<int32 name="x" />
<int32 name="y" />
</struct>
<struct name="OfficeArtBlip">
<choice name="anon">
<type type="OfficeArtBlipEMF" />
<type type="OfficeArtBlipWMF" />
<type type="OfficeArtBlipPICT" />
<type type="OfficeArtBlipJPEG" />
<type type="OfficeArtBlipPNG" />
<type type="OfficeArtBlipDIB" />
<type type="OfficeArtBlipTIFF" />
</choice>
</struct>
<struct name="OfficeArtBStoreContainerFileBlock">
<choice name="anon">
<type type="OfficeArtFBSE" />
<type type="OfficeArtBlip" />
</choice>
</struct>
<struct name="PowerPointStructs">
<type name="anon" type="PowerPointStruct" array="true" />
</struct>
<struct name="PowerPointStruct">
<choice name="anon">
<type type="DocumentContainer" />
<type type="MasterOrSlideContainer" />
<type type="PersistDirectoryAtom" />
<type type="NotesContainer" />
<type type="HandoutContainer" />
<type type="SlideContainer" />
<type type="ExOleObjStg" />
<type type="ExControlStg" />
<type type="VbaProjectStg" />
<type type="UserEditAtom" />
</choice>
</struct>
<struct name="DocumentContainer">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0xF" />
<limitation name="recInstance" value="0x0" />
<limitation name="recType" value="0x03E8" />
</type>
<type name="documentAtom" type="DocumentAtom" />
<type name="exObjList" type="ExObjListContainer" optional="true" />
<type name="documentTextInfo" type="DocumentTextInfoContainer" />
<type name="soundCollection" type="SoundCollectionContainer"
optional="true" />
<type name="drawingGroup" type="DrawingGroupContainer" />
<type name="masterList" type="MasterListWithTextContainer" />
<type name="docInfoList" type="DocInfoListContainer" optional="true" />
<type name="slideHF" type="SlideHeadersFootersContainer"
optional="true" />
<type name="notesHF" type="NotesHeadersFootersContainer"
optional="true" />
<type name="slideList" type="SlideListWithTextContainer"
optional="true" />
<!--
occurrence of a SlideHeadersFootersContainer after slideList is not
documented
-->
<type name="slideHF2" type="SlideHeadersFootersContainer"
optional="true" />
<type name="notesList" type="NotesListWithTextContainer"
optional="true" />
<type name="slideShowDocInfoAtom" type="SlideShowDocInfoAtom"
optional="true" />
<type name="namedShows" type="NamedShowsContainer" optional="true" />
<type name="summary" type="SummaryContainer" optional="true" />
<type name="docRoutingSlipAtom" type="DocRoutingSlipAtom"
optional="true" />
<type name="printOptionsAtom" type="PrintOptionsAtom" optional="true" />
<type name="unknown0" type="UnknownDocumentContainerChild" array="true" />
<type name="rtCustomTableStylesAtom1" type="RoundTripCustomTableStyles12Atom"
optional="true" />
<type name="unknown1" type="UnknownDocumentContainerChild" array="true" />
<type name="endDocumentAtom" type="EndDocumentAtom" />
<type name="unknown2" type="UnknownDocumentContainerChild" array="true" />
<type name="rtCustomTableStylesAtom2" type="RoundTripCustomTableStyles12Atom"
optional="true" />
<type name="unknown4" type="UnknownDocumentContainerChild" array="true" />
<type name="unknown5" type="TextMasterStyle10Atom" optional="true" />
</struct>
<struct name="SoundCollectionContainer">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0xF" />
<!--
must be 5 according to the documentation, but a value of 0 has been
observed
-->
<limitation name="recInstance" value="0|5" />
<limitation name="recType" value="0x7E4" />
</type>
<type name="soundCollectionAtom" type="SoundCollectionAtom" />
<type name="rgSoundContainer" type="SoundContainer" array="true"
size="rh.recLen-12" />
</struct>
<struct name="SoundCollectionAtom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0x7e5" />
<limitation name="recLen" value="4" />
</type>
<uint32 name="soundIdSeed" />
</struct>
<struct name="SlideHeadersFootersContainer">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0xF" />
<limitation name="recInstance" value="3" />
<limitation name="recType" value="0xFD9" />
</type>
<type name="hfAtom" type="HeadersFootersAtom" />
<type name="userDateAtom" type="UserDateAtom" optional="true" />
<type name="footerAtom" type="FooterAtom" optional="true" />
</struct>
<struct name="NotesHeadersFootersContainer">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0xF" />
<limitation name="recInstance" value="4" />
<limitation name="recType" value="0xFD9" />
</type>
<type name="hfAtom" type="HeadersFootersAtom" />
<type name="userDateAtom" type="UserDateAtom" optional="true" />
<type name="headerAtom" type="HeaderAtom" optional="true" />
<type name="footerAtom" type="FooterAtom" optional="true" />
</struct>
<struct name="HeadersFootersAtom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0xFDA" />
<limitation name="recLen" value="4" />
</type>
<int16 name="formatId">
<limitation expression=">=0" />
<limitation expression="<=13" />
</int16>
<bit name="fHasDate" />
<bit name="fHasTodayDate" />
<bit name="fHasUserDate" />
<bit name="fHasSlideNumber" />
<bit name="fHasHeader" />
<bit name="fHasFooter" />
<uint2 name="reserved1" />
<uint8 name="reserved2" />
</struct>
<struct name="UserDateAtom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0xFBA" />
<limitation name="recLen" expression="%2==0" />
<limitation name="recLen" expression="<=510" />
</type>
<uint16 name="userDate" count="rh.recLen/2" />
</struct>
<struct name="HeaderAtom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="1" />
<limitation name="recType" value="0xFBA" />
<limitation name="recLen" expression="%2==0" />
</type>
<uint16 name="header" count="rh.recLen/2" />
</struct>
<struct name="FooterAtom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="2" />
<limitation name="recType" value="0xFBA" />
<limitation name="recLen" expression="%2==0" />
</type>
<uint16 name="footer" count="rh.recLen/2" />
</struct>
<struct name="PerSlideHeadersFootersContainer">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0xF" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0xFD9" />
</type>
<type name="hfAtom" type="HeadersFootersAtom" />
<type name="userDateAtom" type="UserDateAtom" optional="true" />
<!--
according to Microsoft documentation, there should be no headerAtom
in this struct, however in some ... documents add one. Adding it as
an optional field here still allows such files to be parsed.
-->
<type name="headerAtom" type="HeaderAtom" optional="true" />
<type name="footerAtom" type="FooterAtom" optional="true" />
<!--
according to Microsoft documentation, the userDateAtom must precede
footerAtom, however in some ... documents their order is swapped.
userDateAtom2 allows such files to still be parsed.
-->
<type name="userDateAtom2" type="UserDateAtom" optional="true" />
</struct>
<struct name="EndDocumentAtom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0x3EA" />
<limitation name="recLen" value="0" />
</type>
</struct>
<struct name="DocInfoListContainer">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0xF" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0x7D0" />
</type>
<type name="rgChildRec" type="DocInfoListSubContainerOrAtom"
array="true" />
</struct>
<struct name="DocInfoListSubContainerOrAtom">
<choice name="anon">
<type type="DocProgTagsContainer" />
<type type="NormalViewSetInfoContainer" />
<type type="NotesTextViewInfoContainer" />
<type type="OutlineViewInfoContainer" />
<type type="SlideViewInfoInstance" />
<type type="SorterViewInfoContainer" />
<type type="VBAInfoContainer" />
</choice>
</struct>
<struct name="SlideViewInfoInstance">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0xF" />
<limitation name="recInstance" value="0|1" />
<limitation name="recType" value="0x3FA" />
</type>
<type name="slideViewInfoAtom" type="SlideViewInfoAtom" />
<type name="zoomViewInfoAtom" type="ZoomViewInfoAtom" />
<type name="rgGuideAtom" type="GuideAtom" array="true" />
</struct>
<struct name="SlideViewInfoAtom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0x3FE" />
<limitation name="recLen" value="3" />
</type>
<uint8 name="unused1" />
<uint8 name="fSnapToGrid" />
<uint8 name="fSnapToShape" />
</struct>
<struct name="ZoomViewInfoAtom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0x3FD" />
<limitation name="recLen" value="0x34" />
</type>
<type name="curScale" type="ScalingStruct" />
<uint8 name="unused1" count="24" />
<type name="origin" type="PointStruct" />
<uint8 name="fUseVarScale">
<limitation value="0|1" />
</uint8>
<uint8 name="fDraftMode" />
<uint16 name="unused2" />
</struct>
<struct name="ScalingStruct">
<type name="x" type="RatioStruct" />
<type name="y" type="RatioStruct" />
</struct>
<struct name="GuideAtom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="7" />
<limitation name="recType" value="0x3FB" />
<limitation name="recLen" value="8" />
</type>
<uint32 name="type">
<limitation value="0|1" />
</uint32>
<int32 name="pos">
<limitation expression=">=-15840" />
<limitation expression="<=32255" />
</int32>
</struct>
<struct name="DocProgTagsContainer">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0xF" />
<limitation name="recInstance" value="0|1" />
<limitation name="recType" value="0x1388" />
</type>
<type name="rgChildRec" type="DocProgTagsSubContainerOrAtom"
array="true" size="rh.recLen" />
</struct>
<struct name="DocProgTagsSubContainerOrAtom">
<choice name="anon">
<type type="ProgStringTagContainer" />
<type type="DocProgBinaryTagContainer" />
</choice>
</struct>
<struct name="DocProgBinaryTagContainer">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0xF" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0x138A" />
</type>
<type name="rec" type="DocProgBinaryTagSubContainerOrAtom" />
</struct>
<struct name="DocProgBinaryTagSubContainerOrAtom">
<choice name="anon">
<type name="__PPT9" type="PP9DocBinaryTagExtension" />
<type name="__PPT10" type="PP10DocBinaryTagExtension" />
<type name="__PPT11" type="PP11DocBinaryTagExtension" />
<type name="__PPT12" type="PP12DocBinaryTagExtension" />
<type name="__unknown" type="UnknownBinaryTag" />
</choice>
</struct>
<struct name="PP9DocBinaryTagExtension">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0x0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0x0FBA" />
<limitation name="recLen" value="0x0E" />
</type>
<uint8 name="tagName" count="14" />
<type name="rhData" type="RecordHeader">
<limitation name="recVer" value="0x0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0x138B" />
</type>
<type name="rgTextMasterStyle9" type="TextMasterStyle9Atom"
array="true" />
<type name="blipCollectionContainer" type="BlipCollection9Container"
optional="true" />
<type name="textDefaultsAtom" type="TextDefaults9Atom" optional="true" />
<type name="kinsokuContainer" type="Kinsoku9Container" optional="true" />
<type name="rgExternalHyperlink9" type="ExHyperlink9Container"
array="true" />
<type name="presAdvisorFlagsAtom" type="PresAdvisorFlags9Atom"
optional="true" />
<type name="envelopeDataAtom" type="EnvelopeData9Atom" optional="true" />
<type name="envelopeFlagsAtom" type="EnvelopeFlags9Atom"
optional="true" />
<type name="htmlDocInfoAtom" type="HTMLDocInfo9Atom" optional="true" />
<type name="htmlPublishInfoAtom" type="HTMLPublishInfo9Container"
optional="true" />
<type name="rgBroadcastDocInfo9" type="BroadcastDocInfo9Container"
array="true" />
<type name="outlineTextPropsContainer" type="OutlineTextProps9Container"
optional="true" />
</struct>
<struct name="TextMasterStyle9Atom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0x0" />
<limitation name="recInstance" value="0|1|2|3|4|5|6|7|8" />
<limitation name="recType" value="0x0FAD" />
</type>
<uint16 name="cLevels">
<limitation expression="<=5" />
</uint16>
<type name="lstLvl1" type="TextMasterStyle9Level" condition="cLevels>0" />
<type name="lstLvl2" type="TextMasterStyle9Level" condition="cLevels>1" />
<type name="lstLvl3" type="TextMasterStyle9Level" condition="cLevels>2" />
<type name="lstLvl4" type="TextMasterStyle9Level" condition="cLevels>3" />
<type name="lstLvl5" type="TextMasterStyle9Level" condition="cLevels>4" />
</struct>
<struct name="TextMasterStyle9Level">
<type name="pf9" type="TextPFException9" />
<type name="cf9" type="TextCFException9" />
</struct>
<struct name="TextPFException9">
<type name="masks" type="PFMasks">
<limitation name="hasBullet" value="false" />
<limitation name="bulletHasFont" value="false" />
<limitation name="bulletHasColor" value="false" />
<limitation name="bulletHasSize" value="false" />
<limitation name="bulletFont" value="false" />
<limitation name="bulletColor" value="false" />
<limitation name="bulletSize" value="false" />
<limitation name="bulletChar" value="false" />
<limitation name="leftMargin" value="false" />
<limitation name="indent" value="false" />
<limitation name="align" value="false" />
<limitation name="lineSpacing" value="false" />
<limitation name="spaceBefore" value="false" />
<limitation name="spaceAfter" value="false" />
<limitation name="defaultTabSize" value="false" />
<limitation name="fontAlign" value="false" />
<limitation name="charWrap" value="false" />
<limitation name="wordWrap" value="false" />
<limitation name="overflow" value="false" />
<limitation name="tabStops" value="false" />
<limitation name="textDirection" value="false" />
</type>
<uint16 name="bulletBlipRef" condition="masks.bulletBlip" />
<uint16 name="fBulletHasAutoNumber" condition="masks.bulletHasScheme">
<limitation value="0|1" />
</uint16>
<type name="bulletAutoNumberScheme" condition="masks.bulletScheme"
type="TextAutoNumberScheme" />
</struct>
<struct name="TextAutoNumberScheme">
<uint16 name="scheme">
<limitation
value="0x0000|0x0001|0x0002|0x0003|0x0004|0x0005|0x0006|0x0007|0x0008" />
</uint16>
<uint16 name="startNum">
<limitation expression=">=1" />
</uint16>
</struct>
<struct name="TextCFException9">
<type name="masks" type="CFMasks">
<limitation name="bold" value="false" />
<limitation name="italic" value="false" />
<limitation name="underline" value="false" />
<limitation name="shadow" value="false" />
<limitation name="fehint" value="false" />
<limitation name="kumi" value="false" />
<limitation name="emboss" value="false" />
<limitation name="reserved" value="0" />
<limitation name="typeface" value="false" />
<limitation name="size" value="false" />
<limitation name="color" value="false" />
<limitation name="position" value="false" />
<limitation name="oldEATypeface" value="false" />
<limitation name="ansiTypeface" value="false" />
<limitation name="symbolTypeface" value="false" />
<limitation name="newEATypeface" value="false" />
<limitation name="csTypeface" value="false" />
<limitation name="pp11ext" value="false" />
</type>
<uint4 name="pp10runid" condition="masks.pp10ext" />
<uint20 name="unuseda" condition="masks.pp10ext" />
<uint8 name="unusedb" condition="masks.pp10ext" />
</struct>
<struct name="BlipCollection9Container">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0xF" />
<limitation name="recInstance" value="0x0" />
<limitation name="recType" value="0x07F8" />
</type>
<type name="rgBlipEntityAtom" type="BlipEntityAtom" array="true"
size="rh.recLen" />
<!--
ToDo gBlipEntityAtom (variable): An array of BlipEntityAtom record
that specifies picture bullets. It MUST NOT contain more than one
BlipEntityAtom record with the same value of rh.recInstance.
-->
</struct>
<struct name="BlipEntityAtom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" expression="<=128" />
<limitation name="recType" value="0x07F9" />
</type>
<uint8 name="winBlipType">
<limitation value="0x02|0x03|0x05|0x06" />
</uint8>
<uint8 name="unused" />
<type name="blip" type="OfficeArtBStoreContainerFileBlock" />
</struct>
<struct name="TextDefaults9Atom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0x0" />
<limitation name="recInstance" value="0x00" />
<limitation name="recType" value="0x0FB0" />
</type>
<type name="cf9" type="TextCFException9" />
<type name="pf9" type="TextPFException9" />
</struct>
<struct name="Kinsoku9Container">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0xF" />
<limitation name="recInstance" value="0x2" />
<limitation name="recType" value="0x0FC8" />
</type>
<type name="kinsoku9Atom" type="Kinsoku9Atom" />
<!--
condition for this field is too complex so we just say it is optional
-->
<type name="kinsokuLeadingAtom" type="KinsokuLeadingAtom"
optional="true" />
<!--
condition for this field is too complex so we just say it is optional
-->
<type name="kinsokuFollowingAtom" type="KinsokuFollowingAtom"
optional="true" />
</struct>
<struct name="Kinsoku9Atom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0x0" />
<limitation name="recInstance" value="0x3" />
<limitation name="recType" value="0x0FD2" />
<limitation name="recLen" value="0x0004" />
</type>
<uint2 name="korLevel">
<limitation value="0x0|0x2" />
</uint2>
<uint2 name="scLevel">
<limitation value="0x0|0x2" />
</uint2>
<uint2 name="tcLevel">
<limitation value="0x0|0x2" />
</uint2>
<uint2 name="jpnLevel">
<limitation value="0x0|0x1|0x2" />
</uint2>
<uint4 name="reserveda">
<limitation value="0" />
</uint4>
<uint20 name="reservedb">
<limitation value="0" />
</uint20>
</struct>
<struct name="ExHyperlink9Container">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0xF" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0xFE4" />
</type>
<uint8 name="todo" count="rh.recLen" />
</struct>
<struct name="PresAdvisorFlags9Atom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0x0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0x177A" />
<limitation name="recLen" value="0x4" />
</type>
<bit name="fDisableCaseStyleTitleRule" />
<bit name="fDisableCaseStyleBodyRule" />
<bit name="fDisableEndPunctuationTitleRule" />
<bit name="fDisableEndPunctuationBodyRule" />
<bit name="fDisableTooManyBulletsRule" />
<bit name="fDisableFontSizeTitleRule" />
<bit name="fDisableFontSizeBodyRule" />
<bit name="fDisableNumberOfLinesTitleRule" />
<bit name="fDisableNumberOfLinesBodyRule" />
<bit name="fDisableTooManyFontsRule" />
<bit name="fDisablePrintTip" />
<uint5 name="reserveda">
<limitation value="0" />
</uint5>
<uint16 name="reservedb">
<limitation value="0" />
</uint16>
</struct>
<struct name="EnvelopeData9Atom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0x0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0x1785" />
</type>
<uint8 name="todo" count="rh.recLen" />
</struct>
<struct name="EnvelopeFlags9Atom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0x0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0x1784" />
<limitation name="recLen" value="4" />
</type>
<bit name="fHasEnvelope" />
<bit name="fEnvelopeVisible" />
<uint2 name="reserved1">
<limitation value="0" />
</uint2>
<bit name="fEnvelopeDirty" />
<uint3 name="reserved2a">
<limitation value="0" />
</uint3>
<uint8 name="reserved2b">
<limitation value="0" />
</uint8>
<uint16 name="reserved2c">
<limitation value="0" />
</uint16>
</struct>
<struct name="HTMLDocInfo9Atom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0x0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0x177B" />
<limitation name="recLen" value="0x10" />
</type>
<uint32 name="unused1" />
<uint32 name="encoding" />
<!--ToDo Encoding limitation -->
<uint16 name="frameColorType">
<limitation value="0|1|2|3|4|5" />
</uint16>
<uint8 name="screenSize" />
<uint8 name="unused2" />
<uint8 name="outputType" />
<bit name="fShowFrame" />
<bit name="fResizeGraphics" />
<bit name="fOrganizeInFolder" />
<bit name="fUseLongFileNames" />
<bit name="fRelyOnVML" />
<bit name="fAllowPNG" />
<bit name="fShowSlideAnimation" />
<bit name="reserved1">
<limitation value='false' />
</bit>
<uint16 name="unused3" />
</struct>
<struct name="HTMLPublishInfo9Container">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0xF" />
<limitation name="recInstance" value="0x0" />
<limitation name="recType" value="0x177D" />
</type>
<uint8 name="todo" count="rh.recLen" />
</struct>
<struct name="BroadcastDocInfo9Container">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0xF" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0x177E" />
</type>
<uint8 name="todo" count="rh.recLen" />
</struct>
<struct name="OutlineTextProps9Container">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0xF" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0x0FAE" />
</type>
<type name="rgOutlineTextProps9Entry" type="OutlineTextProps9Entry"
array="true" />
</struct>
<struct name="OutlineTextProps9Entry">
<type name="outlineTextHeaderAtom" type="OutlineTextPropsHeaderExAtom" />
<type name="styleTextProp9Atom" type="StyleTextProp9Atom" />
</struct>
<struct name="OutlineTextPropsHeaderExAtom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" expression="<=5" />
<limitation name="recType" value="0xFAF" />
</type>
<uint32 name="slideIdRef" />
<uint32 name="txType" />
</struct>
<struct name="StyleTextProp9Atom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0xFAC" />
</type>
<type name="rgStyleTextProp9" type="StyleTextProp9" array="true"
size="rh.recLen" />
</struct>
<struct name="StyleTextProp9">
<type name="pf9" type="TextPFException9" />
<type name="cf9" type="TextCFException9" />
<type name="si" type="TextSIException">
<limitation name="spell" value="false" />
<limitation name="lang" value="false" />
<limitation name="altLang" value="false" />
<limitation name="smartTag" value="false" />
</type>
</struct>
<struct name="PP10DocBinaryTagExtension">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0x0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0x0FBA" />
<limitation name="recLen" value="0x10" />
</type>
<uint8 name="tagName" count="16" />
<type name="rhData" type="RecordHeader">
<limitation name="recVer" value="0x0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0x138B" />
</type>
<type name="fontCollectionContainer" type="FontCollection10Container"
optional="true" />
<type name="rgTextMasterStyle10" type="TextMasterStyle10Atom"
array="true" />
<type name="textDefaultsAtom" type="TextDefaults10Atom" optional="true" />
<type name="gridSpacingAtom" type="GridSpacing10Atom" />
<type name="rgCommentIndex10" type="CommentIndex10Container"
array="true" />
<type name="fontEmbedFlagsAtom" type="FontEmbedFlags10Atom"
optional="true" />
<type name="copyrightAtom" type="CopyrightAtom" optional="true" />
<type name="keywordsAtom" type="KeywordsAtom" optional="true" />
<type name="filterPrivacyFlagsAtom" type="FilterPrivacyFlags10Atom"
optional="true" />
<type name="outlineTextPropsContainer" type="OutlineTextProps10Container"
optional="true" />
<type name="docToolbarStatesAtom" type="DocToolbarStates10Atom"
optional="true" />
<type name="slideListTableContainer" type="SlideListTable10Container"
optional="true" />
<type name="rgDiffTree10Container" type="DiffTree10Container"
optional="true" />
<type name="modifyPasswordAtom" type="ModifyPasswordAtom"
optional="true" />
<type name="photoAlbumInfoAtom" type="PhotoAlbumInfo10Atom"
optional="true" />
</struct>
<struct name="FontCollection10Container">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0xF" />
<limitation name="recInstance" value="0x0" />
<limitation name="recType" value="0x07D6" />
</type>
<!-- <uint8 name="todo" count="rh.recLen" /> -->
<type name="rgFontCollectionEntry" type="FontCollectionEntry"
array="true" size="rh.recLen" />
</struct>
<struct name="TextMasterStyle10Atom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0x0" />
<limitation name="recInstance" value="0|1|2|3|4|5|6|7|8" />
<limitation name="recType" value="0x0FB2" />
</type>
<uint16 name="cLevels">
<limitation expression="<=5" />
</uint16>
<!--
level field of TextMasterStyleLevel is put here, because its presence
depends on this structure and currently child access to parent
properties is not supported
-->
<uint16 name="lstLvl1level" condition="cLevels>0 && \
rh.recInstance>=5" /> <type name="lstLvl1" type="TextMasterStyle10Level" \
condition="cLevels>0" /> <uint16 name="lstLvl2level" condition="cLevels>1 \
&& rh.recInstance>=5" /> <type name="lstLvl2" \
type="TextMasterStyle10Level" condition="cLevels>1" /> <uint16 \
name="lstLvl3level" condition="cLevels>2 && rh.recInstance>=5" /> \
<type name="lstLvl3" type="TextMasterStyle10Level" condition="cLevels>2" /> \
<uint16 name="lstLvl4level" condition="cLevels>3 && rh.recInstance>=5" \
/> <type name="lstLvl4" type="TextMasterStyle10Level" condition="cLevels>3" />
<uint16 name="lstLvl5level" condition="cLevels>4 && \
rh.recInstance>=5" /> <type name="lstLvl5" type="TextMasterStyle10Level" \
condition="cLevels>4" /> </struct>
<struct name="TextMasterStyle10Level">
<type name="cf10" type="TextCFException10" />
</struct>
<struct name="TextCFException10">
<type name="masks" type="CFMasks">
<limitation name="bold" value="false" />
<limitation name="italic" value="false" />
<limitation name="underline" value="false" />
<limitation name="shadow" value="false" />
<limitation name="fehint" value="false" />
<limitation name="kumi" value="false" />
<limitation name="emboss" value="false" />
<limitation name="reserved" value="0" />
<limitation name="typeface" value="false" />
<limitation name="size" value="false" />
<limitation name="color" value="false" />
<limitation name="position" value="false" />
<limitation name="pp10ext" value="false" />
<limitation name="oldEATypeface" value="false" />
<limitation name="ansiTypeface" value="false" />
<limitation name="symbolTypeface" value="false" />
</type>
<!--ToDo check it is correct or not -->
<uint16 name="newEAFontRef" condition="masks.newEATypeface" />
<uint16 name="csFontRef" condition="masks.csTypeface" />
<uint32 name="pp11ext" condition="masks.pp11ext" />
</struct>
<struct name="TextDefaults10Atom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0x0" />
<limitation name="recInstance" value="0x0" />
<limitation name="recType" value="0x0FB4" />
</type>
<type name="cf10" type="TextCFException10" />
</struct>
<struct name="GridSpacing10Atom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0x0" />
<limitation name="recInstance" value="0x0" />
<limitation name="recType" value="0x040D" />
<limitation name="recLen" value="0x08" />
</type>
<uint32 name="x">
<limitation expression=">=23224" />
<limitation expression="<=1179648" />
</uint32>
<uint32 name="y">
<!--
TODO: fix generator to handle this expression <limitation
expression="x==y" />
-->
<limitation expression=">=23224" />
<limitation expression="<=1179648" />
</uint32>
</struct>
<struct name="CommentIndex10Container">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0xF" />
<limitation name="recInstance" value="0x0" />
<limitation name="recType" value="0x2EE4" />
</type>
<type name="authorNameAtom" type="AuthorNameAtom" optional="true" />
<type name="authorIndexAtom" type="CommentIndex10Atom" optional="true" />
</struct>
<struct name="AuthorNameAtom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0x0" />
<limitation name="recInstance" value="0x0" />
<limitation name="recType" value="0x0FBA" />
<limitation name="recLen" expression="<=104" />
<limitation name="recLen" expression="%2==0" />
</type>
<uint8 name="authorName" count="rh.recLen" />
</struct>
<struct name="CommentIndex10Atom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0x0" />
<limitation name="recInstance" value="0x0" />
<limitation name="recType" value="0x2EE5" />
<limitation name="recLen" value="0x08" />
</type>
<int32 name="colorIndex">
<limitation expression=">=0" />
</int32>
<int32 name="commentIndexSeed">
<limitation expression=">=0" />
<!-- To Do limitation seems tough to do -->
</int32>
</struct>
<struct name="FontEmbedFlags10Atom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0x0" />
<limitation name="recInstance" value="0x0" />
<limitation name="recType" value="0x32C8" />
<limitation name="recLen" value="0x04" />
</type>
<bit name="fSubset" />
<bit name="fSubsetOptionConfirmed" />
<uint14 name="unuseda" />
<uint16 name="unusedb" />
</struct>
<struct name="CopyrightAtom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0x0" />
<limitation name="recInstance" value="0x1" />
<limitation name="recType" value="0x0FBA" />
<limitation name="recLen" expression="<=510" />
<limitation name="recLen" expression="%2==0" />
</type>
<uint8 name="copyright" count="rh.recLen" />
</struct>
<struct name="KeywordsAtom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0x0" />
<limitation name="recInstance" value="0x2" />
<limitation name="recType" value="0x0FBA" />
<limitation name="recLen" expression="<=510" />
<limitation name="recLen" expression="%2==0" />
</type>
<uint8 name="keywords" count="rh.recLen" />
</struct>
<struct name="FilterPrivacyFlags10Atom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0x0" />
<limitation name="recInstance" value="0x0" />
<limitation name="recType" value="0x36B0" />
<limitation name="recLen" value="0x04" />
</type>
<bit name="fRemovePII" />
<uint7 name="reserved2a">
<limitation value="0x0" />
</uint7>
<uint8 name="reserved2b">
<limitation value="0x0" />
</uint8>
<uint16 name="reserved2c">
<limitation value="0x0" />
</uint16>
</struct>
<struct name="OutlineTextProps10Container">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0xF" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0x0FB3" />
</type>
<type name="rgOutlineTextProps10Entry" type="OutlineTextProps10Entry"
array="true" />
</struct>
<struct name="OutlineTextProps10Entry">
<type name="outlineTextHeaderAtom" type="OutlineTextPropsHeaderExAtom" />
<type name="styleTextProp10Atom" type="StyleTextProp10Atom" />
</struct>
<struct name="StyleTextProp10Atom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0x0" />
<limitation name="recType" value="0xFB1" />
</type>
<type name="rgStyleTextProp10" type="TextCFException10" array="true" />
</struct>
<struct name="DocToolbarStates10Atom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0x0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0x36B1" />
<limitation name="recLen" value="0x01" />
</type>
<bit name="fShowReviewingToolbar" />
<bit name="fShowReviewingGallery" />
<uint6 name="reserved">
<limitation value="0x0" />
</uint6>
</struct>
<struct name="SlideListTable10Container">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0xF" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0x2EF1" />
</type>
<uint8 name="todo" count="rh.recLen" />
</struct>
<struct name="DiffTree10Container">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0xF" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0x2EEC" />
</type>
<uint8 name="todo" count="rh.recLen" />
</struct>
<struct name="ModifyPasswordAtom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0x0" />
<limitation name="recInstance" value="0x03" />
<limitation name="recType" value="0x0FBA" />
<limitation name="recLen" expression="<=510" />
<limitation name="recLen" expression="%2==0" />
</type>
<uint8 name="modifyPassword" count="rh.recLen" />
</struct>
<struct name="PhotoAlbumInfo10Atom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0x0" />
<limitation name="recInstance" value="0x0" />
<limitation name="recType" value="0x036B2" />
<limitation name="recLen" value="0x06" />
</type>
<uint8 name="fUseBlackWhite" />
<uint8 name="fHasCaption" />
<uint8 name="layout">
<limitation value="0|1|2|3|4|5|6" />
</uint8>
<uint8 name="unused" />
<uint16 name="frameShape">
<limitation value="0x0000|0x0001|0x0002|0x0003|0x0004|0x0005|0x0006" />
</uint16>
</struct>
<struct name="PP11DocBinaryTagExtension">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0x0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0x0FBA" />
<limitation name="recLen" value="0x10" />
</type>
<uint8 name="tagName" count="16" />
<type name="rhData" type="RecordHeader">
<limitation name="recVer" value="0x0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0x138B" />
</type>
<type name="smartTagStore11" type="SmartTagStore11Container" />
<type name="outlineTextProps" type="OutlineTextProps11Container" />
</struct>
<struct name="SmartTagStore11Container">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0xF" />
<limitation name="recInstance" value="0x0" />
<limitation name="recType" value="0x36B3" />
</type>
<uint8 name="todo" count="rh.recLen" />
</struct>
<struct name="OutlineTextProps11Container">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0xF" />
<limitation name="recInstance" value="0x0" />
<limitation name="recType" value="0x0FB5" />
</type>
<uint8 name="todo" count="rh.recLen" />
</struct>
<struct name="UnknownBinaryTag">
<type name="tagNameAtom" type="TagNameAtom" />
<type name="tagData" type="BinaryTagDataBlob" />
</struct>
<struct name="BinaryTagDataBlob">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0x0" />
<limitation name="recInstance" value="0x0" />
<limitation name="recType" value="0x138B" />
</type>
<uint8 name="data" count="rh.recLen" />
</struct>
<struct name="PP12DocBinaryTagExtension">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0x0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0x0FBA" />
<limitation name="recLen" value="0x10" />
</type>
<uint8 name="tagName" count="16" />
<type name="rhData" type="RecordHeader">
<limitation name="recVer" value="0x0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0x138B" />
</type>
<uint8 name="todo" count="rhData.recLen" />
</struct>
<struct name="NotesTextViewInfoContainer">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0xF" />
<limitation name="recInstance" value="1" />
<limitation name="recType" value="0x413" />
</type>
<type name="zoomViewInfo" type="ZoomViewInfoAtom" />
</struct>
<struct name="OutlineViewInfoContainer">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0xF" />
<!-- OpenOffice writes 0 here. -->
<limitation name="recInstance" value="0|1" />
<limitation name="recType" value="0x407" />
</type>
<type name="noZoomViewInfo" type="NoZoomViewInfoAtom" />
</struct>
<struct name="NoZoomViewInfoAtom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0x3FD" />
<limitation name="recLen" value="0x34" />
</type>
<type name="curScale" type="ScalingStruct" />
<uint8 name="unused1" count="24" />
<type name="origin" type="PointStruct" />
<uint8 name="unused2" />
<uint8 name="fDraftMode" />
<uint16 name="unused3" />
</struct>
<struct name="SorterViewInfoContainer">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0xF" />
<limitation name="recInstance" value="1" />
<limitation name="recType" value="0x408" />
</type>
<uint8 name="todo" count="rh.recLen" />
</struct>
<struct name="VBAInfoContainer">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0xF" />
<limitation name="recInstance" value="1" />
<limitation name="recType" value="0x3FF" />
<limitation name="recLen" value="0x14" />
</type>
<type name="vbaInfoAtom" type="VBAInfoAtom" />
</struct>
<struct name="VBAInfoAtom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="2" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0x400" />
<limitation name="recLen" value="0xC" />
</type>
<uint32 name="persistIdRef" />
<uint32 name="fHasMacros">
<limitation value="0|1" />
</uint32>
<uint32 name="version">
<!-- OpenOffice writes 0 or 1 instead of 2 -->
<limitation value="0|1|2" />
</uint32>
</struct>
<struct name="NormalViewSetInfoContainer">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0xF" />
<limitation name="recInstance" value="1" />
<limitation name="recType" value="0x414" />
<limitation name="recLen" value="0x1C" />
</type>
<type name="normalViewSetInfoAtom" type="NormalViewSetInfoAtom" />
</struct>
<struct name="NormalViewSetInfoAtom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0x415" />
<limitation name="recLen" value="0x14" />
</type>
<type name="leftPortion" type="RatioStruct">
<!--
This is not true in a sample doc <limitation
expression="numer*denom>=0" /> <limitation
expression="denom/numer>=1" />
-->
</type>
<type name="topPortion" type="RatioStruct">
<!--
This is not true in a sample doc <limitation
expression="numer*denom>=0" /> <limitation
expression="denom/numer>=1" />
-->
</type>
<uint8 name="vertBarState" />
<uint8 name="horizBarState" />
<uint8 name="fPreferSingleSet">
<limitation value="0|1" />
</uint8>
<bit name="fHideThumbnails" />
<bit name="fBarSnapped" />
<uint6 name="reserved">
<limitation value="0" />
</uint6>
</struct>
<struct name="MasterListWithTextContainer">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0xF" />
<limitation name="recInstance" value="0x1" />
<limitation name="recType" value="0x0FF0" />
<limitation name="recLen" expression="%28==0" />
</type>
<type name="rgMasterPersistAtom" type="MasterPersistAtom" count="rh.recLen/28" />
</struct>
<struct name="MasterPersistAtom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0x3F3" />
<limitation name="recLen" value="0x14" />
</type>
<uint32 name="persistIdRef" />
<uint2 name="reserved1">
<limitation value="0" />
</uint2>
<bit name="fNonOutLineData" />
<uint5 name="reserved2">
<limitation value="0" />
</uint5>
<uint8 name="reserved3">
<limitation value="0" />
</uint8>
<uint16 name="reserved4">
<limitation value="0" />
</uint16>
<uint32 name="reserved5">
<limitation value="0" />
</uint32>
<uint32 name="masterId" />
<uint32 name="reserved6">
<limitation value="0" />
</uint32>
</struct>
<struct name="SlideListWithTextContainer">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0xF" />
<limitation name="recInstance" value="0x0" />
<limitation name="recType" value="0x0FF0" />
</type>
<type name="rgChildRec" type="SlideListWithTextSubContainerOrAtom"
array="true" />
</struct>
<struct name="NotesListWithTextContainer">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0xF" />
<limitation name="recInstance" value="2" />
<limitation name="recType" value="0x0FF0" />
</type>
<type name="rgNotesPersistAtom" type="NotesPersistAtom" array="true" />
</struct>
<struct name="NotesPersistAtom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0x0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0x03F3" />
<limitation name="recLen" value="0x14" />
</type>
<uint32 name="persistIdRef" />
<uint2 name="reserved1">
<limitation value="0" />
</uint2>
<bit name="fNonOutlineData" />
<uint5 name="reserved2a">
<limitation value="0" />
</uint5>
<uint8 name="reserved2b">
<limitation value="0" />
</uint8>
<uint16 name="reserved2c">
<limitation value="0" />
</uint16>
<uint32 name="reserved3">
<limitation value="0" />
</uint32>
<uint32 name="notesId" />
<uint32 name="reserved4">
<limitation value="0" />
</uint32>
</struct>
<struct name="SlideListWithTextSubContainerOrAtom">
<type name="slidePersistAtom" type="SlidePersistAtom" />
<type name="atoms" type="TextContainer" array="true" />
</struct>
<!-- our own invention -->
<struct name="TextContainer">
<!--
this is an interpretation of the ABNF in the MS-PPT doc
-->
<type name="textHeaderAtom" type="TextHeaderAtom" />
<choice name="text" optional="true">
<type type="TextCharsAtom" />
<type type="TextBytesAtom" />
</choice>
<type name="style" type="StyleTextPropAtom" optional="true" />
<type name="meta" type="TextContainerMeta" array="true" />
<!--
perhaps this does not belong here, see
TextClientDataSubContainerOrAtom
-->
<type name="master" type="MasterTextPropAtom" optional="true" />
<type name="bookmark" type="TextBookmarkAtom" array="true" />
<!-- this textRuler is not according to the specification -->
<type name="textRuler" type="TextRulerAtom" optional="true" />
<type name="specialinfo" type="TextSpecialInfoAtom" optional="true" />
<type name="interactive" type="TextContainerInteractiveInfo"
array="true" />
<!-- this second occurance is not according to the specification -->
<type name="specialinfo2" type="TextSpecialInfoAtom" optional="true" />
</struct>
<!-- our own invention -->
<struct name="TextContainerMeta">
<choice name="meta">
<type type="SlideNumberMCAtom" />
<type type="DateTimeMCAtom" />
<type type="GenericDateMCAtom" />
<type type="HeaderMCAtom" />
<type type="FooterMCAtom" />
<type type="RTFDateTimeMCAtom" />
</choice>
</struct>
<!-- our own invention -->
<struct name="TextContainerInteractiveInfo">
<choice name="interactive">
<type type="MouseClickTextInfo" />
<type type="MouseOverTextInfo" />
</choice>
</struct>
<!-- our own invention -->
<struct name="MouseClickTextInfo">
<type name="interactive" type="MouseClickInteractiveInfoContainer" />
<type name="text" type="MouseClickTextInteractiveInfoAtom" />
</struct>
<!-- our own invention -->
<struct name="MouseOverTextInfo">
<type name="interactive" type="MouseOverInteractiveInfoContainer" />
<type name="text" type="MouseOverTextInteractiveInfoAtom" />
</struct>
<!-- our own invention -->
<struct name="TextClientDataSubContainerOrAtom">
<choice name="anon">
<type type="OutlineTextRefAtom" />
<type type="TextContainer" />
<type type="TextRulerAtom" />
</choice>
</struct>
<!-- our own invention -->
<struct name="SlidePersistAtom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0x3F3" />
<limitation name="recLen" value="0x14" />
</type>
<uint32 name="persistIdRef" />
<bit name="reserved1">
<limitation value="false" />
</bit>
<bit name="fShouldCollapse" />
<bit name="fNonOutlineData" />
<uint5 name="reserved2">
<limitation value="0" />
</uint5>
<uint8 name="reserved3">
<limitation value="0" />
</uint8>
<uint16 name="reserved4">
<limitation value="0" />
</uint16>
<int32 name="cTexts">
<limitation expression=">=0" />
<limitation expression="<=8" />
</int32>
<type name="slideId" type="SlideId" />
<uint32 name="reserved5">
<limitation value="0" />
</uint32>
</struct>
<struct name="TextHeaderAtom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0|1|2|3|4|5" />
<limitation name="recType" value="0xF9F" />
<limitation name="recLen" value="4" />
</type>
<uint32 name="textType" />
</struct>
<struct name="TextCharsAtom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0xFA0" />
<limitation name="recLen" expression="%2==0" />
</type>
<uint16 name="textChars" count="rh.recLen/2">
<!-- <limitation value="!0" />-->
</uint16>
</struct>
<struct name="TextBytesAtom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0xFA8" />
</type>
<uint8 name="textChars" count="rh.recLen">
<!-- <limitation value="!0" />-->
</uint8>
</struct>
<struct name="MasterTextPropAtom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0xFA2" />
</type>
<type name="rgMasterTextPropRun" type="MasterTextPropRun" array="true"
size="rh.recLen" />
</struct>
<struct name="MasterTextPropRun">
<uint32 name="count" />
<uint16 name="indentLevel">
<limitation expression="<=4" />
</uint16>
</struct>
<struct name="StyleTextPropAtom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0xFA1" />
</type>
<!--
<type name="rgTextPFRun" type="TextPFRun" array="true" /> <type
name="rgTextCFRun" type="TextCFRun" array="true" />
-->
<!-- this one seems very hard to do -->
<uint8 name="todo" count="rh.recLen" />
<limitation expression="sum(rgTextPFRun/count)=count(../text/textChars)+1" />
<limitation expression="sum(rgTextCFRun/count)=count(../text/textChars)" />
</struct>
<struct name="TextPFRun">
<uint32 name="count">
<limitation expression=">0" />
</uint32>
<uint16 name="indentLevel">
<limitation expression="<=4" />
</uint16>
<type name="pf" type="TextPFException">
<limitation name="masks.leftMargin" value="false" />
<limitation name="masks.indent" value="false" />
<limitation name="masks.defaultTabSize" value="false" />
<limitation name="masks.tabStops" value="false" />
</type>
</struct>
<struct name="TextCFRun">
<uint32 name="count">
<limitation expression=">0" />
</uint32>
<type name="cf" type="TextCFException" />
</struct>
<struct name="SlideNumberMCAtom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0xFD8" />
<limitation name="recLen" value="4" />
</type>
<int32 name="position" />
</struct>
<struct name="DateTimeMCAtom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0xFF7" />
<limitation name="recLen" value="8" />
</type>
<int32 name="position" />
<uint8 name="index" />
<uint8 name="unused" count="3" />
</struct>
<struct name="GenericDateMCAtom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0xFF8" />
<limitation name="recLen" value="4" />
</type>
<int32 name="position" />
</struct>
<struct name="HeaderMCAtom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0xFF9" />
<limitation name="recLen" value="4" />
</type>
<int32 name="position" />
</struct>
<struct name="FooterMCAtom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0xFFA" />
<limitation name="recLen" value="4" />
</type>
<int32 name="position" />
</struct>
<struct name="RTFDateTimeMCAtom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0x1015" />
<limitation name="recLen" value="0x84" />
</type>
<int32 name="position" />
<uint8 name="format" count="128" />
</struct>
<struct name="TextBookmarkAtom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0xFA7" />
<limitation name="recLen" value="0xC" />
</type>
<int32 name="begin" />
<int32 name="end">
<!--
TODO: figure out how to do this <limitation expression="> begin"
/> <limitation expression="<= begin+255" />
-->
</int32>
<int32 name="bookmarkID" />
</struct>
<struct name="TextRange">
<int32 name="begin" />
<int32 name="end" />
</struct>
<struct name="MouseClickTextInteractiveInfoAtom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0xFDF" />
<limitation name="recLen" value="8" />
</type>
<type name="range" type="TextRange" />
</struct>
<struct name="MouseOverTextInteractiveInfoAtom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="1" />
<limitation name="recType" value="0xFDF" />
<limitation name="recLen" value="8" />
</type>
<type name="range" type="TextRange" />
</struct>
<struct name="SlideId">
<uint32 name="slideId">
<limitation expression=">=100" />
<limitation expression="<2147483647" />
</uint32>
</struct>
<struct name="DocumentTextInfoContainer">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0xF" />
<limitation name="recInstance" value="0x0" />
<limitation name="recType" value="0x03F2" />
</type>
<type name="kinsoku" type="KinsokuContainer" optional="true" />
<type name="fontCollection" type="FontCollectionContainer"
optional="true" />
<type name="textCFDefaultsAtom" type="TextCFExceptionAtom"
optional="true" />
<type name="textPFDefaultsAtom" type="TextPFExceptionAtom"
optional="true" />
<type name="defaultRulerAtom" type="DefaultRulerAtom" optional="true" />
<type name="textSIDefaultsAtom" type="TextSIExceptionAtom" />
<type name="textMasterStyleAtom" type="TextMasterStyleAtom" />
<!--
a document has been observed that has two TextMasterStyleAtom members
-->
<type name="textMasterStyleAtom2" type="TextMasterStyleAtom"
optional="true" />
</struct>
<struct name="TextCFExceptionAtom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0x0" />
<limitation name="recInstance" value="0x0" />
<limitation name="recType" value="0x0FA4" />
</type>
<type name="cf" type="TextCFException" />
</struct>
<struct name="DefaultRulerAtom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0x0" />
<limitation name="recInstance" value="0x0" />
<limitation name="recType" value="0x0FAB" />
</type>
<type name="defaultTextRuler" type="TextRuler">
<limitation name="fDefaultTabSize" value="true" />
<limitation name="fCLevels" value="true" />
<limitation name="fTabStops" value="true" />
<limitation name="fLeftMargin1" value="true" />
<limitation name="fLeftMargin2" value="true" />
<limitation name="fLeftMargin3" value="true" />
<limitation name="fLeftMargin4" value="true" />
<limitation name="fIndent1" value="true" />
<limitation name="fIndent2" value="true" />
<limitation name="fIndent3" value="true" />
<limitation name="fIndent4" value="true" />
<limitation name="fIndent5" value="true" />
</type>
</struct>
<struct name="TextRuler">
<bit name="fDefaultTabSize" />
<bit name="fCLevels" />
<bit name="fTabStops" />
<bit name="fLeftMargin1" />
<bit name="fLeftMargin2" />
<bit name="fLeftMargin3" />
<bit name="fLeftMargin4" />
<bit name="fLeftMargin5" />
<bit name="fIndent1" />
<bit name="fIndent2" />
<bit name="fIndent3" />
<bit name="fIndent4" />
<bit name="fIndent5" />
<uint3 name="reserved1" />
<uint16 name="reserved2" />
<int16 name="cLevels" condition="fCLevels" />
<uint16 name="defaultTabSize" condition="fDefaultTabSize" />
<type name="tabs" type="TabStops" condition="fTabStops" />
<uint16 name="leftMargin1" condition="fLeftMargin1" />
<uint16 name="indent1" condition="fIndent1" />
<uint16 name="leftMargin2" condition="fLeftMargin2" />
<uint16 name="indent2" condition="fIndent2" />
<uint16 name="leftMargin3" condition="fLeftMargin3" />
<uint16 name="indent3" condition="fIndent3" />
<uint16 name="leftMargin4" condition="fLeftMargin4" />
<uint16 name="indent4" condition="fIndent4" />
<uint16 name="leftMargin5" condition="fLeftMargin5" />
<uint16 name="indent5" condition="fIndent5" />
</struct>
<struct name="TabStops">
<uint16 name="count" />
<type name="rgTabStop" count="count" type="TabStop" />
</struct>
<struct name="TabStop">
<int16 name="position" />
<uint16 name="type" />
</struct>
<struct name="TextPFExceptionAtom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0x0" />
<limitation name="recInstance" value="0x0" />
<limitation name="recType" value="0x0FA5" />
</type>
<uint16 name="reserved" />
<type name="pf" type="TextPFException" />
</struct>
<struct name="TextPFException">
<type name="masks" type="PFMasks">
<!--
it seems ppt files generated with OpenOffice Impress 3.0 can have
bulletBlip = true
-->
<limitation name="bulletBlip" value="false" />
<!--
it seems ppt files generated with OpenOffice Impress 3.0 can have
bulletHasScheme = true
-->
<limitation name="bulletHasScheme" value="false" />
<!--
it seems ppt files generated with OpenOffice Impress 3.0 can have
bulletScheme = true
-->
<limitation name="bulletScheme" value="false" />
</type>
<type name="bulletFlags" type="BulletFlags"
condition="masks.hasBullet||masks.bulletHasFont||masks.bulletHasColor||masks.bulletHasSize" \
/> <int16 name="bulletChar" condition="masks.bulletChar">
<!--
OpenOffice violates this constraint, so we do not check it
<limitation value="!0" />
-->
</int16>
<uint16 name="bulletFontRef" condition="masks.bulletFont" />
<int16 name="bulletSize" condition="masks.bulletSize" />
<type name="bulletColor" condition="masks.bulletColor" type="ColorIndexStruct" />
<uint16 name="textAlignment" condition="masks.align" />
<int16 name="lineSpacing" condition="masks.lineSpacing" />
<int16 name="spaceBefore" condition="masks.spaceBefore" />
<int16 name="spaceAfter" condition="masks.spaceAfter" />
<uint16 name="leftMargin" condition="masks.leftMargin" />
<uint16 name="indent" condition="masks.indent" />
<uint16 name="defaultTabSize" condition="masks.defaultTabSize" />
<type name="tabStops" type="TabStops" condition="masks.tabStops" />
<uint16 name="fontAlign" condition="masks.fontAlign" />
<type name="wrapFlags" type="PFWrapFlags"
condition="masks.charWrap||masks.wordWrap||masks.overflow" />
<uint16 name="textDirection" condition="masks.textDirection" />
</struct>
<struct name="PFWrapFlags">
<bit name="charWrap" />
<bit name="wordWrap" />
<bit name="overflow" />
<uint5 name="reserved1" />
<uint8 name="reserved2" />
</struct>
<struct name="ColorIndexStruct">
<uint8 name="red" />
<uint8 name="green" />
<uint8 name="blue" />
<uint8 name="index">
<!-- limitation expression="<8 || >253" />-->
</uint8>
</struct>
<struct name="BulletFlags">
<bit name="fHasBullet" />
<bit name="fBulletHasFont" />
<bit name="fBulletHasColor" />
<bit name="fBulletHasSize" />
<uint12 name="reserved" />
</struct>
<struct name="PFMasks">
<bit name="hasBullet" />
<bit name="bulletHasFont" />
<bit name="bulletHasColor" />
<bit name="bulletHasSize" />
<bit name="bulletFont" />
<bit name="bulletColor" />
<bit name="bulletSize" />
<bit name="bulletChar" />
<bit name="leftMargin" />
<bit name="unused" />
<bit name="indent" />
<bit name="align" />
<bit name="lineSpacing" />
<bit name="spaceBefore" />
<bit name="spaceAfter" />
<bit name="defaultTabSize" />
<bit name="fontAlign" />
<bit name="charWrap" />
<bit name="wordWrap" />
<bit name="overflow" />
<bit name="tabStops" />
<bit name="textDirection" />
<bit name="reserved" />
<bit name="bulletBlip" />
<bit name="bulletScheme" />
<bit name="bulletHasScheme" />
<uint6 name="reserved2" />
</struct>
<struct name="TextCFException">
<type name="masks" type="CFMasks">
<limitation name="pp10ext" value="false" />
<limitation name="newEATypeface" value="false" />
<limitation name="csTypeface" value="false" />
<limitation name="pp11ext" value="false" />
</type>
<type name="fontStyle" type="CFStyle"
condition="masks.bold || masks.italic || masks.underline || masks.shadow || \
masks.fehint || masks.kumi || masks.emboss || masks.fHasStyle != 0" /> <uint16 \
name="fontRef" condition="masks.typeface" /> <uint16 name="oldEAFontRef" \
condition="masks.oldEATypeface" /> <uint16 name="ansiFontRef" \
condition="masks.ansiTypeface" /> <uint16 name="symbolFontRef" \
condition="masks.symbolTypeface" /> <uint16 name="fontSize" condition="masks.size">
<limitation expression=">=1" />
<limitation expression="<=4000" />
</uint16>
<type name="color" condition="masks.color" type="ColorIndexStruct" />
<int16 name="position" condition="masks.position">
<limitation expression=">=-100" />
<limitation expression="<=100" />
</int16>
</struct>
<struct name="CFMasks">
<bit name="bold" />
<bit name="italic" />
<bit name="underline" />
<bit name="unused1" />
<bit name="shadow" />
<bit name="fehint" />
<bit name="unused2" />
<bit name="kumi" />
<bit name="unused3" />
<bit name="emboss" />
<uint4 name="fHasStyle" />
<uint2 name="unused4" />
<bit name="typeface" />
<bit name="size" />
<bit name="color" />
<bit name="position" />
<bit name="pp10ext" />
<bit name="oldEATypeface" />
<bit name="ansiTypeface" />
<bit name="symbolTypeface" />
<bit name="newEATypeface" />
<bit name="csTypeface" />
<bit name="pp11ext" />
<uint5 name="reserved" />
</struct>
<struct name="CFStyle">
<bit name="bold" />
<bit name="italic" />
<bit name="underline" />
<bit name="unused1" />
<bit name="shadow" />
<bit name="fehint" />
<bit name="unused2" />
<bit name="kumi" />
<bit name="unused3" />
<bit name="emboss" />
<uint4 name="pp9rt" />
<uint2 name="unused4" />
</struct>
<struct name="FontCollectionContainer">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0xF" />
<limitation name="recInstance" value="0x0" />
<limitation name="recType" value="0x07D5" />
</type>
<type name="rgFontCollectionEntry" type="FontCollectionEntry"
array="true" size="rh.recLen" />
</struct>
<struct name="FontCollectionEntry">
<type name="fontEntityAtom" type="FontEntityAtom" />
<type name="fontEmbedData1" type="FontEmbedDataBlob" optional="true" />
<type name="fontEmbedData2" type="FontEmbedDataBlob" optional="true" />
<type name="fontEmbedData3" type="FontEmbedDataBlob" optional="true" />
<type name="fontEmbedData4" type="FontEmbedDataBlob" optional="true" />
</struct>
<struct name="FontEntityAtom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" expression="<=128" />
<limitation name="recType" value="0xFB7" />
<limitation name="recLen" value="0x44" />
</type>
<uint16 name="lfFaceName" count="32" />
<uint8 name="lfCharSet" />
<bit name="fEmbedSubsetted" />
<uint7 name="unused" />
<bit name="rasterFontType" />
<bit name="deviceFontType" />
<bit name="truetypeFontType" />
<bit name="fNoFontSubstitution" />
<uint4 name="reserved">
<limitation value="0" />
</uint4>
<uint8 name="lfPitchAndFamily" />
</struct>
<struct name="FontEmbedDataBlob">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" expression="<=3" />
<limitation name="recType" value="0xFB8" />
</type>
<uint8 name="data" count="rh.recLen" />
</struct>
<struct name="KinsokuContainer">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0xF" />
<limitation name="recInstance" value="0x2" />
<limitation name="recType" value="0x0FC8" />
</type>
<type name="kinsokuAtom" type="KinsokuAtom" />
<type name="kinsokuLeadingAtom" type="KinsokuLeadingAtom"
condition="kinsokuAtom.level==2" />
<type name="kinsokuFollowingAtom" type="KinsokuFollowingAtom"
condition="kinsokuAtom.level==2" />
</struct>
<struct name="KinsokuAtom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0x0" />
<limitation name="recInstance" value="0x3" />
<limitation name="recType" value="0x0FD2" />
<limitation name="recLen" value="4" />
</type>
<uint32 name="level">
<!-- MS documentation does not allow value 128 -->
<limitation value="0|1|2|128" />
</uint32>
</struct>
<struct name="KinsokuLeadingAtom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0xFBA" />
<limitation expression="recLen%2==0" />
</type>
<uint16 name="kinsokuLeading" count="rh.recLen/2" />
</struct>
<struct name="KinsokuFollowingAtom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="1 " />
<limitation name="recType" value="0xFBA" />
<limitation expression="recLen%2==0" />
</type>
<uint16 name="kinsokuFollowing" count="rh.recLen/2" />
</struct>
<struct name="TextSpecialInfoAtom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0x0" />
<limitation name="recInstance" value="0x0" />
<limitation name="recType" value="0xFAA" />
</type>
<type name="rgSIRun" type="TextSIRun" array="true" size="rh.recLen" />
</struct>
<struct name="TextSIRun">
<uint32 name="count">
<limitation expression=">=1" />
</uint32>
<type name="si" type="TextSIException" />
</struct>
<struct name="TextSIExceptionAtom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0x0" />
<limitation name="recInstance" value="0x0" />
<limitation name="recType" value="0x0FA9" />
</type>
<type name="textSIException" type="TextSIException">
<limitation name="fPp10ext" value="false" />
<limitation name="fBidi" value="false" />
<limitation name="smartTag" value="false" />
</type>
</struct>
<struct name="TextSIException">
<bit name="spell" />
<bit name="lang" />
<bit name="altLang" />
<bit name="unused1" />
<bit name="unused2" />
<bit name="fPp10ext" />
<bit name="fBidi" />
<bit name="unused3" />
<bit name="reserved1" />
<bit name="smartTag" />
<uint2 name="reserved2a" />
<uint20 name="reserved2b" />
<uint16 name="spellInfo" condition="spell" />
<uint16 name="lid" condition="lang" />
<uint16 name="altLid" condition="altLang" />
<int16 name="bidi" condition="fBidi">
<limitation value="0|1" />
</int16>
<uint4 name="pp10runid" condition="fPp10ext" />
<uint4 name="reserved3a" condition="fPp10ext" />
<uint16 name="reserved3b" condition="fPp10ext" />
<uint7 name="reserved3bc" condition="fPp10ext" />
<bit name="grammarError" condition="fPp10ext" />
<type name="smartTags" type="SmartTags" condition="smartTag" />
</struct>
<struct name="SmartTags">
<uint32 name="count" />
<uint32 name="rgSmartTagIndex" count="count" />
</struct>
<struct name="TextMasterStyleAtom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0x0" />
<limitation name="recInstance" value="0|1|2|3|4|5|6|7|8" />
<limitation name="recType" value="0x0FA3" />
</type>
<uint16 name="cLevels">
<limitation expression="<=5" />
</uint16>
<!--
level field of TextMasterStyleLevel is put here, because its presence
depends on this structure and currently child access to parent
properties is not supported
-->
<uint16 name="lstLvl1level" condition="cLevels>0 && \
rh.recInstance>=5" /> <type name="lstLvl1" type="TextMasterStyleLevel" \
condition="cLevels>0" /> <uint16 name="lstLvl2level" condition="cLevels>1 \
&& rh.recInstance>=5" /> <type name="lstLvl2" type="TextMasterStyleLevel" \
condition="cLevels>1" /> <uint16 name="lstLvl3level" condition="cLevels>2 \
&& rh.recInstance>=5" /> <type name="lstLvl3" type="TextMasterStyleLevel" \
condition="cLevels>2" /> <uint16 name="lstLvl4level" condition="cLevels>3 \
&& rh.recInstance>=5" /> <type name="lstLvl4" type="TextMasterStyleLevel" \
condition="cLevels>3" /> <uint16 name="lstLvl5level" condition="cLevels>4 \
&& rh.recInstance>=5" /> <type name="lstLvl5" type="TextMasterStyleLevel" \
condition="cLevels>4" /> </struct>
<struct name="TextMasterStyleLevel">
<type name="pf" type="TextPFException" />
<type name="cf" type="TextCFException" />
</struct>
<struct name="ExOleEmbedAtom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0x0" />
<limitation name="recInstance" value="0x0" />
<limitation name="recType" value="0x0FCD" />
<limitation name="recLen" value="0x8" />
</type>
<uint32 name="exColorFollow">
<limitation value="0|1|2" />
</uint32>
<uint8 name="fCantLockServer" />
<uint8 name="fNoSizeToServer" />
<uint8 name="fIsTable" />
<uint8 name="unused" />
</struct>
<struct name="DocumentAtom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="1" />
<limitation name="recInstance" value="0x0" />
<limitation name="recType" value="0x03E9" />
<limitation name="recLen" value="0x28" />
</type>
<type name="slideSize" type="PointStruct" />
<type name="notesSize" type="PointStruct" />
<type name="serverZoom" type="RatioStruct">
<limitation expression="numer*denom > 0" />
</type>
<uint32 name="notesMasterPersistIdRef" />
<uint32 name="handoutMasterPersistIdRef" />
<uint16 name="firstSlideNumber">
<limitation expression="<10000" />
</uint16>
<uint16 name="slideSizeType">
<limitation value="0|1|2|3|4|5|6" />
</uint16>
<uint8 name="fSaveWithFonts" />
<uint8 name="fOmitTitlePlace" />
<uint8 name="fRightToLeft" />
<uint8 name="fShowComments" />
</struct>
<struct name="PointStruct">
<int32 name="x" />
<int32 name="y" />
</struct>
<struct name="RatioStruct">
<int32 name="numer" />
<int32 name="denom">
<limitation expression="!= 0" />
</int32>
</struct>
<struct name="PersistDirectoryAtom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0x1772" />
</type>
<type name="rgPersistDirEntry" type="PersistDirectoryEntry"
array="true" size="rh.recLen" />
</struct>
<struct name="UnknownDocumentContainerChild">
<type name="rh" type="RecordHeader">
<limitation name="recType"
value="0x416|0x41A|0x101A|0x1773|0x1788|0x178c|0x178d" />
</type>
<uint8 name="todo" count="rh.recLen" />
</struct>
<struct name="UnknownOfficeArtClientDataChild">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0xFE8|0x1019" />
</type>
<uint8 name="todo" count="rh.recLen" />
</struct>
<struct name="UnknownSlideContainerChild">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0x101D" />
</type>
<uint8 name="todo" count="rh.recLen" />
</struct>
<struct name="PersistDirectoryEntry">
<uint20 name="persistId" />
<uint12 name="cPersist" />
<uint32 name="rgPersistOffset" count="cPersist" />
</struct>
<struct name="PersistIdRef">
<uint32 name="anon">
<!--
TODO A 4-byte unsigned integer that specifies a reference to a
persist object. It MUST be 0x00000000 or equal to a persist object
identifier specified by a PersistDirectoryAtom record. The value
0x00000000 specifies a null reference.
-->
</uint32>
</struct>
<struct name="MasterOrSlideContainer">
<choice name="anon">
<type type="MainMasterContainer" />
<type type="SlideContainer" />
</choice>
</struct>
<struct name="MainMasterContainer">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0xF" />
<limitation name="recInstance" value="0x0" />
<limitation name="recType" value="0x03F8" />
</type>
<type name="slideAtom" type="SlideAtom" />
<!--
it is not documented that a SlideShowSlideInfoAtom may appear here
-->
<type name="unknown" type="SlideShowSlideInfoAtom" optional="true" />
<type name="rgSchemeListElementColorScheme" type="SchemeListElementColorSchemeAtom"
array="true" />
<type name="rgTextMasterStyle" type="TextMasterStyleAtom" array="true" />
<type name="roundTripOArtTextSTyles12Atom" type="RoundTripOArtTextStyles12Atom"
optional="true" />
<type name="slideShowInfoAtom" type="SlideShowSlideInfoAtom"
optional="true" />
<type name="perSlideHeadersFootersContainer" type="PerSlideHeadersFootersContainer"
optional="true" />
<type name="drawing" type="DrawingContainer" />
<type name="slideSchemeColorSchemeAtom" type="SlideSchemeColorSchemeAtom" />
<type name="slideNameAtom" type="SlideNameAtom" optional="true" />
<type name="slideProgTagsContainer" type="SlideProgTagsContainer"
optional="true" />
<type name="rgRoundTripMainMaster" type="RoundTripMainMasterRecord"
array="true" />
<type name="templateNameAtom" type="TemplateNameAtom" optional="true" />
<!--
it is not documented that a SlideProgTagsContainer may appear here
-->
<type name="unknown3" type="SlideProgTagsContainer" optional="true" />
</struct>
<struct name="SchemeListElementColorSchemeAtom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="6" />
<limitation name="recType" value="0x7F0" />
<limitation name="recLen" value="0x20" />
</type>
<type name="rgSchemeColor" type="ColorStruct" count="8" />
</struct>
<struct name="RoundTripOArtTextStyles12Atom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0x423" />
</type>
<uint8 name="todo" count="rh.recLen" />
</struct>
<struct name="SlideNameAtom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="3" />
<limitation name="recType" value="0x0FBA" />
<limitation name="recLen" expression="%2==0" />
</type>
<uint16 name="slideName" count="rh.recLen/2" />
</struct>
<struct name="SlideProgTagsContainer">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0xF" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0x1388" />
</type>
<type name="rgTypeRec" type="SlideProgTagsSubContainerOrAtom"
array="true" size="rh.recLen" />
</struct>
<struct name="SlideProgTagsSubContainerOrAtom">
<choice name="anon">
<type type="ProgStringTagContainer" />
<type type="SlideProgBinaryTagContainer" />
</choice>
</struct>
<struct name="SlideProgBinaryTagContainer">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0xF" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0x138A" />
</type>
<type name="rec" type="SlideProgBinaryTagSubContainerOrAtom" />
</struct>
<struct name="SlideProgBinaryTagSubContainerOrAtom">
<choice name="anon">
<type type="PP9SlideBinaryTagExtension" />
<type type="PP10SlideBinaryTagExtension" />
<type type="PP12SlideBinaryTagExtension" />
<type type="UnknownBinaryTag" />
</choice>
</struct>
<struct name="PP9SlideBinaryTagExtension">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0xFBA" />
<limitation name="recLen" value="0xE" />
</type>
<uint16 name="tagName" count="7">
<!-- <limitation value='"___PPT9"' /> -->
</uint16>
<type name="rhData" type="RecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0x138B" />
</type>
<type name="rgTextMasterStyleAtom" type="TextMasterStyle9Atom"
array="true" />
</struct>
<struct name="PP10SlideBinaryTagExtension">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0xFBA" />
<limitation name="recLen" value="0x10" />
</type>
<uint16 name="tagName" count="8">
<!-- <limitation value='"___PPT10"' />-->
</uint16>
<type name="rhData" type="RecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0x138B" />
</type>
<!--<type name="rgTextMasterStyleAtom" type="TextMasterStyle10Atom"
array="true" />
<type name="rgComment10Container" type="Comment10Container"
array="true" />
<type name="linkedSlideAtom" type="LinkedSlide10Atom" optional="true" />
<type name="rgLinkedShape10Atom" type="LinkedShape10Atom" array="true" />
<type name="slideFlagsAtom" type="SlideFlags10Atom" optional="true" />
<type name="slideTimeAtom" type="SlideTime10Atom" optional="true" />
<type name="hashCodeAtom" type="HashCode10Atom" optional="true" />
<type name="extTimeNodeContainer" type="ExtTimeNodeContainer"
optional="true" />
<type name="buildListContainer" type="BuildListContainer"
optional="true" /> -->
<uint8 name="todo" count="rhData.recLen" />
</struct>
<struct name="Comment10Container">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0xF" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0x2EE0" />
</type>
<uint8 name="todo" count="rh.recLen" />
</struct>
<struct name="Comment10Atom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0x2EE1" />
<limitation name="recLen" value="0x1C" />
</type>
<uint8 name="todo" count="rh.recLen" />
</struct>
<struct name="LinkedSlide10Atom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0x2EE7" />
<limitation name="recLen" value="8" />
</type>
<uint32 name="linkedSlideIdRef" />
<int32 name="clinkedShapes" />
</struct>
<struct name="LinkedShape10Atom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0x2EE6" />
<limitation name="recLen" value="8" />
</type>
<uint32 name="shapeIdRef" />
<uint32 name="linkedShapeIdRef" />
</struct>
<struct name="SlideFlags10Atom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0x2EEA" />
<limitation name="recLen" value="4" />
</type>
<bit name="fPreserveMaster" />
<bit name="fOverrideMasterAnimatino" />
<uint14 name="unuseda" />
<uint16 name="unusedb" />
</struct>
<struct name="SlideTime10Atom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0x2EEB" />
<limitation name="recLen" value="8" />
</type>
<type name="fileTime" type="FILETIME" />
</struct>
<struct name="HashCode10Atom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0x2B00" />
<limitation name="recLen" value="4" />
</type>
<uint32 name="hash" />
</struct>
<struct name="ExtTimeNodeContainer">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0xF" />
<limitation name="recInstance" value="1" />
<limitation name="recType" value="0xF144" />
</type>
<uint8 name="todo" count="rh.recLen" />
</struct>
<struct name="BuildListContainer">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0xF" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0x2B02" />
</type>
<uint8 name="todo" count="rh.recLen" />
</struct>
<struct name="PP12SlideBinaryTagExtension">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0xFBA" />
<limitation name="recLen" value="0x10" />
</type>
<uint16 name="tagName" count="8">
<!-- <limitation value='"___PPT12"' />-->
</uint16>
<type name="rhData" type="RecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0x138B" />
</type>
<type name="roundTripHeaderFooterDefaultsAtom" \
type="RoundTripHeaderFooterDefaults12Atom" optional="true" />
</struct>
<struct name="RoundTripHeaderFooterDefaults12Atom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0x0424" />
<limitation name="recLen" value="1" />
</type>
<bit name="fIncludeDate" />
<bit name="fIncludeFooter" />
<bit name="fIncludeHeader" />
<bit name="fIncludeSlideNumber" />
<uint4 name="reserved" />
</struct>
<struct name="ProgStringTagContainer">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0xF" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0x1389" />
</type>
<type name="tagNameAtom" type="TagNameAtom" />
<type name="tagValueAtom" type="TagValueAtom" optional="true" />
</struct>
<struct name="TagNameAtom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0xFBA" />
<limitation name="recLen" expression="%2 == 0 " />
</type>
<uint16 name="tagName" count="rh.recLen/2" />
</struct>
<struct name="TagValueAtom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="1" />
<limitation name="recType" value="0xFBA" />
</type>
<uint16 name="tagValue" count="rh.recLen/2" />
</struct>
<struct name="RoundTripMainMasterRecord">
<type name="rh" type="RecordHeader">
<limitation name="recType"
value="0x41C|0x40E|0x040F|0x41E|0x0423|0x2B0D|0x2B0B|0x041D|0x2B0C|0x101D" />
</type>
<uint8 name="todo" count="rh.recLen" />
</struct>
<struct name="TemplateNameAtom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="2" />
<limitation name="recType" value="0x0FBA" />
<limitation name="recLen" expression="%2==0" />
</type>
<uint16 name="templateName" count="rh.recLen/2" />
</struct>
<struct name="SlideContainer">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0xF" />
<limitation name="recInstance" value="0x0" />
<limitation name="recType" value="0x03EE" />
</type>
<type name="slideAtom" type="SlideAtom" />
<type name="slideShowSlideInfoAtom" type="SlideShowSlideInfoAtom"
optional="true" />
<type name="perSlideHFContainer" type="PerSlideHeadersFootersContainer"
optional="true" />
<type name="rtSlideSyncInfo12" type="RoundTripSlideSyncInfo12Container"
optional="true" />
<type name="drawing" type="DrawingContainer" />
<type name="slideSchemeColorSchemeAtom" type="SlideSchemeColorSchemeAtom" />
<type name="slideNameAtom" type="SlideNameAtom" optional="true" />
<type name="slideProgTagsContainer" type="SlideProgTagsContainer"
optional="true" />
<!--
perhaps this undocumented type is part fo the RoundTripSlideRecord
collection
-->
<type name="unknown" type="UnknownSlideContainerChild" optional="true" />
<type name="rgRoundTripSlide" type="RoundTripSlideRecord" array="true" />
<!--
perhaps this undocumented type is part fo the RoundTripSlideRecord
collection
-->
<type name="unknown2" type="UnknownSlideContainerChild" optional="true" />
</struct>
<struct name="RoundTripSlideSyncInfo12Container">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0xF" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0x3714" />
</type>
<uint8 name="todo" count="rh.recLen" />
</struct>
<struct name="NotesContainer">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0xF" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0x03F0" />
</type>
<type name="notesAtom" type="NotesAtom" />
<!--
perSlideHFContainer is not in the documentation
-->
<type name="perSlideHFContainer" type="PerSlideHeadersFootersContainer"
optional="true" />
<type name="drawing" type="DrawingContainer" />
<type name="slideSchemeColorSchemeAtom" type="SlideSchemeColorSchemeAtom" />
<type name="slideNameAtom" type="SlideNameAtom" optional="true" />
<type name="slideProgTagsContainer" type="SlideProgTagsContainer"
optional="true" />
<!--
perSlideHFContainer2 is not in the documentation
-->
<type name="perSlideHFContainer2" type="PerSlideHeadersFootersContainer"
optional="true" />
<type name="rgNotesRoundTripAtom" type="NotesRoundTripAtom"
array="true" />
</struct>
<struct name="NotesAtom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="1" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0x3F1" />
<limitation name="recLen" value="0x8" />
</type>
<uint32 name="slideIdRef" />
<type name="slideFlags" type="SlideFlags" />
<uint16 name="unused" />
</struct>
<struct name="SlideFlags">
<bit name="fMasterObjects" />
<bit name="fMasterScheme" />
<bit name="fMasterBackground" />
<uint5 name="unused1" />
<uint8 name="unused2" />
</struct>
<struct name="NotesRoundTripAtom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0x40E|0x40F|0x427" />
</type>
<uint8 name="todo" count="rh.recLen" />
</struct>
<struct name="HandoutContainer">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0xF" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0x0FC9" />
</type>
<uint8 name="todo" count="rh.recLen" />
</struct>
<struct name="ExControlStg">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0|1" />
<limitation name="recType" value="0x1011" />
</type>
<uint8 name="todo" count="rh.recLen" />
</struct>
<struct name="ExOleObjStg">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0x1011" />
</type>
<uint8 name="todo" count="rh.recLen" />
</struct>
<struct name="UserEditAtom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0x0FF5" />
<limitation name="recLen" value="0x1C|0x20" />
</type>
<uint32 name="lastSlideIdRef" />
<uint16 name="version" />
<uint8 name="minorVersion">
<limitation value="0" />
</uint8>
<uint8 name="majorVersion">
<limitation value="3" />
</uint8>
<uint32 name="offsetLastEdit">
<!-- TODO: check with offset of this edit -->
</uint32>
<uint32 name="offsetPersistDirectory">
<!-- <limitation expression=">offsetLastEdit" /> -->
<!--
TODO: check with offset of this edit
-->
</uint32>
<uint32 name="docPersistIdRef">
<limitation value="1" />
</uint32>
<uint32 name="persistIdSeed" />
<uint16 name="lastView">
<limitation expression="<=18" />
</uint16>
<uint16 name="unused" />
<uint32 name="encryptSessionPersistIdRef" condition="rh.recLen==32" />
</struct>
<struct name="VbaProjectStg">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0|1" />
<limitation name="recType" value="0x1011" />
</type>
<uint8 name="todo" count="rh.recLen" />
</struct>
<struct name="SlideAtom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0x2" />
<limitation name="recInstance" value="0x0" />
<limitation name="recType" value="0x03EF" />
<limitation name="recLen" value="0x18" />
</type>
<uint32 name="geom" />
<uint8 name="rgPlaceholderTypes" count="8" />
<uint32 name="masterIdRef" />
<uint32 name="notesIdRef" />
<type name="slideFlags" type="SlideFlags" />
<uint16 name="unused" />
</struct>
<struct name="SlideShowSlideInfoAtom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0x03F9" />
<limitation name="recLen" value="0x10" />
</type>
<uint32 name="slidetime" />
<uint32 name="slideIdRef" />
<uint8 name="effectDirection" />
<uint8 name="effectType" />
<bit name="fManualAdvance" />
<bit name="reserved" />
<bit name="fHidden" />
<bit name="reserved2" />
<bit name="fSound" />
<bit name="reserved3" />
<bit name="fLoopSound" />
<bit name="reserved4" />
<bit name="fStopSound" />
<bit name="freserved5" />
<bit name="fAutoAdvance" />
<bit name="reserved6" />
<bit name="fCursorVisible" />
<uint3 name="reserved7" />
<uint8 name="speed" />
<uint8 name="unused" count="3" />
</struct>
<struct name="SlideShowDocInfoAtom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="1" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0x0401" />
<limitation name="recLen" value="0x50" />
</type>
<type name="penColor" type="ColorIndexStruct" />
<int32 name="restartTime" />
<int16 name="startSlide">
<limitation expression=">=0" />
</int16>
<int16 name="endSlide">
<limitation expression=">=0" />
</int16>
<uint8 name="namedShow" count="64" />
<bit name="fAutoAdvance" />
<bit name="fWillSkipBuilds" />
<bit name="fUseSlideRange" />
<bit name="fDocUseNamedShow" />
<bit name="fShowBrowseMode" />
<bit name="fKioskMode" />
<bit name="fWillSkipNarration" />
<bit name="fLoopContinuously" />
<bit name="fHideScrollBar" />
<uint7 name="reserved">
<!--
This value should be zero, but it is not always zero in practice.
-->
</uint7>
<uint16 name="unused" />
</struct>
<struct name="DrawingGroupContainer">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0xF" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0x040B" />
</type>
<type name="OfficeArtDgg" type="OfficeArtDggContainer" />
</struct>
<struct name="DrawingContainer">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0xF" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0x040C" />
</type>
<type name="OfficeArtDg" type="OfficeArtDgContainer" />
</struct>
<struct name="SlideSchemeColorSchemeAtom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="1" />
<limitation name="recType" value="0x07F0" />
<limitation name="recLen" value="0x20" />
</type>
<type name="rgSchemeColor" type="ColorStruct" count="8" />
</struct>
<struct name="RoundTripSlideRecord">
<type name="rh" type="RecordHeader">
<!-- value 0x2b0c is deprecated, but can occur -->
<limitation name="recType"
value="0x40E|0x40F|0x41D|0x3714|0x2B0D|0x2B0B|0x2B0C|0x422" />
<!--
0x40E|0x40F|0x41C|0x41D|0x41E|0x41F|0x420|0x422|0x423|0x425|0x426|0x427|0x428"
-->
</type>
<uint8 name="todo" count="rh.recLen" />
</struct>
<struct name="NamedShowsContainer">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0xF" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0x410" />
</type>
<uint8 name="todo" count="rh.recLen" />
</struct>
<struct name="SummaryContainer">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0xF" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0x402" />
</type>
<uint8 name="todo" count="rh.recLen" />
</struct>
<struct name="DocRoutingSlipAtom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0x406" />
</type>
<uint8 name="todo" count="rh.recLen" />
</struct>
<struct name="PrintOptionsAtom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0x1770" />
<limitation name="recLen" value="5" />
</type>
<uint8 name="todo" count="rh.recLen" />
</struct>
<struct name="RoundTripCustomTableStyles12Atom">
<type name="rh" type="RecordHeader">
<!-- value 0xF is not documented -->
<limitation name="recVer" value="0|0xF" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0x428" />
</type>
<uint8 name="todo" count="rh.recLen" />
</struct>
<struct name="RoundTripCompositeMasterId12Atom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0x41D" />
<limitation name="recLen" value="4" />
</type>
<uint32 name="compositeMasterId" />
</struct>
<struct name="ColorStruct">
<uint8 name="red" />
<uint8 name="green" />
<uint8 name="blue" />
<uint8 name="unused" />
</struct>
<struct name="ExObjListContainer">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0xF" />
<limitation name="recInstance" value="0x0" />
<limitation name="recType" value="0x0409" />
<limitation name="recLen" expression=">=12" />
</type>
<type name="exObjListAtom" type="ExObjListAtom" />
<type name="rgChildRec" type="ExObjListSubContainer" array="true"
size="rh.recLen-12" />
</struct>
<struct name="ExObjListAtom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0x0" />
<limitation name="recInstance" value="0x0" />
<limitation name="recType" value="0x040A" />
<limitation name="recLen" value="4" />
</type>
<int32 name="exObjIdSeed">
<limitation expression=">=1" />
<!--
TODO:exObjIdSeed (4 bytes): A signed integer that specifies a seed
for creating a new ExObjId or ExHyperlinkId value. It MUST be
greater than or equal to the largest ExObjId value in the file as
specified by the ExMediaAtom record or ExOleObjAtom record and MUST
be greater than or equal to the largest ExHyperlinkId value in the
file as specified by the ExHyperlinkAtom record. It MUST be greater
than or equal to 0x00000001.
-->
</int32>
</struct>
<struct name="ExObjListSubContainer">
<choice name="anon">
<type type="ExAviMovieContainer" />
<type type="ExCDAudioContainer" />
<type type="ExControlContainer" />
<type type="ExHyperlinkContainer" />
<type type="ExMCIMovieContainer" />
<type type="ExMIDIAudioContainer" />
<type type="ExOleEmbedContainer" />
<type type="ExOleLinkContainer" />
<type type="ExWAVAudioEmbeddedContainer" />
<type type="ExWAVAudioLinkContainer" />
<type type="UnknownExObjListSubContainerChild" />
</choice>
</struct>
<struct name="ExAviMovieContainer">
<type name="rh" type="OfficeArtRecordHeader">
<limitation name="recVer" value="0xF" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0x1006" />
</type>
<uint8 name="todo" count="rh.recLen" />
</struct>
<struct name="ExCDAudioContainer">
<type name="rh" type="OfficeArtRecordHeader">
<limitation name="recVer" value="0xF" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0x100E" />
</type>
<uint8 name="todo" count="rh.recLen" />
</struct>
<struct name="ExControlContainer">
<type name="rh" type="OfficeArtRecordHeader">
<limitation name="recVer" value="0xF" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0xFEE" />
</type>
<type name="exControlAtom" type="ExControlAtom" />
<type name="exOleObjAtom" type="ExOleObjAtom" />
<type name="menuNameAtom" type="MenuNameAtom" optional="true" />
<type name="progIdAtom" type="ProgIDAtom" optional="true" />
<type name="clipboardNameAtom" type="ClipboardNameAtom" optional="true" />
<type name="metafile" type="MetafileBlob" optional="true" />
</struct>
<struct name="ExControlAtom">
<type name="rh" type="OfficeArtRecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0xFFB" />
<limitation name="recLen" value="4" />
</type>
<uint32 name="slideIdRef" />
</struct>
<struct name="ExHyperlinkContainer">
<type name="rh" type="OfficeArtRecordHeader">
<limitation name="recVer" value="0xF" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0xFD7" />
</type>
<type name="exHyperlinkAtom" type="ExHyperlinkAtom" />
<type name="friendlyNameAtom" type="FriendlyNameAtom" optional="true" />
<type name="targetAtom" type="TargetAtom" optional="true" />
<type name="locationAtom" type="LocationAtom" optional="true" />
</struct>
<struct name="ExHyperlinkAtom">
<type name="rh" type="OfficeArtRecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0xFD3" />
<limitation name="recLen" value="4" />
</type>
<uint32 name="exHyperLinkId" />
</struct>
<struct name="FriendlyNameAtom">
<type name="rh" type="OfficeArtRecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0xFBA" />
<limitation name="recLen" expression="%2==0" />
</type>
<uint16 name="friendlyName" count="rh.recLen/2" />
</struct>
<struct name="TargetAtom">
<type name="rh" type="OfficeArtRecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="1" />
<limitation name="recType" value="0xFBA" />
<limitation name="recLen" expression="%2==0" />
</type>
<uint16 name="target" count="rh.recLen/2" />
</struct>
<struct name="LocationAtom">
<type name="rh" type="OfficeArtRecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="3" />
<limitation name="recType" value="0xFBA" />
<limitation name="recLen" expression="%2==0" />
</type>
<uint16 name="location" count="rh.recLen/2" />
</struct>
<struct name="ExMCIMovieContainer">
<type name="rh" type="OfficeArtRecordHeader">
<limitation name="recVer" value="0xF" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0x1007" />
</type>
<uint8 name="todo" count="rh.recLen" />
</struct>
<struct name="ExMIDIAudioContainer">
<type name="rh" type="OfficeArtRecordHeader">
<limitation name="recVer" value="0xF" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0x100D" />
</type>
<uint8 name="todo" count="rh.recLen" />
</struct>
<struct name="ExWAVAudioEmbeddedContainer">
<type name="rh" type="OfficeArtRecordHeader">
<limitation name="recVer" value="0xF" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0x100F" />
</type>
<uint8 name="todo" count="rh.recLen" />
</struct>
<struct name="ExWAVAudioLinkContainer">
<type name="rh" type="OfficeArtRecordHeader">
<limitation name="recVer" value="0xF" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0x1010" />
</type>
<uint8 name="todo" count="rh.recLen" />
</struct>
<struct name="UnknownExObjListSubContainerChild">
<type name="rh" type="OfficeArtRecordHeader">
<limitation name="recVer" value="0xF" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0xFEA" />
</type>
<uint8 name="todo" count="rh.recLen" />
</struct>
<struct name="ExOleLinkContainer">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0xF" />
<limitation name="recInstance" value="0x0" />
<limitation name="recType" value="0x0FCE" />
</type>
<type name="exOleLinkAtom" type="ExOleLinkAtom" />
<type name="exOleObjAtom" type="ExOleObjAtom" />
<type name="menuNameAtom" type="MenuNameAtom" optional="true" />
<type name="progIdAtom" type="ProgIDAtom" optional="true" />
<type name="clipboardNameAtom" type="ClipboardNameAtom" optional="true" />
<type name="metafile" type="MetafileBlob" optional="true" />
</struct>
<struct name="ExOleEmbedContainer">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0xF" />
<limitation name="recInstance" value="0x0" />
<limitation name="recType" value="0x0FCC" />
</type>
<type name="exOleEmbedAtom" type="ExOleEmbedAtom" />
<type name="exOleObjAtom" type="ExOleObjAtom" />
<type name="menuNameAtom" type="MenuNameAtom" optional="true" />
<type name="progIdAtom" type="ProgIDAtom" optional="true" />
<type name="clipboardNameAtom" type="ClipboardNameAtom" optional="true" />
<type name="metafile" type="MetafileBlob" optional="true" />
</struct>
<struct name="ExOleLinkAtom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0x0" />
<limitation name="recInstance" value="0x0" />
<limitation name="recType" value="0x0FD1" />
<limitation name="recLen" value="0xC" />
</type>
<uint32 name="slideIdRef">
<!--
A 4-byte unsigned integer that specifies a reference to a
presentation slide. It MUST be 0x00000000 or equal to the value of
the slideId field of a SlidePersistAtom record. The value 0x00000000
specifies a null reference.
-->
</uint32>
<uint32 name="oleUpdateMode" />
<uint32 name="unused" />
</struct>
<struct name="ExOleObjAtom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0x1" />
<limitation name="recInstance" value="0x0" />
<limitation name="recType" value="0x0FC3" />
<limitation name="recLen" value="0x18" />
</type>
<uint32 name="drawAspect" />
<uint32 name="type" />
<uint32 name="exObjId" />
<uint32 name="subType" />
<uint32 name="persistIdRef" />
<uint32 name="unused" />
</struct>
<struct name="MenuNameAtom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0x0" />
<limitation name="recInstance" value="0x1" />
<limitation name="recType" value="0x0FBA" />
<limitation name="recLen" expression="%2 == 0 " />
</type>
<uint8 name="menuName" count="rh.recLen" />
</struct>
<struct name="ProgIDAtom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0x0" />
<limitation name="recInstance" value="0x2" />
<limitation name="recType" value="0x0FBA" />
<limitation name="recLen" expression="%2 == 0 " />
</type>
<uint8 name="progId" count="rh.recLen" />
</struct>
<struct name="ClipboardNameAtom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0x0" />
<limitation name="recInstance" value="0x3" />
<limitation name="recType" value="0x0FBA" />
<limitation name="recLen" expression="%2 == 0 " />
</type>
<uint8 name="clipboardName" count="rh.recLen" />
</struct>
<struct name="MetafileBlob">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0x0" />
<limitation name="recInstance" value="0x0" />
<limitation name="recType" value="0x0FC1" />
<limitation name="recLen" expression=">16" />
</type>
<int16 name="mm" />
<int16 name="xExt" />
<int16 name="yExt" />
<uint8 name="data" count="rh.recLen-6" />
</struct>
<struct name="OfficeArtDggContainer">
<type name="rh" type="OfficeArtRecordHeader">
<limitation name="recVer" value="0xF" />
<limitation name="recInstance" value="0x0" />
<limitation name="recType" value="0x0F000" />
</type>
<type name="drawingGroup" type="OfficeArtFDGGBlock" />
<type name="blipStore" type="OfficeArtBStoreContainer" optional="true" />
<!-- different from spec -->
<!--
MS docs do not list drawingPrimaryOptions as optional
-->
<type name="drawingPrimaryOptions" type="OfficeArtFOPT" optional="true" />
<type name="drawingTertiaryOptions" type="OfficeArtTertiaryFOPT"
optional="true" />
<!--
MS docs do not list colorMRU as optional
-->
<type name="colorMRU" type="OfficeArtColorMRUContainer" optional="true" />
<!--
MS docs do not list splitColors as optional
-->
<type name="splitColors" type="OfficeArtSplitMenuColorContainer" />
<!--
sometimes the order is messed up in openoffice generated documents
This second blipSore takes that into account, but is not according to
the specification.
-->
<type name="blipStore2" type="OfficeArtBStoreContainer" optional="true" />
<!--
MS docs do not mention this instance of OfficeArtTertiaryFOPT
-->
<type name="unknown" type="OfficeArtTertiaryFOPT" optional="true" />
</struct>
<struct name="OfficeArtDgContainer">
<type name="rh" type="OfficeArtRecordHeader">
<limitation name="recVer" value="0xF" />
<limitation name="recInstance" value="0x0" />
<limitation name="recType" value="0xF002" />
</type>
<type name="drawingData" type="OfficeArtFDG" optional="true" />
<!-- MS documentation does not say regroupItems is optional -->
<type name="regroupItems" type="OfficeArtFRITContainer" optional="true" />
<type name="groupShape" type="OfficeArtSpgrContainer" />
<!-- MS documentation does not say shape is optional -->
<type name="shape" type="OfficeArtSpContainer" optional="true" />
<type name="deletedShapes" type="OfficeArtSpgrContainerFileBlock"
array="true" />
<!-- according to ms spec, solvers is not optional -->
<type name="solvers" type="OfficeArtSolverContainer" optional="true" />
</struct>
<struct name="OfficeArtFDGGBlock">
<type name="rh" type="OfficeArtRecordHeader">
<limitation name="recVer" value="0x0" />
<limitation name="recInstance" value="0x0" />
<limitation name="recType" value="0x0F006" />
</type>
<type name="head" type="OfficeArtFDGG">
<!-- <limitation expression="cidcl==rh.recLen/8.0-2" /> FIX!-->
</type>
<type name="Rgidcl" type="OfficeArtIDCL" count="head.cidcl-1" />
</struct>
<struct name="OfficeArtFDGG">
<uint32 name="spidMax">
<limitation expression="<67098623" />
</uint32>
<uint32 name="cidcl">
<limitation expression="<268435455" />
</uint32>
<uint32 name="cspSaved" />
<uint32 name="cdgSaved" />
</struct>
<struct name="OfficeArtFDG">
<type name="rh" type="OfficeArtRecordHeader">
<limitation name="recVer" value="0x0" />
<limitation name="recInstance" expression="<=4094" />
<limitation name="recType" value="0x0F008" />
<limitation name="recLen" value="8" />
</type>
<uint32 name="csp" />
<uint32 name="spidCur" />
</struct>
<struct name="OfficeArtFRITContainer">
<type name="rh" type="OfficeArtRecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recType" value="0xF118" />
<limitation expression="recLen==4*recInstance" />
</type>
<type name="rgfrit" type="OfficeArtFRIT" count="rh.recInstance" />
</struct>
<struct name="OfficeArtFRIT">
<uint16 name="fridNew" />
<uint16 name="fridOld" />
</struct>
<struct name="OfficeArtBStoreContainer">
<type name="rh" type="OfficeArtRecordHeader">
<limitation name="recVer" value="0xF" />
<limitation name="recType" value="0x0F001" />
</type>
<!--
OOo can set number of instances to a wrong value, so use rh.recLen
-->
<type name="rgfb" type="OfficeArtBStoreContainerFileBlock" array="true"
size="rh.recLen" />
</struct>
<struct name="OfficeArtSpgrContainer">
<type name="rh" type="OfficeArtRecordHeader">
<limitation name="recVer" value="0xF" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0x0F003" />
</type>
<type name="rgfb" type="OfficeArtSpgrContainerFileBlock" array="true"
size="rh.recLen" />
</struct>
<struct name="OfficeArtSpgrContainerFileBlock">
<choice name="anon">
<type type="OfficeArtSpContainer" />
<type type="OfficeArtSpgrContainer" />
</choice>
</struct>
<struct name="OfficeArtSpContainer">
<type name="rh" type="OfficeArtRecordHeader">
<limitation name="recVer" value="0xF" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0x0F004" />
</type>
<type name="shapeGroup" type="OfficeArtFSPGR" optional="true" />
<type name="shapeProp" type="OfficeArtFSP" />
<type name="deletedshape" type="OfficeArtFPSPL" optional="true" />
<type name="shapePrimaryOptions" type="OfficeArtFOPT" optional="true" />
<type name="shapeSecondaryOptions1" type="OfficeArtSecondaryFOPT"
optional="true" />
<type name="shapeTertiaryOptions1" type="OfficeArtTertiaryFOPT"
optional="true" />
<type name="childAnchor" type="OfficeArtChildAnchor" optional="true" />
<type name="clientAnchor" type="OfficeArtClientAnchor" optional="true" />
<type name="clientData" type="OfficeArtClientData" optional="true" />
<type name="clientTextbox" type="OfficeArtClientTextBox"
optional="true" />
<!--
Only exists if shapeSecondaryOptions1 does not. -->
<type name="shapeSecondaryOptions2" type="OfficeArtSecondaryFOPT"
optional="true" />
<!--
Only exists if shapeTertiaryOptions1 does not. -->
<type name="shapeTertiaryOptions2" type="OfficeArtTertiaryFOPT"
optional="true" />
</struct>
<struct name="OfficeArtSolverContainer">
<type name="rh" type="OfficeArtRecordHeader">
<limitation name="recVer" value="0xF" />
<limitation name="recType" value="0xF005" />
</type>
<type name="rgfb" type="OfficeArtSolverContainerFileBlock" array="true" />
</struct>
<struct name="OfficeArtSolverContainerFileBlock">
<choice name="anon">
<type type="OfficeArtFConnectorRule" />
<type type="OfficeArtFArcRule" />
<type type="OfficeArtFCalloutRule" />
</choice>
</struct>
<struct name="OfficeArtFConnectorRule">
<type name="rh" type="OfficeArtRecordHeader">
<limitation name="recVer" value="1" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0xF012" />
<limitation name="recLen" value="0x18" />
</type>
<uint32 name="ruid" />
<uint32 name="spidA" />
<uint32 name="spidB" />
<uint32 name="spidC" />
<uint32 name="cptiA" />
<uint32 name="cptiB" />
</struct>
<struct name="OfficeArtFArcRule">
<type name="rh" type="OfficeArtRecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0xF014" />
<limitation name="recLen" value="8" />
</type>
<uint32 name="ruid" />
<uint32 name="spid" />
</struct>
<struct name="OfficeArtFCalloutRule">
<type name="rh" type="OfficeArtRecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0xF017" />
<limitation name="recLen" value="8" />
</type>
<uint32 name="ruid" />
<uint32 name="spid" />
</struct>
<struct name="OfficeArtFSPGR">
<type name="rh" type="OfficeArtRecordHeader">
<limitation name="recVer" value="0x1" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0x0F009" />
<limitation name="recLen" value="0x10" />
</type>
<int32 name="xLeft" />
<int32 name="yTop" />
<int32 name="xRight" />
<int32 name="yBottom" />
</struct>
<struct name="OfficeArtFSP">
<type name="rh" type="OfficeArtRecordHeader">
<limitation name="recVer" value="0x2" />
<limitation name="recInstance" expression="<= 202" />
<limitation name="recType" value="0x0F00A" />
<limitation name="recLen" value="8" />
</type>
<uint32 name="spid" />
<bit name="fGroup" />
<bit name="fChild" />
<bit name="fPatriarch" />
<bit name="fDeleted" />
<bit name="fOleShape" />
<bit name="fHaveMaster" />
<bit name="fFlipH" />
<bit name="fFlipV" />
<bit name="fConnector" />
<bit name="fHaveAnchor" />
<bit name="fBackground" />
<bit name="fHaveSpt" />
<uint20 name="unused1" />
</struct>
<struct name="OfficeArtFOPT">
<type name="rh" type="OfficeArtRecordHeader">
<limitation name="recVer" value="0x3" />
<limitation name="recType" value="0x0F00B" />
</type>
<type name="fopt" type="OfficeArtFOPTEChoice" count="rh.recInstance" />
<uint8 name="complexData" count="rh.recLen-6*rh.recInstance" />
</struct>
<struct name="OfficeArtSecondaryFOPT">
<type name="rh" type="OfficeArtRecordHeader">
<limitation name="recVer" value="3" />
<limitation name="recType" value="0xF121" />
</type>
<type name="fopt" type="OfficeArtFOPTEChoice" count="rh.recInstance" />
<uint8 name="complexData" count="rh.recLen-6*rh.recInstance" />
</struct>
<struct name="OfficeArtTertiaryFOPT">
<type name="rh" type="OfficeArtRecordHeader">
<limitation name="recVer" value="3" />
<limitation name="recType" value="0xF122" />
</type>
<type name="fopt" type="OfficeArtFOPTEChoice" count="rh.recInstance" />
<uint8 name="complexData" count="rh.recLen-6*rh.recInstance" />
</struct>
<!-- This type is invented to make OPTE specific parsing possible -->
<struct name="OfficeArtFOPTEChoice">
<choice name="anon">
<type type="ProtectionBooleanProperties" />
<type type="ITxid" />
<type type="DiagramBooleanProperties" />
<type type="DxTextLeft" />
<type type="DyTextTop" />
<type type="DxTextRight" />
<type type="DyTextBottom" />
<type type="WrapText" />
<type type="AnchorText" />
<type type="TextBooleanProperties" />
<type type="HspNext" />
<type type="Pib" />
<type type="PibName" />
<type type="ShapePath" />
<type type="AdjustValue" />
<type type="Adjust2Value" />
<type type="Adjust3Value" />
<type type="GeometryBooleanProperties" />
<type type="FillType" />
<type type="FillColor" />
<type type="FillBackColor" />
<type type="FillBlip" />
<type type="FillStyleBooleanProperties" />
<type type="LineColor" />
<type type="LineOpacity" />
<type type="LineBackColor" />
<type type="LineFillBlip" />
<type type="LineWidth" />
<type type="LineStyle" />
<type type="LineDashing" />
<type type="FillRectRight" />
<type type="FillRectBottom" />
<type type="FillDztype" />
<type type="WzFillId" />
<type type="LineStyleBooleanProperties" />
<type type="LineStartArrowhead" />
<type type="LineEndArrowhead" />
<type type="LineStartArrowWidth" />
<type type="LineStartArrowLength" />
<type type="LineEndArrowWidth" />
<type type="LineEndArrowLength" />
<type type="LineJoinStyle" />
<type type="ShadowColor" />
<type type="ShadowOpacity" />
<type type="ShadowOffsetX" />
<type type="ShadowOffsetY" />
<type type="ShadowStyleBooleanPropertiesr" />
<type type="ShapeBooleanProperties" />
<type type="HspMaster" />
<type type="Rotation" />
<type type="CalloutBooleanProperties" />
<type type="LidRegroup" />
<type type="BWMode" />
<type type="TxflTextFlow" />
<type type="OfficeArtFOPTE" />
</choice>
</struct>
<struct name="ProtectionBooleanProperties">
<type name="opid" type="OfficeArtFOPTEOPID">
<limitation name="opid" value="0x007F" />
<limitation name="fBid" value="false" />
<limitation name="fComplex" value="false" />
</type>
<bit name="fLockAgainstGrouping" />
<bit name="fLockAdjustHandles" />
<bit name="fLockText" />
<bit name="fLockVertices" />
<bit name="fLockCropping" />
<bit name="fLockAgainstSelect" />
<bit name="fLockPosition" />
<bit name="fLockAspectRatio" />
<bit name="fLockRotation" />
<bit name="fLockAgainstUngrouping" />
<uint6 name="unused6" />
<bit name="fUsefLockAgainstGrouping" />
<bit name="fUseLockAdjustHandles" />
<bit name="fUseLockText" />
<bit name="fUsefLockVertices" />
<bit name="fUsefLockCropping" />
<bit name="fUsefLockAgainstSelect" />
<bit name="fUsefLockPosition" />
<bit name="fUsefLockAspectRatio" />
<bit name="fUsefLockRotation" />
<bit name="fUsefLockAgainstUngrouping" />
<uint6 name="unused2" />
</struct>
<struct name="FixedPoint">
<!--
strangely the fraction part seems to come first this conflicts with
what the spec suggests
-->
<uint16 name="fractional" />
<int16 name="integral" />
</struct>
<struct name="Rotation">
<type name="opid" type="OfficeArtFOPTEOPID">
<limitation name="opid" value="0x0004" />
<limitation name="fBid" value="false" />
<limitation name="fComplex" value="false" />
</type>
<type name="rotation" type="FixedPoint" />
</struct>
<struct name="ITxid">
<type name="opid" type="OfficeArtFOPTEOPID">
<limitation name="opid" value="0x0080" />
<limitation name="fBid" value="false" />
<limitation name="fComplex" value="false" />
</type>
<int32 name="iTxid" />
</struct>
<struct name="DiagramBooleanProperties">
<type name="opid" type="OfficeArtFOPTEOPID">
<limitation name="opid" value="0x053F" />
<limitation name="fBid" value="false" />
<limitation name="fComplex" value="false" />
</type>
<bit name="fLockAgainstGrouping" />
<bit name="fLockAdjustHandles" />
<bit name="fLockText" />
<bit name="fLockVertices" />
<bit name="fLockCropping" />
<bit name="fLockAgainstSelect" />
<bit name="fLockPosition" />
<bit name="fLockAspectRatio" />
<bit name="fLockRotation" />
<bit name="fLockAgainstUngrouping" />
<uint6 name="unused6" />
<bit name="fUsefLockAgainstGrouping" />
<bit name="fUseLockAdjustHandles" />
<bit name="fUseLockText" />
<bit name="fUsefLockVertices" />
<bit name="fUsefLockCropping" />
<bit name="fUsefLockAgainstSelect" />
<bit name="fUsefLockPosition" />
<bit name="fUsefLockAspectRatio" />
<bit name="fUsefLockRotation" />
<bit name="fUsefLockAgainstUngrouping" />
<uint6 name="unused2" />
</struct>
<struct name="DxTextLeft">
<type name="opid" type="OfficeArtFOPTEOPID">
<limitation name="opid" value="0x0081" />
<limitation name="fBid" value="false" />
<limitation name="fComplex" value="false" />
</type>
<int32 name="dxTextLeft" />
</struct>
<struct name="DyTextTop">
<type name="opid" type="OfficeArtFOPTEOPID">
<limitation name="opid" value="0x0082" />
<limitation name="fBid" value="false" />
<limitation name="fComplex" value="false" />
</type>
<int32 name="dyTextTop" />
</struct>
<struct name="DxTextRight">
<type name="opid" type="OfficeArtFOPTEOPID">
<limitation name="opid" value="0x0083" />
<limitation name="fBid" value="false" />
<limitation name="fComplex" value="false" />
</type>
<int32 name="dxTextRight" />
</struct>
<struct name="DyTextBottom">
<type name="opid" type="OfficeArtFOPTEOPID">
<limitation name="opid" value="0x0084" />
<limitation name="fBid" value="false" />
<limitation name="fComplex" value="false" />
</type>
<int32 name="dyTextBottom" />
</struct>
<struct name="WrapText">
<type name="opid" type="OfficeArtFOPTEOPID">
<limitation name="opid" value="0x0085" />
<limitation name="fBid" value="false" />
<limitation name="fComplex" value="false" />
</type>
<uint32 name="wrapText">
<limitation expression="<5" />
</uint32>
</struct>
<struct name="AnchorText">
<type name="opid" type="OfficeArtFOPTEOPID">
<limitation name="opid" value="0x0087" />
<limitation name="fBid" value="false" />
<limitation name="fComplex" value="false" />
</type>
<uint32 name="anchorText">
<limitation expression="<=9" />
</uint32>
</struct>
<struct name="TextBooleanProperties">
<type name="opid" type="OfficeArtFOPTEOPID">
<limitation name="opid" value="0x00BF" />
<limitation name="fBid" value="false" />
<limitation name="fComplex" value="false" />
</type>
<bit name="unused1" />
<bit name="fFitShapeToText" />
<bit name="unused2" />
<bit name="fAutoTextMargin" />
<bit name="fSelectText" />
<uint3 name="unused3a" />
<uint8 name="unused3b" />
<bit name="unused4" />
<bit name="fUsefFitShapeToText" />
<bit name="unused5" />
<bit name="fUsefAutoTextMargin" />
<bit name="fUsefSelectText" />
<uint3 name="unused6a" />
<uint8 name="unused6b" />
</struct>
<struct name="HspNext">
<type name="opid" type="OfficeArtFOPTEOPID">
<limitation name="opid" value="0x008A" />
<limitation name="fBid" value="false" />
<limitation name="fComplex" value="false" />
</type>
<int32 name="hspNext" />
</struct>
<struct name="Pib">
<type name="opid" type="OfficeArtFOPTEOPID">
<limitation name="opid" value="0x0104" />
</type>
<uint32 name="pib" />
</struct>
<struct name="PibName">
<type name="opid" type="OfficeArtFOPTEOPID">
<limitation name="opid" value="0x0105" />
</type>
<uint32 name="pibName" />
</struct>
<struct name="ShapePath">
<type name="opid" type="OfficeArtFOPTEOPID">
<limitation name="opid" value="0x0144" />
<limitation name="fBid" value="false" />
<limitation name="fComplex" value="false" />
</type>
<uint32 name="shapePath">
<limitation expression="<=4" />
</uint32>
</struct>
<struct name="AdjustValue">
<type name="opid" type="OfficeArtFOPTEOPID">
<limitation name="opid" value="0x0147" />
<limitation name="fBid" value="false" />
<limitation name="fComplex" value="false" />
</type>
<int32 name="adjustvalue" />
</struct>
<struct name="Adjust2Value">
<type name="opid" type="OfficeArtFOPTEOPID">
<limitation name="opid" value="0x0148" />
<limitation name="fBid" value="false" />
<limitation name="fComplex" value="false" />
</type>
<int32 name="adjust2value" />
</struct>
<struct name="Adjust3Value">
<type name="opid" type="OfficeArtFOPTEOPID">
<limitation name="opid" value="0x0149" />
<limitation name="fBid" value="false" />
<limitation name="fComplex" value="false" />
</type>
<int32 name="adjust3value" />
</struct>
<struct name="GeometryBooleanProperties">
<type name="opid" type="OfficeArtFOPTEOPID">
<limitation name="opid" value="0x017F" />
<limitation name="fBid" value="false" />
<limitation name="fComplex" value="false" />
</type>
<bit name="fFillOk" />
<bit name="fFillShadeShapeOK" />
<bit name="fGtextOK" />
<bit name="fLineOK" />
<bit name="f3DOK" />
<bit name="fShadowOK" />
<bit name="unuseda" />
<bit name="unusedb" />
<uint8 name="unused2" />
<bit name="fUsefFillOK" />
<bit name="fUsefFillShadeShapeOK" />
<bit name="fUsefGtextOK" />
<bit name="fUsefLineOK" />
<bit name="fUsef3DOK" />
<bit name="fUsefShadowOK" />
<bit name="unused3a" />
<bit name="unused3b" />
<uint8 name="unused4" />
</struct>
<struct name="FillType">
<type name="opid" type="OfficeArtFOPTEOPID">
<limitation name="opid" value="0x0180" />
<limitation name="fBid" value="false" />
<limitation name="fComplex" value="false" />
</type>
<uint32 name="fillType">
<limitation expression="<=9" />
</uint32>
</struct>
<struct name="FillColor">
<type name="opid" type="OfficeArtFOPTEOPID">
<limitation name="opid" value="0x0181" />
<limitation name="fBid" value="false" />
<limitation name="fComplex" value="false" />
</type>
<type name="fillColor" type="OfficeArtCOLORREF" />
</struct>
<struct name="FillBackColor">
<type name="opid" type="OfficeArtFOPTEOPID">
<limitation name="opid" value="0x0183" />
<limitation name="fBid" value="false" />
<limitation name="fComplex" value="false" />
</type>
<type name="fillBackColor" type="OfficeArtCOLORREF" />
</struct>
<struct name="FillBlip">
<type name="opid" type="OfficeArtFOPTEOPID">
<limitation name="opid" value="0x0186" />
</type>
<uint32 name="fillBlip" />
</struct>
<struct name="FillRectRight">
<type name="opid" type="OfficeArtFOPTEOPID">
<limitation name="opid" value="0x0193" />
<limitation name="fBid" value="false" />
<limitation name="fComplex" value="false" />
</type>
<int32 name="fillRectRight" />
</struct>
<struct name="FillRectBottom">
<type name="opid" type="OfficeArtFOPTEOPID">
<limitation name="opid" value="0x0194" />
<limitation name="fBid" value="false" />
<limitation name="fComplex" value="false" />
</type>
<int32 name="fillRectBottom" />
</struct>
<struct name="FillDztype">
<type name="opid" type="OfficeArtFOPTEOPID">
<limitation name="opid" value="0x0195" />
<limitation name="fBid" value="false" />
<limitation name="fComplex" value="false" />
</type>
<int32 name="fillDztype" />
</struct>
<struct name="FillStyleBooleanProperties">
<type name="opid" type="OfficeArtFOPTEOPID">
<limitation name="opid" value="0x01BF" />
<limitation name="fBid" value="false" />
<limitation name="fComplex" value="false" />
</type>
<bit name="fNoFillHitTest" />
<bit name="fillUseRect" />
<bit name="fillShape" />
<bit name="fHitTestFill" />
<bit name="fFilled" />
<bit name="fUseShapeAnchor" />
<bit name="fRecolorFillAsPicture" />
<bit name="unused1a" />
<uint8 name="unused1b" />
<bit name="fUseNoFillHitTest" />
<bit name="fUseFillUseRext" />
<bit name="fUseFillShape" />
<bit name="fUseHitTestFill" />
<bit name="fUseFilled" />
<bit name="fUseUseShapeAnchor" />
<bit name="fUsefRecolorFillAsPicture" />
<bit name="unused2a" />
<uint8 name="unused2b" />
</struct>
<struct name="LineColor">
<type name="opid" type="OfficeArtFOPTEOPID">
<limitation name="opid" value="0x01C0" />
<limitation name="fBid" value="false" />
<limitation name="fComplex" value="false" />
</type>
<type name="lineColor" type="OfficeArtCOLORREF" />
</struct>
<struct name="LineOpacity">
<type name="opid" type="OfficeArtFOPTEOPID">
<limitation name="opid" value="0x01C1" />
<limitation name="fBid" value="false" />
<limitation name="fComplex" value="false" />
</type>
<int32 name="lineOpacity">
<limitation expression=">=0" />
<limitation expression="<=65536" />
</int32>
</struct>
<struct name="LineBackColor">
<type name="opid" type="OfficeArtFOPTEOPID">
<limitation name="opid" value="0x01C2" />
</type>
<type name="lineBackColor" type="OfficeArtCOLORREF" />
</struct>
<struct name="LineFillBlip">
<type name="opid" type="OfficeArtFOPTEOPID">
<limitation name="opid" value="0x01C5" />
</type>
<uint32 name="lineFillBlip" />
</struct>
<struct name="LineWidth">
<type name="opid" type="OfficeArtFOPTEOPID">
<limitation name="opid" value="0x01CB" />
<limitation name="fBid" value="false" />
<limitation name="fComplex" value="false" />
</type>
<!--
default = 0x2535 english metric units. 1587.5 EMUs is 1 Master Units
-->
<uint32 name="lineWidth" />
</struct>
<struct name="LineStyle">
<type name="opid" type="OfficeArtFOPTEOPID">
<limitation name="opid" value="0x01CD" />
<limitation name="fBid" value="false" />
<limitation name="fComplex" value="false" />
</type>
<uint32 name="lineStyle" />
</struct>
<struct name="LineDashing">
<type name="opid" type="OfficeArtFOPTEOPID">
<limitation name="opid" value="0x01CE" />
<limitation name="fBid" value="false" />
<limitation name="fComplex" value="false" />
</type>
<uint32 name="lineDashing" />
</struct>
<struct name="LineStartArrowhead">
<type name="opid" type="OfficeArtFOPTEOPID">
<limitation name="opid" value="0x01D0" />
<limitation name="fBid" value="false" />
<limitation name="fComplex" value="false" />
</type>
<uint32 name="lineStartArrowhead">
<limitation expression="<=8" />
</uint32>
</struct>
<struct name="LineEndArrowhead">
<type name="opid" type="OfficeArtFOPTEOPID">
<limitation name="opid" value="0x01D1" />
<limitation name="fBid" value="false" />
<limitation name="fComplex" value="false" />
</type>
<uint32 name="lineEndArrowhead">
<limitation expression="<=8" />
</uint32>
</struct>
<struct name="LineStartArrowWidth">
<type name="opid" type="OfficeArtFOPTEOPID">
<limitation name="opid" value="0x01D2" />
<limitation name="fBid" value="false" />
<limitation name="fComplex" value="false" />
</type>
<uint32 name="lineStartArrowWidth" />
</struct>
<struct name="LineStartArrowLength">
<type name="opid" type="OfficeArtFOPTEOPID">
<limitation name="opid" value="0x01D3" />
<limitation name="fBid" value="false" />
<limitation name="fComplex" value="false" />
</type>
<uint32 name="lineStartArrowLength" />
</struct>
<struct name="LineEndArrowWidth">
<type name="opid" type="OfficeArtFOPTEOPID">
<limitation name="opid" value="0x01D4" />
<limitation name="fBid" value="false" />
<limitation name="fComplex" value="false" />
</type>
<uint32 name="lineEndArrowWidth" />
</struct>
<struct name="LineEndArrowLength">
<type name="opid" type="OfficeArtFOPTEOPID">
<limitation name="opid" value="0x01D5" />
<limitation name="fBid" value="false" />
<limitation name="fComplex" value="false" />
</type>
<uint32 name="lineEndArrowLength" />
</struct>
<struct name="LineJoinStyle">
<type name="opid" type="OfficeArtFOPTEOPID">
<limitation name="opid" value="0x01D6" />
<limitation name="fBid" value="false" />
<limitation name="fComplex" value="false" />
</type>
<uint32 name="lineJoinStyle">
<limitation expression="<=2" />
</uint32>
</struct>
<struct name="LineStyleBooleanProperties">
<type name="opid" type="OfficeArtFOPTEOPID">
<limitation name="opid" value="0x01FF" />
<limitation name="fBid" value="false" />
<limitation name="fComplex" value="false" />
</type>
<bit name="fNoLineDrawDash" />
<bit name="fLineFillShape" />
<bit name="fHitTestLine" />
<bit name="fLine" />
<bit name="fArrowHeadsOK" />
<bit name="fInsetPenOK" />
<bit name="fInsetPen" />
<bit name="reserved1" />
<bit name="reserved2" />
<bit name="fLineOpaqueBackColor" />
<uint6 name="unused1" />
<bit name="fUseNoLineDrawDash" />
<bit name="fUseLineFillShape" />
<bit name="fUseHitTestLine" />
<bit name="fUsefLine" />
<bit name="fUsefArrowHeadsOK" />
<bit name="fUseInsetPenOK" />
<bit name="fUseInsetPen" />
<bit name="unused2" />
<bit name="unused3" />
<bit name="fUsefLineOpaqueBackColor" />
<uint6 name="unused4" />
</struct>
<struct name="ShadowColor">
<type name="opid" type="OfficeArtFOPTEOPID">
<limitation name="opid" value="0x0201" />
<limitation name="fBid" value="false" />
<limitation name="fComplex" value="false" />
</type>
<type name="shadowColor" type="OfficeArtCOLORREF" />
</struct>
<struct name="ShadowOpacity">
<type name="opid" type="OfficeArtFOPTEOPID">
<limitation name="opid" value="0x0204" />
<limitation name="fBid" value="false" />
<limitation name="fComplex" value="false" />
</type>
<type name="shadowOpacity" type="FixedPoint" />
</struct>
<struct name="ShadowOffsetX">
<type name="opid" type="OfficeArtFOPTEOPID">
<limitation name="opid" value="0x0205" />
<limitation name="fBid" value="false" />
<limitation name="fComplex" value="false" />
</type>
<int32 name="shadowOffsetX" />
</struct>
<struct name="ShadowOffsetY">
<type name="opid" type="OfficeArtFOPTEOPID">
<limitation name="opid" value="0x0206" />
<limitation name="fBid" value="false" />
<limitation name="fComplex" value="false" />
</type>
<int32 name="shadowOffsetY" />
</struct>
<struct name="ShadowStyleBooleanPropertiesr">
<type name="opid" type="OfficeArtFOPTEOPID">
<limitation name="opid" value="0x023F" />
<limitation name="fBid" value="false" />
<limitation name="fComplex" value="false" />
</type>
<bit name="fshadowObscured" />
<bit name="fShadow" />
<uint14 name="unused1" />
<bit name="fUsefshadowObscured" />
<bit name="fUsefShadow" />
<uint14 name="unused2" />
</struct>
<struct name="HspMaster">
<type name="opid" type="OfficeArtFOPTEOPID">
<limitation name="opid" value="0x0301" />
<limitation name="fBid" value="false" />
<limitation name="fComplex" value="false" />
</type>
<uint32 name="hspMaster" />
</struct>
<struct name="BWMode">
<type name="opid" type="OfficeArtFOPTEOPID">
<limitation name="opid" value="0x0304" />
<limitation name="fBid" value="false" />
<limitation name="fComplex" value="false" />
</type>
<uint32 name="bWMode">
<limitation expression="<=10" />
</uint32>
</struct>
<struct name="TxflTextFlow">
<type name="opid" type="OfficeArtFOPTEOPID">
<limitation name="opid" value="0x0088" />
<limitation name="fBid" value="false" />
<limitation name="fComplex" value="false" />
</type>
<uint32 name="txflTextFlow" />
</struct>
<struct name="ShapeBooleanProperties">
<type name="opid" type="OfficeArtFOPTEOPID">
<limitation name="opid" value="0x033F" />
<limitation name="fBid" value="false" />
<limitation name="fComplex" value="false" />
</type>
<bit name="fBackground" />
<bit name="reserved1" />
<bit name="fInitiator" />
<bit name="fLockShapeType" />
<bit name="fPreferRelativeResize" />
<bit name="fOleIcon" />
<bit name="fFlipVOverride" />
<bit name="fFlipHOverride" />
<bit name="fPolicyBarcode" />
<bit name="fPolicyLabel" />
<bit name="unused1" />
<bit name="unused2" />
<uint4 name="unused3" />
<bit name="fUsefBackground" />
<bit name="unused4" />
<bit name="fUsefInitiator" />
<bit name="fUsefLockShapeType" />
<bit name="fusePreferrelativeResize" />
<bit name="fUsefOleIcon" />
<bit name="fUsefFlipVOverride" />
<bit name="fUsefFlipHOverride" />
<bit name="fUsefPolicyBarcode" />
<bit name="fUsefPolicyLabel" />
<bit name="unused5" />
<bit name="unused6" />
<uint4 name="unused7" />
</struct>
<struct name="CalloutBooleanProperties">
<type name="opid" type="OfficeArtFOPTEOPID">
<limitation name="opid" value="0x037F" />
<limitation name="fBid" value="false" />
<limitation name="fComplex" value="false" />
</type>
<bit name="fCalloutLengthSpecified" />
<bit name="fCalloutDropAuto" />
<bit name="fCalloutMinusY" />
<bit name="fCalloutMinusX" />
<bit name="fCalloutTextBorder" />
<bit name="fCalloutAccentBar" />
<bit name="fCallout" />
<bit name="unused1a" />
<uint8 name="unused1b" />
<bit name="fUsefCalloutLengthSpecified" />
<bit name="fUsefCalloutDropAuto" />
<bit name="fUsefCalloutMinusY" />
<bit name="fUsefCalloutMinusX" />
<bit name="fUsefCalloutTextBorder" />
<bit name="fUsefCalloutAccentBar" />
<bit name="fUsefCallout" />
<bit name="unused2a" />
<uint8 name="unused2b" />
</struct>
<struct name="LidRegroup">
<type name="opid" type="OfficeArtFOPTEOPID">
<limitation name="opid" value="0x0388" />
<limitation name="fBid" value="false" />
<limitation name="fComplex" value="false" />
</type>
<uint32 name="lidRegroup" />
</struct>
<struct name="WzFillId">
<type name="opid" type="OfficeArtFOPTEOPID">
<limitation name="opid" value="0x0403" />
</type>
<int32 name="wzFillId" />
</struct>
<struct name="OfficeArtCOLORREF">
<uint8 name="red" />
<uint8 name="green" />
<uint8 name="blue" />
<bit name="fPaletteIndex" />
<bit name="fPaletteRGB" />
<bit name="fSystemRGB" />
<bit name="fSchemeIndex" />
<bit name="fSysIndex" />
<bit name="unused1" />
<bit name="unused2" />
<bit name="unused3" />
</struct>
<struct name="OfficeArtChildAnchor">
<type name="rh" type="OfficeArtRecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0xF00F" />
<limitation name="recLen" value="0x10" />
</type>
<int32 name="xLeft" />
<int32 name="yTop" />
<int32 name="xRight" />
<int32 name="yBottom" />
</struct>
<struct name="OfficeArtClientAnchor">
<choice name="anon">
<type type="PptOfficeArtClientAnchor" />
<type type="DocOfficeArtClientAnchor" />
</choice>
</struct>
<struct name="PptOfficeArtClientAnchor">
<type name="rh" type="OfficeArtRecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0xF010" />
<limitation name="recLen" value="0x8|0x10" />
</type>
<type name="rect1" type="SmallRectStruct" condition="rh.recLen==0x8" />
<type name="rect2" type="RectStruct" condition="rh.recLen==0x10" />
</struct>
<struct name="DocOfficeArtClientAnchor">
<type name="rh" type="OfficeArtRecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0xF010" />
<limitation name="recLen" value="0x4" />
</type>
<int32 name="clientAnchor" />
</struct>
<struct name="OfficeArtFPSPL">
<type name="rh" type="OfficeArtRecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0xF11D" />
<limitation name="recLen" value="4" />
</type>
<uint30 name="spid" />
<bit name="reserved1" />
<bit name="fLast" />
</struct>
<struct name="RectStruct">
<int32 name="top" />
<int32 name="left" />
<int32 name="right" />
<int32 name="bottom" />
</struct>
<struct name="SmallRectStruct">
<int16 name="top" />
<int16 name="left" />
<int16 name="right" />
<int16 name="bottom" />
</struct>
<struct name="OfficeArtClientData">
<choice name="anon">
<type type="DocOfficeArtClientData" />
<type type="PptOfficeArtClientData" />
</choice>
</struct>
<struct name="PptOfficeArtClientData">
<type name="rh" type="OfficeArtRecordHeader">
<limitation name="recVer" value="0xF" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0xF011" />
</type>
<type name="shapeFlagsAtom" type="ShapeFlagsAtom" optional="true" />
<type name="shapeFlags10Atom" type="ShapeFlags10Atom" optional="true" />
<type name="exObjRefAtom" type="ExObjRefAtom" optional="true" />
<type name="animationInfo" type="AnimationInfoContainer"
optional="true" />
<type name="mouseClickInteractiveInfo" type="MouseClickInteractiveInfoContainer"
optional="true" />
<type name="mouseOverInteractiveInfo" type="MouseOverInteractiveInfoContainer"
optional="true" />
<!-- sometimes this array occurs here -->
<type name="rgShapeClientRoundtripData0" \
type="ShapeClientRoundtripDataSubcontainerOrAtom" array="true" />
<type name="placeholderAtom" type="PlaceholderAtom" optional="true" />
<type name="recolorInfoAtom" type="RecolorInfoAtom" optional="true" />
<type name="unknown1" type="UnknownOfficeArtClientDataChild"
optional="true" />
<type name="rgShapeClientRoundtripData" \
type="ShapeClientRoundtripDataSubcontainerOrAtom" array="true" />
<type name="unknown2" type="UnknownOfficeArtClientDataChild"
optional="true" />
</struct>
<struct name="DocOfficeArtClientData">
<type name="rh" type="OfficeArtRecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0xF011" />
<limitation name="recLen" value="4" />
</type>
<uint32 name="clientData" />
</struct>
<struct name="ShapeFlagsAtom">
<type name="rh" type="OfficeArtRecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0xBDB" />
<limitation name="recLen" value="1" />
</type>
<uint8 name="todo" count="rh.recLen" />
</struct>
<struct name="ShapeFlags10Atom">
<type name="rh" type="OfficeArtRecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0xBDC" />
<limitation name="recLen" value="1" />
</type>
<uint8 name="todo" count="rh.recLen" />
</struct>
<struct name="ExObjRefAtom">
<type name="rh" type="OfficeArtRecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0xBC1" />
<limitation name="recLen" value="4" />
</type>
<uint32 name="exObjIdRef" />
</struct>
<struct name="AnimationInfoContainer">
<type name="rh" type="OfficeArtRecordHeader">
<limitation name="recVer" value="0xF" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0x1014" />
</type>
<type name="animationAtom" type="AnimationInfoAtom" />
<type name="animationSound" type="SoundContainer" optional="true" />
</struct>
<struct name="AnimationInfoAtom">
<type name="rh" type="OfficeArtRecordHeader">
<limitation name="recVer" value="0x1" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0xFF1" />
<limitation name="recLen" value="0x1C" />
</type>
<uint8 name="todo" count="0x1C" />
</struct>
<struct name="SoundContainer">
<type name="rh" type="OfficeArtRecordHeader">
<limitation name="recVer" value="0xF" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0x7E6" />
</type>
<uint8 name="todo" count="rh.recLen" />
</struct>
<struct name="MouseClickInteractiveInfoContainer">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0xF" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0xFF2" />
</type>
<type name="interactiveInfoAtom" type="InteractiveInfoAtom" />
<type name="macroNameAtom" type="MacroNameAtom" condition="rh.recLen>24" />
</struct>
<struct name="MouseOverInteractiveInfoContainer">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0xF" />
<limitation name="recInstance" value="1" />
<limitation name="recType" value="0xFF2" />
</type>
<type name="interactiveInfoAtom" type="InteractiveInfoAtom" />
<type name="macroNameAtom" type="MacroNameAtom" condition="rh.recLen>24" />
</struct>
<struct name="InteractiveInfoAtom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0" />
<!-- value should be 0xFF3, but value 0xFF2 has been observed too -->
<limitation name="recType" value="0xFF2|0xFF3" />
<limitation name="recLen" value="0x10" />
</type>
<uint32 name="soundIdRef" />
<uint32 name="exHyperlinkIdRef" />
<uint8 name="action">
<limitation expression="<8" />
</uint8>
<uint8 name="oleVerb">
<limitation expression="<3" />
</uint8>
<uint8 name="jump">
<limitation expression="<7" />
</uint8>
<bit name="fAnimated" />
<bit name="fStopSound" />
<bit name="fCustomSoundReturn" />
<bit name="fVisited" />
<uint4 name="reserved" />
<uint8 name="hyperlinkType" />
<uint8 name="unused" count="3" />
</struct>
<struct name="MacroNameAtom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="2" />
<limitation name="recType" value="0xFBA" />
<limitation name="recLen" expression="%2==0" />
</type>
<uint8 name="macroName" count="rh.recLen" />
</struct>
<struct name="PlaceholderAtom">
<type name="rh" type="OfficeArtRecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0xBC3" />
<limitation name="recLen" value="8" />
</type>
<int32 name="position" />
<uint8 name="placementId" />
<uint8 name="size" />
<uint16 name="unused" />
</struct>
<struct name="RecolorInfoAtom">
<type name="rh" type="OfficeArtRecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0xFE7" />
</type>
<uint8 name="todo" count="rh.recLen" />
</struct>
<struct name="OutlineTextRefAtom">
<type name="rh" type="OfficeArtRecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0xF9E" />
<limitation name="recLen" value="4" />
</type>
<int32 name="index">
<limitation expression=">=0" />
</int32>
</struct>
<struct name="ShapeClientRoundtripDataSubcontainerOrAtom">
<!--
<type name="rh" type="OfficeArtRecordHeader"> <limitation
name="recType" value="0x1388|0xBDD|0x41F|0x420|0x426" /> </type>
<uint8 name="todo" count="rh.recLen" />
-->
<choice name="anon">
<type type="ShapeProgsTagContainer" />
<type type="RoundTripNewPlaceHolderId12Atom" />
<type type="RoundTripShapeId12Atom" />
<type type="RoundTripHFPlaceholder12Atom" />
<type type="RoundTripShapeCheckSumForCustomLayouts12Atom" />
</choice>
</struct>
<struct name="ShapeProgsTagContainer">
<type name="rh" type="OfficeArtRecordHeader">
<limitation name="recVer" value="0xF" />
<limitation name="recInstance" value="0|1|2" />
<limitation name="recType" value="0x1388" />
</type>
<type name="rgChildRec" type="ShapeProgTagsSubContainerOrAtom"
array="true" />
</struct>
<struct name="ShapeProgTagsSubContainerOrAtom">
<choice name="anon">
<type type="ProgStringTagContainer" />
<type type="ShapeProgBinaryTagContainer" />
</choice>
</struct>
<struct name="ShapeProgBinaryTagContainer">
<type name="rh" type="OfficeArtRecordHeader">
<limitation name="recVer" value="0xF" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0x138A" />
</type>
<type name="rec" type="ShapeProgBinaryTagSubContainerOrAtom" />
</struct>
<struct name="ShapeProgBinaryTagSubContainerOrAtom">
<choice name="anon">
<type type="PP9ShapeBinaryTagExtension" />
<type type="PP10ShapeBinaryTagExtension" />
<type type="PP11ShapeBinaryTagExtension" />
<type type="UnknownBinaryTag" />
</choice>
</struct>
<struct name="PP9ShapeBinaryTagExtension">
<type name="rh" type="OfficeArtRecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0xFBA" />
<limitation name="recLen" value="0xE" />
</type>
<uint16 name="tagName" count="7">
<!-- <limitation value='"___PPT9"' /> -->
</uint16>
<type name="rhData" type="RecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0x138B" />
</type>
<type name="styleTextProp9Atom" type="StyleTextProp9Atom" />
</struct>
<struct name="PP10ShapeBinaryTagExtension">
<type name="rh" type="OfficeArtRecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0xFBA" />
<limitation name="recLen" value="0x10" />
</type>
<uint16 name="tagName" count="8">
<!-- <limitation value='"___PPT10"' /> -->
</uint16>
<type name="rhData" type="RecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0x138B" />
</type>
<uint8 name="todo" count="rhData.recLen" />
</struct>
<struct name="PP11ShapeBinaryTagExtension">
<type name="rh" type="OfficeArtRecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0xFBA" />
<limitation name="recLen" value="0x10" />
</type>
<uint16 name="tagName" count="8">
<!-- <limitation value='"___PPT11"' /> -->
</uint16>
<type name="rhData" type="RecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0x138B" />
</type>
<uint8 name="todo" count="rhData.recLen" />
</struct>
<struct name="RoundTripNewPlaceHolderId12Atom">
<type name="rh" type="OfficeArtRecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0xBDD" />
<limitation name="recLen" value="1" />
</type>
<uint8 name="newPlaceHolderId" />
</struct>
<struct name="RoundTripShapeId12Atom">
<type name="rh" type="OfficeArtRecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0x41F" />
<limitation name="recLen" value="4" />
</type>
<uint32 name="shapeId" />
</struct>
<struct name="RoundTripHFPlaceholder12Atom">
<type name="rh" type="OfficeArtRecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0x420" />
<limitation name="recLen" value="1" />
</type>
<uint8 name="placeHolderId" />
</struct>
<struct name="RoundTripShapeCheckSumForCustomLayouts12Atom">
<type name="rh" type="OfficeArtRecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0x426" />
<!-- documentations says this field should be size 8 -->
<limitation name="recLen" value="8|40" />
</type>
<uint32 name="shapeCheckSum" />
<uint32 name="textCheckSum" />
<uint8 name="unknown" count="rh.recLen-8" />
</struct>
<struct name="OfficeArtClientTextBox">
<choice name="anon">
<type type="PptOfficeArtClientTextBox" />
<type type="DocOfficeArtClientTextBox" />
</choice>
</struct>
<struct name="PptOfficeArtClientTextBox">
<type name="rh" type="OfficeArtRecordHeader">
<limitation name="recVer" value="0|0xF" />
<!-- documentation says value should be 0 -->
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0xF00D" />
<limitation name="recLen" expression="!=4" />
</type>
<type name="rgChildRec" array="true" size="rh.recLen"
type="TextClientDataSubContainerOrAtom" />
</struct>
<struct name="DocOfficeArtClientTextBox">
<type name="rh" type="OfficeArtRecordHeader">
<limitation name="recVer" value="0|0xF" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0xF00D" />
<limitation name="recLen" value="0x4" />
</type>
<uint32 name="clientTextBox" />
</struct>
<struct name="TextRulerAtom">
<type name="rh" type="RecordHeader">
<limitation name="recVer" value="0" />
<limitation name="recInstance" value="0" />
<limitation name="recType" value="0xFA6" />
</type>
<type name="textRuler" type="TextRuler" />
</struct>
<struct name="OfficeArtIDCL">
<uint32 name="dgid" />
<uint32 name="cspidCur" />
</struct>
<struct name="OfficeArtFOPTE">
<type name="opid" type="OfficeArtFOPTEOPID" />
<int32 name="op" />
</struct>
<struct name="OfficeArtFOPTEOPID">
<uint14 name="opid" />
<bit name="fBid" />
<bit name="fComplex" />
</struct>
<struct name="OfficeArtColorMRUContainer">
<type name="rh" type="OfficeArtRecordHeader">
<limitation name="recVer" value="0x0" />
<limitation name="recType" value="0xF11A" />
<limitation expression="recLen==4*recInstance" />
</type>
<type name="rgmsocr" type="MSOCR" count="rh.recInstance" />
</struct>
<struct name="MSOCR">
<uint8 name="red" />
<uint8 name="green" />
<uint8 name="blue" />
<uint3 name="unused1" />
<bit name="fSchemeIndex" />
<uint4 name="unused2" />
<!--
an addition limitation is needed that says that if fSchemeIndex ==1
then green and blue must be 0
-->
</struct>
<struct name="OfficeArtSplitMenuColorContainer">
<type name="rh" type="OfficeArtRecordHeader">
<limitation name="recVer" value="0x0" />
<limitation name="recInstance" value="0x4" />
<limitation name="recType" value="0xF11E" />
<limitation name="recLen" value="0x10" />
</type>
<type name="smca" type="MSOCR" count="4" />
</struct>
<struct name="todo">
<!--
a placeholder for structures that are not in the document
specification yet
-->
<type name="rh" type="RecordHeader">
<!--
disallow structures that are implemented <limitation name="recType"
value="!1000" />
-->
</type>
<uint8 name="anon" count="rh.recLen" />
</struct>
<struct name="WordDocument">
<type name="fib" type="Fib" />
</struct>
<struct name="Fib">
<type name="base" type="FibBase" />
<uint16 name="csw">
<limitation value="14" />
</uint16>
<type name="fibRgW" type="FibRgW97" />
<uint16 name="cslw">
<limitation value="22" />
</uint16>
<type name="fibRgLw" type="FibRgLw97" />
<uint16 name="cbRgFcLcb">
<limitation value="0x5D|0x6C|0x88|0xA4|0xB7" />
</uint16>
<type name="fibRgFcLcbBlob" type="FibRgFcLcb97" />
<type name="fibRgFcLcbBlob2" type="FibRgFcLcb2000" condition="cbRgFcLcb>=0x6C" \
/> <type name="fibRgFcLcbBlob3" type="FibRgFcLcb2002" condition="cbRgFcLcb>=0x88" \
/> <uint16 name="cswNew">
<limitation value="0|2|5" />
</uint16>
<uint8 name="fibRgCswNew" count="2*cswNew" />
<!-- <type name="fibRgCswNew" type="fibRgCswNew" />-->
<uint8 name="trail" count="fibRgLw.cbMac-156-8*cbRgFcLcb-2*cswNew" />
</struct>
<struct name="FibBase">
<uint16 name="wIdent">
<limitation value="0xA5EC" />
</uint16>
<uint16 name="nFib">
<limitation value="0xC0|0xC1|0xC2|0x101|0x10B|0x10C|0x112" />
</uint16>
<uint16 name="unused" />
<uint16 name="lid" />
<uint16 name="pnNext" />
<bit name="fDot" />
<bit name="fGlsy" />
<bit name="fComplex" />
<bit name="fHasPic" />
<uint4 name="cQuickSaves" />
<bit name="fEncrypted" />
<bit name="fWhichTblStm" />
<bit name="fReadOnlyRecommended" />
<bit name="fWriteReservation" />
<bit name="fExtChar" />
<bit name="fLoadOverride" />
<bit name="fFarEast" />
<bit name="fObfuscated" />
<uint16 name="nFibBack">
<limitation value="0xBF|0xC1" />
</uint16>
<uint32 name="IKey" />
<uint8 name="envr">
<limitation value="0" />
</uint8>
<bit name="fMac">
<limitation value="false" />
</bit>
<bit name="fEmptySpecial" />
<bit name="fLoadOverridePage" />
<bit name="reserved1" />
<bit name="reserved2" />
<uint3 name="fSpare0" />
<uint16 name="reserved3">
<limitation value="0" />
</uint16>
<uint16 name="reserved4">
<limitation value="0" />
</uint16>
<uint32 name="reserved5" />
<uint32 name="reserved6" />
</struct>
<struct name="FibRgW97">
<uint16 name="reserved1" />
<uint16 name="reserved2" />
<uint16 name="reserved3" />
<uint16 name="reserved4" />
<uint16 name="reserved5" />
<uint16 name="reserved6" />
<uint16 name="reserved7" />
<uint16 name="reserved8" />
<uint16 name="reserved9" />
<uint16 name="reserved10" />
<uint16 name="reserved11" />
<uint16 name="reserved12" />
<uint16 name="reserved13" />
<uint16 name="lidFE" />
</struct>
<struct name="FibRgLw97">
<uint32 name="cbMac" />
<uint32 name="reserved1" />
<uint32 name="reserved2" />
<int32 name="ccpText">
<limitation expression=">=0" />
</int32>
<int32 name="ccpFtn">
<limitation expression=">=0" />
</int32>
<int32 name="ccpHdd">
<limitation expression=">=0" />
</int32>
<uint32 name="reserved3">
<limitation value="0" />
</uint32>
<int32 name="ccpAtn">
<limitation expression=">=0" />
</int32>
<int32 name="ccpEdn">
<limitation expression=">=0" />
</int32>
<int32 name="ccpTxbx">
<limitation expression=">=0" />
</int32>
<int32 name="ccpHdrTxbx">
<limitation expression=">=0" />
</int32>
<uint32 name="reserved4" />
<uint32 name="reserved5" />
<uint32 name="reserved6" />
<uint32 name="reserved7" />
<uint32 name="reserved8" />
<uint32 name="reserved9" />
<uint32 name="reserved10" />
<uint32 name="reserved11" />
<uint32 name="reserved12" />
<uint32 name="reserved13">
<limitation value="0" />
</uint32>
<uint32 name="reserved14">
<limitation value="0" />
</uint32>
</struct>
<struct name="FibRgFcLcb97">
<uint32 name="fcStshfOrig" />
<uint32 name="lcbStshfOrig" />
<uint32 name="fcStshf" />
<uint32 name="lcbStshf" />
<uint32 name="fcPlcffndRef" />
<uint32 name="lcbPlcffndRef" />
<uint32 name="fcPlcffndTxt" />
<uint32 name="lcbPlcffndTxt" />
<uint32 name="fcPlcfandRef" />
<uint32 name="lcbPlcfandRef" />
<uint32 name="fcPlcfandTxt" />
<uint32 name="lcbPlcfandTxt" />
<uint32 name="fcPlcfSed" />
<uint32 name="lcbPlcfSed" />
<uint32 name="fcPlcPad" />
<uint32 name="lcbPlcPad" />
<uint32 name="fcPlcfPhe" />
<uint32 name="lcbPlcfPhe" />
<uint32 name="fcSttbfGlsy" />
<uint32 name="lcbSttbfGlsy" />
<uint32 name="fcPlcfGlsy" />
<uint32 name="lcbPlcfGlsy" />
<uint32 name="fcPlcfHdd" />
<uint32 name="lcbPlcfHdd" />
<uint32 name="fcPlcfBteChpx" />
<uint32 name="lcbPlcfBteChpx" />
<uint32 name="fcPlcfBtePapx" />
<uint32 name="lcbPlcfBtePapx" />
<uint32 name="fcPlcfSea" />
<uint32 name="lcbPlcfSea" />
<uint32 name="fcSttbfFfn" />
<uint32 name="lcbSttbfFfn" />
<uint32 name="fcPlcfFldMom" />
<uint32 name="lcbPlcfFldMom" />
<uint32 name="fcPlcfFldHdr" />
<uint32 name="lcbPlcfFldHdr" />
<uint32 name="fcPlcfFldFtn" />
<uint32 name="lcbPlcfFldFtn" />
<uint32 name="fcPlcfFldAtn" />
<uint32 name="lcbPlcfFldAtn" />
<uint32 name="fcPlcfFldMcr" />
<uint32 name="lcbPlcfFldMcr" />
<uint32 name="fcSttbfBkmk" />
<uint32 name="lcbSttbfBkmk" />
<uint32 name="fcPlcfBkf" />
<uint32 name="lcbPlcfBkf" />
<uint32 name="fcPlcfBkl" />
<uint32 name="lcbPlcfBkl" />
<uint32 name="fcCmds" />
<uint32 name="lcbCmds" />
<uint32 name="fcUnused1" />
<uint32 name="lcbUnused1" />
<uint32 name="fcSttbfMcr" />
<uint32 name="lcbSttbfMcr" />
<uint32 name="fcPrDrvr" />
<uint32 name="lcbPrDrvr" />
<uint32 name="fcPrEnvPort" />
<uint32 name="lcbPrEnvPort" />
<uint32 name="fcPrEnvLand" />
<uint32 name="lcbPrEnvLand" />
<uint32 name="fcWss" />
<uint32 name="lcbWss" />
<uint32 name="fcDop" />
<uint32 name="lcbDop" />
<uint32 name="fcSttbfAssoc" />
<uint32 name="lcbSttbfAssoc" />
<uint32 name="fcClx" />
<uint32 name="lcbClx" />
<uint32 name="fcPlcfPgdFtn" />
<uint32 name="lcbPlcfPgdFtn" />
<uint32 name="fcAutosaveSource" />
<uint32 name="lcbAutosaveSource" />
<uint32 name="fcGrpXstAtnOwners" />
<uint32 name="lcbGrpXstAtnOwners" />
<uint32 name="fcSttbfAtnBkmk" />
<uint32 name="lcbSttbfAtnBkmk" />
<uint32 name="fcUnused2" />
<uint32 name="lcbUnused2" />
<uint32 name="fcUnused3" />
<uint32 name="lcbUnused3" />
<uint32 name="fcPlcSpaMom" />
<uint32 name="lcbPlcSpaMom" />
<uint32 name="fcPlcSpaHdr" />
<uint32 name="lcbPlcSpaHdr" />
<uint32 name="fcPlcfAtnBkf" />
<uint32 name="lcbPlcfAtnBkf" />
<uint32 name="fcPlcfAtnBkl" />
<uint32 name="lcbPlcfAtnBkl" />
<uint32 name="fcPms" />
<uint32 name="lcbPms" />
<uint32 name="fcFormFldSttbs" />
<uint32 name="lcbFormFldSttbs" />
<uint32 name="fcPlcfendRef" />
<uint32 name="lcbPlcfendRef" />
<uint32 name="fcPlcfendTxt" />
<uint32 name="lcbPlcfendTxt" />
<uint32 name="fcPlcfFldEdn" />
<uint32 name="lcbPlcfFldEdn" />
<uint32 name="fcUnused4" />
<uint32 name="lcbUnused4" />
<uint32 name="fcDggInfo" />
<uint32 name="lcbDggInfo" />
<uint32 name="fcSttbfRMark" />
<uint32 name="lcbSttbfRMark" />
<uint32 name="fcSttbfCaption" />
<uint32 name="lcbSttbfCaption" />
<uint32 name="fcSttbfAutoCaption" />
<uint32 name="lcbSttbfAutoCaption" />
<uint32 name="fcPlcfWkb" />
<uint32 name="lcbPlcfWkb" />
<uint32 name="fcPlcfSpl" />
<uint32 name="lcbPlcfSpl" />
<uint32 name="fcPlcftxbxTxt" />
<uint32 name="lcbPlcftxbxTxt" />
<uint32 name="fcPlcfFldTxbx" />
<uint32 name="lcbPlcfFldTxbx" />
<uint32 name="fcPlcfHdrtxbxTxt" />
<uint32 name="lcbPlcfHdrtxbxTxt" />
<uint32 name="fcPlcffldHdrTxbx" />
<uint32 name="lcbPlcffldHdrTxbx" />
<uint32 name="fcStwUser" />
<uint32 name="lcbStwUser" />
<uint32 name="fcSttbTtmbd" />
<uint32 name="lcbSttbTtmbd" />
<uint32 name="fcCookieData" />
<uint32 name="lcbCookieData" />
<uint32 name="fcPgdMotherOldOld" />
<uint32 name="lcbPgdMotherOldOld" />
<uint32 name="fcBkdMotherOldOld" />
<uint32 name="lcbBkdMotherOldOld" />
<uint32 name="fcPgdFtnOldOld" />
<uint32 name="lcbPgdFtnOldOld" />
<uint32 name="fcBkdFtnOldOld" />
<uint32 name="lcbBkdFtnOldOld" />
<uint32 name="fcPgdEdnOldOld" />
<uint32 name="lcbPgdEdnOldOld" />
<uint32 name="fcBkdEdnOldOld" />
<uint32 name="lcbBkdEdnOldOld" />
<uint32 name="fcSttbfIntlFld" />
<uint32 name="lcbSttbfIntlFld" />
<uint32 name="fcRouteSlip" />
<uint32 name="lcbRouteSlip" />
<uint32 name="fcSttbSavedBy" />
<uint32 name="lcbSttbSavedBy" />
<uint32 name="fcSttbFnm" />
<uint32 name="lcbSttbFnm" />
<uint32 name="fcPlfLst" />
<uint32 name="lcbPlfLst" />
<uint32 name="fcPlfLfo" />
<uint32 name="lcbPlfLfo" />
<uint32 name="fcPlcfTxbxBkd" />
<uint32 name="lcbPlcfTxbxBkd" />
<uint32 name="fcPlcfTxbxHdrBkd" />
<uint32 name="lcbPlcfTxbxHdrBkd" />
<uint32 name="fcDocUndoWord9" />
<uint32 name="lcbDocUndoWord9" />
<uint32 name="fcRgbUse" />
<uint32 name="lcbRgbUse" />
<uint32 name="fcUsp" />
<uint32 name="lcbUsp" />
<uint32 name="fcUskf" />
<uint32 name="lcbUskf" />
<uint32 name="fcPlcupcRgbUse" />
<uint32 name="lcbPlcupcRgbUse" />
<uint32 name="fcPlcupcUsp" />
<uint32 name="lcbPlcupcUsp" />
<uint32 name="fcSttbGlsyStyle" />
<uint32 name="lcbSttbGlsyStyle" />
<uint32 name="fcPlgosl" />
<uint32 name="lcbPlgosl" />
<uint32 name="fcPlcocx" />
<uint32 name="lcbPlcocx" />
<uint32 name="fcPlcfBteLvc" />
<uint32 name="lcbPlcfBteLvc" />
<uint32 name="dwLowDateTime" />
<uint32 name="dwHighDateTime" />
<uint32 name="fcPlcfLvcPre10" />
<uint32 name="lcbPlcfLvcPre10" />
<uint32 name="fcPlcfAsumy" />
<uint32 name="lcbPlcfAsumy" />
<uint32 name="fcPlcfGram" />
<uint32 name="lcbPlcfGram" />
<uint32 name="fcSttbListNames" />
<uint32 name="lcbSttbListNames" />
<uint32 name="fcSttbfUssr" />
<uint32 name="lcbSttbfUssr" />
</struct>
<struct name="FibRgFcLcb2000">
<uint32 name="fcPlcfTch" />
<uint32 name="lcbPlcfTch" />
<uint32 name="fcRmdThreading" />
<uint32 name="lcbRmdThreading" />
<uint32 name="fcMid" />
<uint32 name="lcbMid" />
<uint32 name="fcSttbRgtplc" />
<uint32 name="lcbSttbRgtplc" />
<uint32 name="fcMsoEnvelope" />
<uint32 name="lcbMsoEnvelope" />
<uint32 name="fcPlcfLad" />
<uint32 name="lcbPlcfLad" />
<uint32 name="fcRgDofr" />
<uint32 name="lcbRgDofr" />
<uint32 name="fcPlcosl" />
<uint32 name="lcbPlcosl" />
<uint32 name="fcPlcfCookieOld" />
<uint32 name="lcbPlcfCookieOld" />
<uint32 name="fcPgdMotherOld" />
<uint32 name="lcbPgdMotherOld" />
<uint32 name="fcBkdMotherOld" />
<uint32 name="lcbBkdMotherOld" />
<uint32 name="fcPgdFtnOld" />
<uint32 name="lcbPgdFtnOld" />
<uint32 name="fcBkdFtnOld" />
<uint32 name="lcbBkdFtnOld" />
<uint32 name="fcPgdEdnOld" />
<uint32 name="lcbPgdEdnOld" />
<uint32 name="fcBkdEdnOld" />
<uint32 name="lcbBkdEdnOld" />
</struct>
<struct name="FibRgFcLcb2002">
<uint32 name="fcUnused1" />
<uint32 name="lcbUnused1" />
<uint32 name="fcPlcfPgp" />
<uint32 name="lcbPlcfPgp" />
<uint32 name="fcPlcfuim" />
<uint32 name="lcbPlcfuim" />
<uint32 name="fcPlfguidUim" />
<uint32 name="lcbPlfguidUim" />
<uint32 name="fcAtrdExtra" />
<uint32 name="lcbAtrdExtra" />
<uint32 name="fcPlrsid" />
<uint32 name="lcbPlrsid" />
<uint32 name="fcSttbfBkmkFactoid" />
<uint32 name="lcbSttbfBkmkFactoid" />
<uint32 name="fcPlcfBkfFactoid" />
<uint32 name="lcbPlcfBkfFactoid" />
<uint32 name="fcPlcfcookie" />
<uint32 name="lcbPlcfcookie" />
<uint32 name="fcPlcfBklFactoid" />
<uint32 name="lcbPlcfBklFactoid" />
<uint32 name="fcFactoidData" />
<uint32 name="lcbFactoidData" />
<uint32 name="fcDocUndo" />
<uint32 name="lcbDocUndo" />
<uint32 name="fcSttbfBkmkFcc" />
<uint32 name="lcbSttbfBkmkFcc" />
<uint32 name="fcPlcfBkfFcc" />
<uint32 name="lcbPlcfBkfFcc" />
<uint32 name="fcPlcfBklFcc" />
<uint32 name="lcbPlcfBklFcc" />
<uint32 name="fcSttbfbkmkBPRepairs" />
<uint32 name="lcbSttbfbkmkBPRepairs" />
<uint32 name="fcPlcfbkfBPRepairs" />
<uint32 name="lcbPlcfbkfBPRepairs" />
<uint32 name="fcPlcfbklBPRepairs" />
<uint32 name="lcbPlcfbklBPRepairs" />
<uint32 name="fcPmsNew" />
<uint32 name="lcbPmsNew" />
<uint32 name="fcODSO" />
<uint32 name="lcbODSO" />
<uint32 name="fcPlcfpmiOldXP" />
<uint32 name="lcbPlcfpmiOldXP" />
<uint32 name="fcPlcfpmiNewXP" />
<uint32 name="lcbPlcfpmiNewXP" />
<uint32 name="fcPlcfpmiMixedXP" />
<uint32 name="lcbPlcfpmiMixedXP" />
<uint32 name="fcUnused2" />
<uint32 name="lcbUnused2" />
<uint32 name="fcPlcffactoid" />
<uint32 name="lcbPlcffactoid" />
</struct>
<struct name="Table">
<type name="stsh" type="STSH" size="468" />
<type name="plcfSed" type="PlcfSed" size="20" />
<!--
size should be gotten from lcbPlcfSed
-->
<type name="plcfHdd" type="Plcfhdd" size="52" />
<type name="plcfBteChpx" type="PlcBteChpx" size="12" />
<type name="plcfBtePapx" type="PlcfBtePapx" size="12" />
<type name="cmds" type="Tcg" size="12" />
<type name="clx" type="Clx" size="21" />
<type name="sttbfFfn" type="SttbfFfn" size="246" />
<uint8 name="dop" count="600" />
</struct>
<struct name="STSH">
<type name="lpstshi" type="LPStshi" />
<type name="rglpstd" type="LPStd" count="20" />
</struct>
<struct name="LPStshi">
<uint16 name="cbSthi" />
<uint8 name="stshi" count="cbSthi" />
</struct>
<struct name="LPStd">
<uint16 name="cbStd" />
<uint8 name="std" count="cbStd" />
<uint8 name="padding" condition="cbStd%2==1" />
</struct>
<struct name="PlcfSed">
<uint32 name="aCP" count="2" />
<type name="aSed" type="Sed" count="1" />
</struct>
<struct name="Sed">
<uint16 name="fn" />
<int32 name="fcSepx" />
<uint16 name="fnMpr" />
<uint32 name="fcMpr" />
</struct>
<struct name="Plcfhdd">
<uint32 name="aCP" count="13" />
</struct>
<struct name="PlcBteChpx">
<uint32 name="aCP" count="2" />
<uint32 name="aPnBteChpx" count="1" />
</struct>
<struct name="PlcfBtePapx">
<uint32 name="aCP" count="2" />
<uint32 name="aPnBteChpx" count="1" />
</struct>
<struct name="Tcg">
<uint8 name="nTcgVer">
<limitation value="0" />
</uint8>
<uint8 name="todo" count="11" />
</struct>
<struct name="Clx">
<type name="RgPrc" type="Pcr" array="true" />
<type name="pcdt" type="Pcdt" />
</struct>
<struct name="Pcr">
<uint8 name="clxt">
<limitation value="1" />
</uint8>
<type name="prcData" type="PrcData" />
</struct>
<struct name="PrcData">
<int16 name="cbGrpprl">
<limitation expression=">=0" />
<limitation expression="<=16290" />
<limitation expression="%2==0" />
</int16>
<type name="GrpPrl" type="Sprm" count="cbGrpprl/2" />
</struct>
<struct name="Sprm">
<uint9 name="ispmd" />
<bit name="fSpec" />
<uint3 name="sgc" />
<uint3 name="spra" />
</struct>
<struct name="Pcdt">
<uint8 name="clxt">
<limitation value="2" />
</uint8>
<uint32 name="lcb" />
<type name="PlcPcd" type="Pcd" count="lcb/8" />
</struct>
<struct name="Pcd">
<bit name="fNoParaLast" />
<bit name="fR1" />
<bit name="fDirtly">
<limitation value="false" />
</bit>
<bit name="fR2" />
<uint12 name="fR3" />
<type name="fc" type="FCompressed" />
<type name="prm" type="Prm" />
</struct>
<struct name="FCompressed">
<uint30 name="fc" />
<bit name="fCompressed" />
<bit name="r1" />
</struct>
<struct name="Prm">
<choice name="prm">
<type type="Prm0" />
<type type="Prm1" />
</choice>
</struct>
<struct name="Prm0">
<bit name="fComplex">
<limitation value="false" />
</bit>
<uint7 name="isprm" />
<uint8 name="val" />
</struct>
<struct name="Prm1">
<bit name="fComplex">
<limitation value="true" />
</bit>
<uint15 name="igrpprl" />
</struct>
<struct name="SttbfFfn">
<uint16 name="cData" />
<uint16 name="cbExtra">
<limitation value="0" />
</uint16>
<type name="data" type="SttbfFfnEntry" count="cData" />
</struct>
<struct name="SttbfFfnEntry">
<uint8 name="cchData" />
<uint8 name="Data" count="cchData" />
</struct>
<struct name="CodePageString">
<!-- limitation here is complicated: todo -->
<uint32 name="size">
<!-- <limitation expression="%2==0" /> -->
</uint32>
<!-- needs padding to a multiple of 4 -->
<uint8 name="characters" count="4*(size/4)+((size%4!=0)?4:0)" />
</struct>
<struct name="FILETIME">
<uint32 name="dwLowDateTime" />
<uint32 name="dwHighDateTime" />
</struct>
<struct name="ClipboardData">
<uint32 name="size" />
<uint32 name="format" />
<!-- needs padding to a multiple of 4 -->
<uint8 name="data" count="4*(size/4)+((size%4!=0)?4:0)-4" />
</struct>
<struct name="PropertyIdentifierAndOffset">
<uint32 name="propertyIdentifier" />
<uint32 name="offset" />
</struct>
<struct name="TypedPropertyValue">
<!--
size="../PropertySetStream._count()"">
-->
<uint16 name="type" />
<uint16 name="padding">
<!-- <limitation value="0" />-->
</uint16>
<uint16 name="vt_I2" condition="type==2" />
<uint16 name="paddingI2" condition="type==2" />
<uint32 name="vg_ERROR" condition="type==10" />
<type name="vt_lpstr" type="CodePageString" condition="type==30" />
<type name="vg_FILETIME" type="FILETIME" condition="type==64" />
<type name="vg_CF" type="ClipboardData" condition="type==71" />
<!--
<uint8 name="padding"
count="../PropertySetStream[position()=this._arraypos]" />
-->
</struct>
<struct name="PropertySet">
<uint32 name="size" />
<uint32 name="numProperties" />
<type name="propertyIdentifierAndOffset" type="PropertyIdentifierAndOffset"
count="numProperties" />
<type name="property" type="TypedPropertyValue" count="numProperties" />
</struct>
<struct name="PropertySetStream">
<uint16 name="byteOrder">
<limitation value="0xFFFE" />
</uint16>
<uint16 name="version" />
<uint32 name="systemIdentifier" />
<uint8 name="clsID" count="16" />
<uint32 name="numPropertySets">
<limitation value="1|2" />
</uint32>
<uint8 name="fmtID0" count="16" />
<uint32 name="offset0" />
<uint8 name="fmtID1" count="16" condition="numPropertySets==2" />
<uint32 name="offset1" condition="numPropertySets==2" />
<type name="propertySet1" type="PropertySet" />
<type name="propertySet2" type="PropertySet" condition="numPropertySets==2" />
<type name="padding" type="Byte" array="true" />
</struct>
<struct name="SummaryInformationPropertySetStream">
<type name="propertySet" type="PropertySetStream">
<limitation name="version" value="0" />
</type>
</struct>
<struct name="DocumentSummaryInformationPropertySetStream">
<type name="propertySet" type="PropertySetStream">
<limitation name="version" value="0" />
</type>
</struct>
<stream name="PowerPointDocument" key="PowerPoint Document"
type="PowerPointStructs" />
<stream name="CurrentUser" key="Current User" type="CurrentUserStream" />
<stream name="Pictures" key="Pictures" type="OfficeArtBStoreDelay" />
<stream name="WordDocument" key="WordDocument" type="WordDocument" />
<stream name="1Table" key="1Table" type="Table" />
<stream name="SummaryInformation" key="SummaryInformation"
type="SummaryInformationPropertySetStream" />
<stream name="DocumentSummaryInformation" key="DocumentSummaryInformation"
type="DocumentSummaryInformationPropertySetStream" />
<!--
two temporary streams to work around the fact that we cannot parse
StyleTextPropAtom
-->
<stream name="textPFRun" key="textPFRun" type="TextPFRun" />
<stream name="textCFRun" key="textCFRun" type="TextCFRun" />
</mso>
_______________________________________________
koffice-devel mailing list
koffice-devel@kde.org
https://mail.kde.org/mailman/listinfo/koffice-devel
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic