
    ,hQ                         d Z ddlmZ ddlZddlZddlmZ ddl dZdZ	d	Z
d
ZdZdZ G d de      Z G d de      Zd Z G d de      ZddZej*                  fdZy)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                       e Zd Zy)CompDocErrorN)__name__
__module____qualname__     N/var/www/html/Resume-Scraper/venv/lib/python3.12/site-packages/xlrd/compdoc.pyr   r      s    r   r   c                   4    e Zd Zdej                  fdZddZy)DirNoder   c                 |   || _         || _        t        d|dd       \  }| _        | _        | _        | _        | _        t        d|dd       \  | _        | _	        |dk(  rt        d      | _        nt        |d|d	z
   d
      | _        g | _        d| _        t        d|dd       | _        |r| j!                  |       y y )Nz<HBBiii@   P   z<iit   |   r       	utf_16_ler   z<IIIId   )DIDlogfiler   etypecolourleft_DID	right_DIDroot_DID	first_SIDtot_sizeUNICODE_LITERALnameunicodechildrenparenttsinfodump)selfr   dentDEBUGr    cbufsizes         r   __init__zDirNode.__init__"   s     9d2bk*	4:t{DM4> 5$s3-( 	(q='+DIQxz 2K@DIWd3sm4IIe r   c                 \   t        | j                  d| j                  | j                  | j                  | j
                  | j                  | j                  | j                  | j                  | j                  | j                         |dk(  r#t        d| j                  | j                         y y )NzbDID=%d name=%r etype=%d DIDs(left=%d right=%d root=%d parent=%d kids=%r) first_SID=%d tot_size=%d
r   ztimestamp infofile)fprintfr    r   r)   r!   r#   r$   r%   r,   r+   r&   r'   printr-   )r/   r1   s     r   r.   zDirNode.dump5   sx    LLqHHdiiT]]NNDMM4;;t~~W[WdWd		
 A:"DKKdllC r   N)r   )r   r   r   sysstdoutr3   r.   r   r   r   r   r       s    ()3:: &	Dr   r   c                 "   |dk  ry t        | || |   j                         | |   j                  j                  |       || |   _        t        | || |   j
                         | |   j                  dk(  rt        | || |   j                         y y )Nr   r   )_build_family_treer#   r+   appendr,   r$   r!   r%   )dirlist
parent_DID	child_DIDs      r   r<   r<   @   s    1}fw
GI,>,G,GHJ  ''	2 *GIw
GI,>,H,HIy1$7Iwy/A/J/JK %r   c                   R    e Zd ZdZej
                  dfdZd
dZddZd Z	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.
    r   c                    || _         || _        |dd t        k7  rt        d      |dd dk7  rt        d|dd z        t	        d|d	d       \  }}|rt        d
