Ȯ$icRdZddlmZddlZddlZddlmZddldZdZ d Z d Z d Z d Z Gd deZGddeZdZGddeZddZej*fdZy)z Implements the minimal functionality required to extract a "Workbook" or "Book" stream (as one big string) from an OLE2 Compound Document file. )print_functionN)unpack)*sࡱc eZdZy) CompDocErrorN)__name__ __module__ __qualname__R/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/xlrd/compdoc.pyr r srr c4eZdZdejfdZddZy)DirNoderc|||_||_td|dd\}|_|_|_|_|_td|dd\|_|_ |dk(rtd|_ nt|d|d z d |_ g|_ d |_td |d d|_|r|j!|yy)Nz  5$s3- ( ( q='+DIQxz 2K@DI  Wd3sm4  IIe  rc\t|jd|j|j|j|j |j |j|j|j|j|j |dk(r#td|j|jyy)NzbDID=%d name=%r etype=%d DIDs(left=%d right=%d root=%d parent=%d kids=%r) first_SID=%d tot_size=%d rztimestamp infofile)fprintfr rr)r!r#r$r%r,r+r&r'printr-)r/r1s rr.z DirNode.dump5sx LL q HHdiiT]] NNDMM4;; t~~W[WdWd  A: "DKKdll C rN)r)rrrsysstdoutr3r.rrrrr s()3::& Drrc"|dkryt||||j||jj||||_t||||j ||j dk(rt||||jyy)Nrr)_build_family_treer#r+appendr,r$r!r%)dirlist parent_DID child_DIDs rr<r<@s1}fw GI,>,G,GH J  '' 2 *GIw GI,>,H,HIy1$7Iwy/A/J/JK%rcTeZdZdZej ddfdZd dZd dZdZ d Z d Z y) CompDocz Compound document handler. :param mem: The raw contents of the file, as a string, or as an :class:`mmap.mmap` object. The only operation it needs to support is slicing. rFc ||_||_||_|ddtk7r t d|dddk7rt d|ddzt d|d d\}}|rt d ||fz| ||_t d|dd \}}|d kDrt d|z| d}||kDrt d|z| d}d|zx|_} d|z|_ |jdk7s|jdk7r&t d|j|jfz| t d|dd\} |_ } |_ } } }}t|dz }t|| \}}|r |dz }t dt|| fz| ||_||_t!j ddg|zx}|_|rxt d||| |j| t d||fz| t d| |j|jfz| t d| | fz| t d||fz| | d z}d!|z}d}t%t d"|dd}||zdz |z}t'd|d#z |zd$z |dz z}d}|dk(r|t(t*dfvrn|}|t(t*t,fvr|dkDrt d%||fz| ||k\r%d&||fz}|dkDrt || nt ||dkrt d'|z||rt d(|||fzd||<|dz }|r||kDrt d)|||||| d| |zz}|j/t ||||| z|j1}|t(t*t,fvr|r||k7rt d*|||||| |r$t d+t|| t3|d,|g|_d}d}t7t|D]} || }!|!t*t(fvr|!|k\r/|s!t d-| t d.|!|fz| d}t8|| <d}K|!d/krt d0|!z||!rt d1|!||!fzd$||!<|dz }|r||kDrt d2|||||||!| d| |!zz}|j4j/t ||||| z|rDt d3t|j4| t3|j4d,|t | |r|rt d+t|| t3|d,|t7|t|j4D]}"t8|j4|"<t d3t|j4| t3|j4d,||j;|jd|j4|j|jd4d56}#g}$d7}%t7dt|#d8D]*}&|%dz }%|$j=t?|%|#|&|&d8zd|,|$|_ tC|$d|$djD|r|$D]}'|'jG||j@d}(|(jHd9k(sJ|(jJdks|(jLdk(rd:|_'nF|j;|jd|j4| |(jJ|(jLd;d 6|_'g|_(| dkDr|(jLdk(r t d<| |(jLdkDr| }| })|dk\r|)dkDrz||rt d=|||fzd9||<|)dz})d|| zz}*t%t |||*|*| z}+|jPj/|+|j4|}|dk\r|)dkDrz|rt d>||)fz| |)dk(r |t(k(sJ|r$t d?| t3|jPd,||rt d@| t3|d |yy)ANrzNot an OLE2 compound documentsz)Expected "little-endian" marker, found %rz>>z [2]===>>>z MSAT: len = z8WARNING *** File is truncated, or OLE2 MSAT is corrupt!!z6INFO: Trying to access sector %d but only %d availablerzMSAT: invalid sector id: %dz)MSAT extension corruption: seen[%d] == %dz [3]===>>>z SAT: len = directoryr)seen_idrrSSCSzHWARNING *** OLE2 inconsistency: SSCS size is 0 but SSAT size is non-zerozSSAT corruption: seen[%d] == %dz&SSAT last sid %d; remaining sectors %dSSATseen))r ignore_workbook_corruptionr1 SIGNATUREr rr8memsec_sizeshort_sec_sizedir_first_sec_sidmin_size_std_streamlendivmod mem_data_secs mem_data_lenarrayr[listmaxEOCSIDFREESIDMSATSIDextendpop dump_listSATxrangeEVILSID _get_streamr=rr>r<r%r.r!r&r'rYrZ),r/r^r r1r\revisionversionsszssszr_ SAT_tot_secs_unusedSSAT_first_sec_sid SSAT_tot_secsMSATX_first_sec_sidMSATX_tot_secsrfre left_overr[nentfmt trunc_warnedMSATSAT_sectors_reqdexpected_MSATX_sectorsactual_MSATX_sectorssidmsgoffsetactual_SAT_sectors dump_againmsidxmsidsatxdbytesr>didposdsscs_dirnsecs start_posnewss, rr3zCompDoc.__init__Ts *D' q8y >? ? r": $JSQSTVZWX X"5#b*5'  DQYGZZah i5#b*- T 8 a# %C #: m$ &D#$8+ 4i ==C 4#6#6"#< 6$--I\I\9]]dk l ;Br +  $0'4;S  3x#~ #),#A y  Q M Us8X&'-4 6*( ;;sQC0=@@ty  +sD(D4G4Gg V 4 m7TT[b c Q!7!79Q9QSTZa c ;?QS`>bbip q =ATVd@ffmt u1}tm F7C3K01)D014=!$Q)9C)?$)F)JPTWXPX(Y!Z  Q #667A:N#N %Cfgw77192c3Z?gN-'SWZ\iVjjCqyc0&s++1W&'NQT'TUU9&'HCQUVYQZK['[\\S $)$14JJ+}d>k=$8HJ`bvyKMQX_`8d?*F HHOOF3F6(?(CD E1 F4  ,DHH G < dhhG , w  Z -T 9 dB (}c$((m< )!( ) ,DHH G < dhhG ,!! HHc488T]]D4J4Ja")!S[#. JC 1HC NN73s3s7(;QH I J 7Awqz':':;  u   <<?~~"""    !X%6%6!%;DI((#txx83E3E!!);DI 1 !2!2a!7 \cj k   q $C!E(uqy9&'HCQUVYQZK['[\\S  #.0 F3Ii6H(IJK   &hhsm(uqyeDU|SZabA:#- //  &w ' diiW -  &w ' dB ( rNc g} |} |y| dk\ri|<|j| rtd|| |j| fz||j| <|| |zz} | j|| | |z || } | dk\ri| tk(sJ|} | dk\rw|<|j| rtd|| |j| fz||j| <|| |zz} |} | | kDr| } | | z} | j|| | | z || } | dk\rw| tk(sJ| dk7rt |j d|||| z dj| S#t$rtd|| fzwxYw#t$rtd|| fzwxYw)Nr%s corruption: seen[%d] == %dz:OLE2 stream %r: sector allocation table invalid entry (%d)z=WARNING *** OLE2 stream %r: expected size %d, actual size %d r)r[r r= IndexErrorrjr7r join)r/r^basesatr_ start_sidsizer)rVsectorssrtodograbs rrszCompDoc._get_streams  <q&&yy|*+JdTUW[W`W`abWcMd+dee#*DIIaL 1x</ s9Yx-?@AAAq&; ;Dq&&yy|*+JdTUW[W`W`abWcMd+dee#*DIIaL 1x</ $;D s9Yt^<=AAq&$; ;qy T$t -xx  A"&Tq "*"&Tq "s*D;3E;EE2ct|d}|dd}|j}||jD]}||jj|jk(s2||j}|dk(r||cS|dk(r!|s t d|j ||cS||jdt dy)Nrrrz"Requested component is a 'storage'z'Requested stream is not a 'user stream')r>r+r)lowerr!r _dir_searchr.)r/path storage_DIDheadtaildlchildets rrzCompDoc._dir_searchNsAwABx \\ _-- NE%y~~##%5Y__7e9$7*+OPP++D%885 q!"#LMM Nrc |j|jd}|y|j|jk\rX|j |j d|j |j|j|j||jdzS|j |jd|j|j|j|j|dzdS)a Interrogate the compound document's directory; return the stream as a string if found, otherwise return ``None``. :param qname: Name of the desired stream e.g. ``'Workbook'``. Should be in Unicode or convertible thereto. /NrLrKrUr (from SSCS)) rsplitr'rbrsr^rpr_r&rrYrZr`)r/qnamers rget_named_streamzCompDoc.get_named_streamas   U[[- . 9 ::11 1###txx  a$9 9## 1dii)<) file data size (%d bytes)rLrKz seenr5rIrr)rrr'rfr rb_locate_streamr^rpr_r&rr1r8r ror[rsrYrZr`)r/rrresults rlocate_named_streamzCompDoc.locate_named_streamvs3"   U[[- . 9 ::)) )X!**d&7&78 9: : ::11 1((#txx  E1557,FzzhT\\2$))R6M  IIq$))T-@-@!++JJ 6>  rc |} | dkrtd|zd} d} d} g} d}||zdz |z}| dk\r|j| re|jsYtd|z|jt |jd |jtd || |j| fz||j| <|dz }||kDrtd |||zfz| | dzk(r| |z } n%| dk\r| j | | f|| |zz} | |z} | } || } | dk\r| tk(sJ||k(sJ| s| |fS| j | | fd jfd | Dd|fS)Nrz%_locate_stream: start_sid (%d) is -veiiiHrz_locate_stream(%s): seenr5rIrz,%s: size exceeds expected %d bytes; corrupt?rc3.K|] \}}||yw)Nr).0rend_posr^s r z)CompDoc._locate_stream..sQ4FIwYw/Qs) r r[r\r8r ror=rjr)r/r^rrr_rexpected_stream_sizerrVrprrslices tot_found found_limits ` rrzCompDoc._locate_streams  q5FRS S   +h6:xG 1fyy|664u<4<<PR[\`\e\egikokwkwRx&'F%QRTXT]T]^_T`Ia'abb"DIIaL NI;&"BkH456AaCx8#6MM9g"67 1x</ #h.AAA11f2F{{K'''$89 9 y'*+Q&QQSTVjkkr)NrNr) rrr__doc__r9r:r3rsrrrrrrrrBrBJs9%(JJaTYG)R/!b&G*&P,lrrBctd|d|fzd|||||zD]}tt|d|t|yNz%5d%sz = )endr6r5r8str)aliststridefdposequalvalues r x_dump_linersM 'T4;' 'Sq9tD6M*+ c%jc*+ qMrcdfd }d}d}tdtD]@}| |||}||z||zk7s"||z kDr ||z d|||}B||||k7r ||dyyyy)Nrctd|d|fzd||zD]}tt|dtyrr)rrrrrrs r _dump_linezdump_list.._dump_linesN gtE{++1=4v . /E #e*#A . / 1 rr)rr)rqrc)rrrrroldposs``` rroros C FaUV, > sOF 3s6z "eF6&=&A AV|f$3rs &  0      9 DfD@L@lf@lF  #zz!r