ó ¸ùbc@sddlmZddlZddlZddlmZeek rMeZ nej Z ej Z ej ZdZdZdZdZdZd Zd Zd Zd Zd ZdZdZdZdZdZdZdZdZ dZ!dZ"dZ#dZ$dZ%dZ&dZ'dZ(dZ)dZ*d Z+d!Z,d"Z-d#Z.d$Z/d%Z0d&Z1d'Z2d(Z3d)Z4d*Z5d+Z6d,Z7d-Z8iZ9x@e:e;ƒj<ƒƒD])\Z=Z>e=d d.kr©e=e9e>eHd9e=e>ƒq¶WnqjWWn)eNk r Z>eHd:d;eFd7e>ƒnXqWndS(<iÿÿÿÿ(tprint_functionN(t_binarysÐÏࡱáiiiiiiiiii i i i i iiiiiiiiiiiiiiiiii@iAiBiCiDiEiFiGiHitVT_s$00020900-0000-0000-C000-000000000046t _OleStreamcBseZdZd„ZRS(sKOLE2 Stream Returns a read-only file object which can be used to read the contents of a OLE stream. To open a stream, use the openstream method in the OleFile class. This function can be used with either ordinary streams, or ministreams, depending on the offset, sectorsize, and fat table arguments. cCsxg}xE|dkrM|j|||ƒ|j|j|ƒƒ||}q Wdj|ƒ}tjj||| ƒdS(Niþÿÿÿt(tseektappendtreadtjointiotBytesIOt__init__(tselftfptsecttsizetoffsett sectorsizetfattdata((s3/usr/lib64/python2.7/site-packages/PIL/OleFileIO.pyR gs(t__name__t __module__t__doc__R (((s3/usr/lib64/python2.7/site-packages/PIL/OleFileIO.pyRVs t_OleDirectoryEntrycBs,eZdZd„Zd„Zdd„ZRS(sºOLE2 Directory Entry Encapsulates a stream directory entry. Note that the constructor builds a tree of all subentries, so we only have to call it with the root object. cCs||\}}}}}}||_||_||_||_||_||_g|_||dd}|dkr|jg} ||d\} } } x:| dkrØ| j|ƒ| }||d\} } } qŸWx||jkrñ|jjt||ƒƒ||d\} } } | dkrw| }x¾t rs||d\} } } | dkr]Pn| j|ƒ| }q0WqÜxHt rÁ| d} | d=|| d\} } } | |kr¸Pn| }qzW||d\} } } | | krÜ| }qÜqÜW|jj ƒndS(Niiiÿÿÿÿ( tsidtnamettypeRRtclsidtkidsRRtTruetsort(R tsidlistRRRRRtsidsRtstacktlefttrighttchildtptr((s3/usr/lib64/python2.7/site-packages/PIL/OleFileIO.pyR …sL                     cCst|j|jƒS(sCompare entries by name(tcmpR(R tother((s3/usr/lib64/python2.7/site-packages/PIL/OleFileIO.pyt__cmp__ÌsicCsÏddddddg}td|t|jƒ||jddƒ|jdkrkt|jd ddƒntƒ|jdkr¦|jr¦td|d |jƒnx"|jD]}|j|d ƒq°WdS(sADump this entry, and all its subentries (for debug purposes only)s (invalid)s (storage)s(stream)s (lockbytes)s (property)s(root)t tendiitbytesis{%s}N(ii(ii(tprinttreprRRRRRtdump(R ttabtTYPEStkid((s3/usr/lib64/python2.7/site-packages/PIL/OleFileIO.pyR.Ñs  +(RRRR R(R.(((s3/usr/lib64/python2.7/site-packages/PIL/OleFileIO.pyR|s G t OleFileIOcBs›eZdZdd„Zd„Zd„Zd„Zd„Zd„Z d„Z d„Z d „Z d „Z d „Zd d „Zd„Zd„Zd„ZRS(s¢OLE container object This class encapsulates the interface to an OLE 2 structured storage file. Use the listdir and openstream methods to access the contents of this file. Object names are given as a list of strings, one for each subentry level. The root entry should be omitted. For example, the following code extracts all image streams from a Microsoft Image Composer file:: ole = OleFileIO("fan.mic") for entry in ole.listdir(): if entry[1:2] == "Image": fin = ole.openstream(entry) fout = open(entry[0:1], "wb") while 1: s = fin.read(8192) if not s: break fout.write(s) You can use the viewer application provided with the Python Imaging Library to view the resulting files (which happens to be standard TIFF files). cCs|r|j|ƒndS(N(topen(R tfilename((s3/usr/lib64/python2.7/site-packages/PIL/OleFileIO.pyR scCst|tƒr$t|dƒ|_n ||_|jjdƒ}t|ƒdksa|d tkrptdƒ‚n|j|dd!ƒ}dt |dƒ>|_ dt |dƒ>|_ t |d ƒ|_ |j|ƒ|jt |d ƒƒd |_t |d ƒ|_d S( sOpen an OLE2 filetrbiis#not an OLE2 structured storage fileiiii i8i0i<N(t isinstancetstrR3R RtlentMAGICtIOErrort_clsidti16Rtminisectorsizeti32tminisectorcutofftloadfatt loaddirectorytNonet ministreamt minifatsect(R R4theaderR((s3/usr/lib64/python2.7/site-packages/PIL/OleFileIO.pyR3 s "  cCsµ|dd!}g}x’tdt|ƒdƒD]x}t||ƒ}|dksY|dkr]Pn|j|ƒ}|gtdt|ƒdƒD]}t||ƒ^qˆ}q,W||_dS(NiLiiiiþÿÿÿiÿÿÿÿ(trangeR8R>tgetsectR(R RERRtitixts((s3/usr/lib64/python2.7/site-packages/PIL/OleFileIO.pyR@.s <cCsS|j|jƒjƒ}gtdt|ƒdƒD]}t||ƒ^q1|_dS(Nii(t_openRDRRFR8R>tminifat(R RJRH((s3/usr/lib64/python2.7/site-packages/PIL/OleFileIO.pyt loadminifat=scCs.|jjd|j|ƒ|jj|jƒS(Ni(R RRR(R R((s3/usr/lib64/python2.7/site-packages/PIL/OleFileIO.pyRGEscCs6ttkr%|jdƒjddƒS|jdƒSdS(Nsutf-16slatin-1treplace(R+R7tdecodetencode(R RJ((s3/usr/lib64/python2.7/site-packages/PIL/OleFileIO.pyt_unicodeKs c Cs |j|ƒ}g|_x×trñ|jdƒ}|s:Pnt|dƒ}|j|ddt|dƒ!ƒ}t|dƒt|dƒt|dƒf}t|dƒt|d ƒ}}|j|d d !ƒ}|jj ||||||fƒqWt |jdƒ|_ dS( Ni€iBii@iDiHiLitixiPi`( RKRRRti8RQR<R>R;RRtroot( R RR tentryRRtptrsRR((s3/usr/lib64/python2.7/site-packages/PIL/OleFileIO.pyRAUs  #*&cCs|jjƒdS(N(RSR.(R ((s3/usr/lib64/python2.7/site-packages/PIL/OleFileIO.pyt dumpdirectorylscCsh|dt|ƒkrdSdddt|dƒt|dƒt|dƒfttt|dd !ƒƒS( NtRs%08X-%04X-%04X-%02X%02X-s%02Xiiiii(R8R>R<ttupletmapRR(R R((s3/usr/lib64/python2.7/site-packages/PIL/OleFileIO.pyR;qs  'cCsb||jg}xK|jD]@}|jr?|j|||ƒq|j|d|jgƒqWdS(Ni(RRt_listR(R tfilestprefixtnodeRT((s3/usr/lib64/python2.7/site-packages/PIL/OleFileIO.pyRZxs  cCsZ|j}xG|D]?}x0|jD]}|j|kr Pq q Wtdƒ‚|}qW|jS(Nsfile not found(RSRRR:R(R R4R]RR1((s3/usr/lib64/python2.7/site-packages/PIL/OleFileIO.pyt_find‚s    iÿÿÿcCs†||jkrd|jsB|jƒ|j|jddƒ|_nt|j||d|j|jƒSt|j||d|j |j ƒS(Niii( R?RCRMRKRRR=RLR RR(R tstartR((s3/usr/lib64/python2.7/site-packages/PIL/OleFileIO.pyRKs   cCs g}|j|g|jƒ|S(s,Return a list of streams stored in this file(RZRS(R R[((s3/usr/lib64/python2.7/site-packages/PIL/OleFileIO.pytlistdir¡sc CsY|j|ƒ}|j|\}}}}}}|dkrItdƒ‚n|j||ƒS(s(Open a stream as a read-only file objectisthis file is not a stream(R^RR:RK( R R4tslotRRRRR R((s3/usr/lib64/python2.7/site-packages/PIL/OleFileIO.pyt openstream«s  c CsP|j|ƒ}i}|jdƒ}|j|dd!ƒ}|jdƒ}|j|d ƒ}|jt|dƒƒd|jt|jdƒƒdƒ}x±tt|dƒƒD]š}t|d|dƒ}t|d|dƒ} t|| ƒ} | tkr,t|| dƒ} | d kr>| d } q>n| tkrNt|| dƒ} nð| t t fkrvt|| dƒ} nÈ| t kr˜t|| dƒ} n¦| t t fkrÝt|| dƒ} || d| d| d !} na| tkrt|| dƒ} || d| d| !} n&| tkr`t|| dƒ} |j|| d| d| d !ƒ} nÞ| tkr­tt|| dƒƒtt|| dƒƒd >} | d} n‘| tkrÐt|| dƒ} nn| tkrý|j|| d| d!ƒ} nA| tkr8t|| dƒ} || d| d| !} nd} | ||RFtVT_I2R<tVT_UI2tVT_I4tVT_ERRORtVT_UI4tVT_BSTRtVT_LPSTRtVT_BLOBt VT_LPWSTRRQt VT_FILETIMEtlongtVT_UI1RRtVT_CLSIDtVT_CFRB( R R4R RRJRtfmtidRHtidRRtvaluetcount((s3/usr/lib64/python2.7/site-packages/PIL/OleFileIO.pyt getproperties·sX&       ) 4   ! N(RRRRBR R3R@RMRGRQRARVR;RZR^RKR`RbRu(((s3/usr/lib64/python2.7/site-packages/PIL/OleFileIO.pyR2és   !        t__main__t-ss s***s cannot read(Ot __future__RR tsystPILRR7R+tintRmRRti16leR<ti32leR>R9tVT_EMPTYtVT_NULLRcRetVT_R4tVT_R8tVT_CYtVT_DATERht VT_DISPATCHRftVT_BOOLt VT_VARIANTt VT_UNKNOWNt VT_DECIMALtVT_I1RnRdRgtVT_I8tVT_UI8tVT_INTtVT_UINTtVT_VOIDt VT_HRESULTtVT_PTRt VT_SAFEARRAYt VT_CARRAYtVT_USERDEFINEDRiRkRlRjt VT_STREAMt VT_STORAGEtVT_STREAMED_OBJECTtVT_STORED_OBJECTtVT_BLOB_OBJECTRpRot VT_VECTORtVTtlisttvarstitemstktvt WORD_CLSIDR RRR2RtargvtfiletoleR,RVR`RutpropstsortedR:(((s3/usr/lib64/python2.7/site-packages/PIL/OleFileIO.pyt'sš       "&mÿ