||fz  |       || _        t	        d|dd       \  }}|dkD  rt        d|z  |       d}||kD  rt        d|z  |       d}d|z  x| _        }d|z  | _        | j                  dk7  s| j                  dk7  r&t        d| j                  | j                  fz  |       t	        d|dd       \  }	| _	        }
| _
        }}}}t        |      dz
  }t        ||      \  }}|r |dz  }t        dt        |      |fz  |       || _        || _        t        j                  ddg      |z  x}| _        |rxt        d|||| j                  |       t        d||fz  |       t        d|	| j                  | j                  fz  |       t        d||fz  |       t        d||fz  |       |d z  }d!|z  }d}t#        t	        d"|dd             }||z   dz
  |z  }t%        d|d#z
  |z   d$z
  |dz
  z        }d}|dk(  r|t&        t(        dfv rn|}|t&        t(        t*        fvr|dkD  rt        d%||fz  |       ||k\  r%d&||fz  }|dkD  rt        ||       nt        |      |dk  rt        d'|z        ||   rt        d(|||   fz        d||<   |dz  }|r||kD  rt        d)||||||       d||z  z   }|j-                  t	        |||||z                 |j/                         }|t&        t(        t*        fvr|r||k7  rt        d*||||||       |r$t        d+t        |      |       t1        |d,|       g | _        d}d}t5        t        |            D ]  }||   } | t(        t&        fv r| |k\  r/|s!t        d-|       t        d.| |fz  |       d}t6        ||<   d}K| d/k  rt        d0| z        ||    rt        d1| ||    fz        d$|| <   |dz  }|r||kD  rt        d2||||||| |	       d|| z  z   }| j2                  j-                  t	        |||||z                  |rDt        d3t        | j2                        |       t1        | j2                  d,|       t        |       |r|rt        d+t        |      |       t1        |d,|       t5        |t        | j2                              D ]  }!t6        | j2                  |!<    t        d3t        | j2                        |       t1        | j2                  d,|       | j9                  | j                  d| j2                  | j                  | j                  d4d56      }"g }#d7}$t5        dt        |"      d8      D ]*  }%|$dz  }$|#j;                  t=        |$|"|%|%d8z    d|             , |#| _        tA        |#d|#d   jB                         |r|#D ]  }&|&jE                  |        | j>                  d   }'|'jF                  d9k(  sJ |'jH                  dk  s|'jJ                  dk(  rd:| _&        nF| j9                  | j                  d| j2                  ||'jH                  |'jJ                  d;d 6      | _&        g | _'        |dkD  r|'jJ                  dk(  rt        d<|       |'jJ                  dkD  r|}|}(|dk\  r|(dkD  rz||   rt        d=|||   fz        d9||<   |(dz  }(d||z  z   })t#        t	        |||)|)|z                }*| jN                  j-                  |*       | j2                  |   }|dk\  r|(dkD  rz|rt        d>||(fz  |       |(dk(  r	|t&        k(  sJ |r$t        d?|       t1        | jN                  d,|       |rt        d@|       t1        |d|       y y )ANr      zNot an OLE2 compound document      s   z)Expected "little-endian" marker, found %rz<HH   z/
CompDoc format: version=0x%04x revision=0x%04xr5   "      zMWARNING: sector size (2**%d) is preposterous; assuming 512 and continuing ...	   zYWARNING: short stream sector size (2**%d) is preposterous; assuming 64 and continuing ...   r      r   z"@@@@ sec_size=%d short_sec_size=%dz	<iiiiiiii,   L   zAWARNING *** file size (%d) not 512 + multiple of sector size (%d)Bz	sec sizesz mem data: %d bytes == %d sectorsz=SAT_tot_secs=%d, dir_first_sec_sid=%d, min_size_std_stream=%dz'SSAT_first_sec_sid=%d, SSAT_tot_secs=%dz)MSATX_first_sec_sid=%d, MSATX_tot_secs=%d   z<%diz<109im   r   zMSATX: sid=%d (0x%08X)z7MSAT extension: accessing sector %d but only %d in filez%MSAT extension: invalid sector id: %dzMSAT corruption: seen[%d] == %dz	[1]===>>>z	[2]===>>>zMSAT: len =
   z8WARNING *** File is truncated, or OLE2 MSAT is corrupt!!z6INFO: Trying to access sector %d but only %d availabler   zMSAT: invalid sector id: %dz)MSAT extension corruption: seen[%d] == %dz	[3]===>>>z
SAT: len =	directory   r)   seen_idr         r   SSCSzHWARNING *** OLE2 inconsistency: SSCS size is 0 but SSAT size is non-zerozSSAT corruption: seen[%d] == %dz&SSAT last sid %d; remaining sectors %dSSATseen)(r    r1   	SIGNATUREr   r   r8   memsec_sizeshort_sec_sizedir_first_sec_sidmin_size_std_streamlendivmodmem_data_secsmem_data_lenarrayr[   listmaxEOCSIDFREESIDMSATSIDextendpop	dump_listSATxrangeEVILSID_get_streamr=   r   r>   r<   r%   r.   r!   r&   r'   rY   rZ   )+r/   r]   r    r1   revisionversionsszssszr^   SAT_tot_secs_unusedSSAT_first_sec_sidSSAT_tot_secsMSATX_first_sec_sidMSATX_tot_secsre   rd   	left_overr[   nentfmttrunc_warnedMSATSAT_sectors_reqdexpected_MSATX_sectorsactual_MSATX_sectorssidmsgoffsetactual_SAT_sectors
dump_againmsidxmsidsatxdbytesr>   didposdsscs_dirnsecs	start_posnewss+                                              r   r3   zCompDoc.__init__T   s   
q8y >??r":$JSQSTVZWXX"5#b*5'DQYGZZahi5#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Us8X&'-46*( ;;sQC0=@@ty+sD(D4G4GgV4m7TT[bcQ!7!79Q9QSTZac;?QS`>bbipq=ATVd@ffmtu1}tm F7C3K01)D014=!$Q)9C)?$)F)JPTWXPX(Y!Z Q#667A:N#N %Cfgw77 192c3Z?gN-'SWZ\iVjjCqyc0&s++1W&'NQT'TUU9&'HCQUVYQZK['[\\S	$)$14JJ+}d<LNdfz  BI  Jx#~-F3F6(?(CDEhhj- fgw770 )-CC+}d4DF\^r  zA  B-T9dB( 
CI& 	FE;D(( }$#T[bcR/06=?#$L%U
"#@4#GHHDz"#NRVX\]aXbQc#cddDJ!#+.>>k=$8HJ`bv  yK  MQ  X_  `8d?*FHHOOF3F6(?(CDE1	F4 ,DHHG<dhhG,
 wZ-T9dB(}c$((m< )!(),DHHG<dhhG, !!HHc488T]]D4J4Ja " ) !S[#. 	JC1HCNN73s3s7(;QHI	J 7Awqz':':; u
 <<?~~""!X%6%6!%; DI((#txx83E3E!! ) ;DI 	1!2!2a!7\cjkq $C!E(uqy9&'HCQUVYQZK['[\\S	
#.0	F3Ii6H(IJK		  &hhsm (uqy eDU|SZabA:#-/&w'diiW-&w'dB( r   Nc	                    g }	|}
|y|
dk\  ri|<| j                   |
   rt        d||
| j                   |
   fz        || j                   |
<   ||
|z  z   }|	j                  ||||z           	 ||
   }
|
dk\  ri|
t        k(  sJ |}|
dk\  rw|<| j                   |
   rt        d||
| j                   |
   fz        || j                   |
<   ||
|z  z   }|}||kD  r|}||z  }|	j                  ||||z           	 ||
   }
|
dk\  rw|
t        k(  sJ |dk7  rt        | j                  d||||z
         dj                  |	      S # t        $ r t        d||
fz        w xY w# t        $ r t        d||
fz        w xY w)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=   
IndexErrorri   r7   r    join)r/   r]   basesatr^   	start_sidsizer)   rV   sectorssr   todograbs                 r   rr   zCompDoc._get_stream  s   <q&&yy|*+JdTUW[W`W`abWcMd+dee#*DIIaL 1x</	s9Yx-?@AAA q& ;Dq&&yy|*+JdTUW[W`W`abWcMd+dee#*DIIaL 1x</	$;Ds9Yt^<=AA q&$ ;qyT$t- xx  A " &Tq	" * " &Tq	" s   *D; 3E ;EE2c                 t   |d   }|dd  }| j                   }||   j                  D ]  }||   j                  j                         |j                         k(  s2||   j                  }|dk(  r||   c S |dk(  r!|st        d      | j                  ||      c S ||   j                  d       t        d       y )Nr   r   r   z"Requested component is a 'storage'z'Requested stream is not a 'user stream')r>   r+   r)   lowerr!   r   _dir_searchr.   )r/   pathstorage_DIDheadtaildlchildets           r   r   zCompDoc._dir_searchM  s    AwABx\\_-- 
	NE%y~~##%5Y__7e9$7*+OPP++D%885	q!"#LMM
	N r   c                    | j                  |j                  d            }|y|j                  | j                  k\  rX| j	                  | j
                  d| j                  | j                  |j                  |j                  ||j                  dz         S | j	                  | j                  d| j                  | j                  |j                  |j                  |dz   d      S )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.
        /NrL   rK   rU   r    (from SSCS))r   splitr'   ra   rr   r]   ro   r^   r&   r   rY   rZ   r_   )r/   qnamer   s      r   get_named_streamzCompDoc.get_named_stream`  s     U[[-.9::111###txx

a $ 9 9 ##		1dii)<)<akk

!7 $ G Gr   c                    | j                  |j                  d            }|y|j                  | j                  kD  r%t	        d||j                  | j                  fz        |j                  | j
                  k\  r| j                  | j                  d| j                  | j                  |j                  |j                  ||j                  dz         }| j                  r8t        d| j                         t        | j                   d	| j                         |S | j#                  | j$                  d
| j&                  | j(                  |j                  |j                  |dz   d      d
|j                  fS )aq  
        Interrogate the compound document's directory.

        If the named stream is not found, ``(None, 0, 0)`` will be returned.

        If the named stream is found and is contiguous within the original
        byte sequence (``mem``) used when the document was opened,
        then ``(mem, offset_to_start_of_stream, length_of_stream)`` is returned.

        Otherwise a new string is built from the fragments and
        ``(new_string, 0, length_of_stream)`` is returned.

        :param qname:
          Name of the desired stream e.g. ``'Workbook'``.
          Should be in Unicode or convertible thereto.
        r   N)Nr   r   z7%r stream length (%d bytes) > file data size (%d bytes)rL   rK   z
seenr5   rI   r   r   )r   r   r'   re   r   ra   _locate_streamr]   ro   r^   r&   r   r1   r8   r    rn   r[   rr   rY   rZ   r_   )r/   r   r   results       r   locate_named_streamzCompDoc.locate_named_streamu  s3   " U[[-.9::)))X!**d&7&78 9 : :::111((#txx

E1557,F zzhT\\2$))R6M   IIq$))T-@-@!++JJ 6> 

 r   c	                    |}	|	dk  rt        d|z        d}
d}d}g }d}||z   dz
  |z  }|	dk\  r| j                  |	   rYt        d|z  | j                         t	        | j                  d	| j                         t        d
||	| j                  |	   fz        || j                  |	<   |dz  }||kD  rt        d|||z  fz        |	|
dz   k(  r||z  }n%|
dk\  r|j                  ||f       ||	|z  z   }||z   }|	}
||	   }	|	dk\  r|	t        k(  sJ ||k(  sJ |s||fS |j                  ||f       dj                  fd|D              d|fS )Nr   z%_locate_stream: start_sid (%d) is -veiiiHr   z_locate_stream(%s): seenr5   rI   r   z,%s: size exceeds expected %d bytes; corrupt?r   c              3   .   K   | ]  \  }}||   y w)Nr   ).0r   end_posr]   s      r   	<genexpr>z)CompDoc._locate_stream.<locals>.<genexpr>  s     Q4FIwYw/Qs   )r   r[   r8   r    rn   r=   ri   r   )r/   r]   r   r   r^   r   expected_stream_sizer   rV   r   pr   r   slices	tot_foundfound_limits    `              r   r   zCompDoc._locate_stream  s   q5FRSS		+h6:xG1fyy|058t||LiX\XaXacegkgsgsNt"#BeQPTPYPYZ[P\E]#]^^"DIIaLNI;&"BkH456  AaCx8# 6MM9g"67 1x</	#h.AAA/ 1f0 F{K''$899y'*+Q&QQSTVjkkr   )Nr   Nr   )r   r   r   __doc__r9   r:   r3   rr   r   r   r   r   r   r   r   rB   rB   J   s6     %(JJa F)P/!b&G*&P+lr   rB   c                     t        d|d|   fz  d|       | |||z    D ]  }t        t        |      d|        t        |       y Nz%5d%sz = )endr6   r5   r8   str)aliststridefdposequalvalues         r   x_dump_liner     sM    	'T4;'
'Sq9tD6M* +c%jc*+	qMr   c                      d fd	}d }d }t        dt                     D ]@  }| ||       |} ||z     ||z    k7  s"||z
  kD  r ||z
  d        ||       |}B ||||k7  r ||d       y y y y )Nr   c                     t        d| d|   fz  d       | | z    D ]  }t        t        |      d        t               y r   r   )r   r   r   r   r   r   s      r   
_dump_linezdump_list.<locals>._dump_line  sN    gtE{++1=4v. 	/E#e*#A.	/1r   r   )r   r   )rp   rb   )r   r   r   r   r   oldposs   ```   r   rn   rn     s    
 CFaUV, >sOF3s6z"eF6&=&AAV|f$3<q1sOF co#-3a  3@or   r   )r   
__future__r   rf   r9   structr   timemachiner\   ri   rj   SATSIDrk   rq   	Exceptionr   objectr   r<   rB   r   r:   rn   r   r   r   <module>r      s   
 &  
   0		
	

	9 	Df D@L~lf ~lB  #zz !r   