
    xZiQ                         S r SSKJr  SSKrSSKrSSKJr  SSK7  SrSr	S	r
S
rSrSr " S S\5      r " S S\5      rS r " S S\5      rSS jr\R*                  4S jrg)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                       \ rS rSrSrg)CompDocError    N)__name__
__module____qualname____firstlineno____static_attributes__r       f/var/www/eduai.edurigo.com/question_generate/ques_gen_env/lib/python3.13/site-packages/xlrd/compdoc.pyr   r      s    r   r   c                   @    \ rS rSrS\R
                  4S jrSS jrSrg)DirNode    r   c                    Xl         X@l        [        SUSS 5      u  oPl        U l        U l        U l        U l        [        SUSS 5      u  U l        U l	        US:X  a  [        S5      U l        O[        USUS	-
   S
5      U l        / U l        SU l        [        SUSS 5      U l        U(       a  U R!                  U5        g g )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__DirNode.__init__"   s     9d2bk*	:t{DM4> 5$s3-( 	(q='+DIQxz 2K@DIWd3sm4IIe r   c                 X   [        U R                  SU R                  U R                  U R                  U R
                  U R                  U R                  U R                  U R                  U R                  U R                  5        US:X  a   [        SU R                  U R                  S9  g g )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)   r0   r/   r*   r+   printr1   )r3   r5   s     r   r2   DirNode.dump5   sx    LLqHHdiiT]]NNDMM4;;t~~W[WdWd		
 A:"DKKdllC r   )r#   r/   r&   r%   r*   r'   r$   r-   r0   r(   r)   r+   r1   N)r   )	r   r   r   r   sysstdoutr7   r2   r   r   r   r   r   r       s    ()3:: &	Dr   r   c                    US:  a  g [        XX   R                  5        X   R                  R                  U5        XU   l        [        XX   R
                  5        X   R                  S:X  a  [        XX   R                  5        g g )Nr   r   )_build_family_treer'   r/   appendr0   r(   r%   r)   )dirlist
parent_DID	child_DIDs      r   rB   rB   @   s|    1}fwG,>,G,GH  ''	2 *IwG,>,H,HI1$7w/A/J/JK %r   c                   `    \ rS rSrSr\R                  S4S jrSS jrSS jr	S r
S	 rS
 rSrg)CompDocJ   z
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                    X l         X0l        USS [        :w  a  [        S5      eUSS S:w  a  [        SUSS -  5      e[	        SUS	S 5      u  pEU(       a  [        S
XT4-  US9  Xl        [	        SUSS 5      u  pgUS:  a  [        SU-  US9  SnXv:  a  [        SU-  US9  SnSU-  =U l        nSU-  U l        U R                  S:w  d  U R                  S:w  a#  [        SU R                  U R                  4-  US9  [	        SUSS 5      u  ol	        ol
        pp[        U5      S-
  n[        X5      u  nnU(       a  US-  n[        S[        U5      U4-  US9  UU l        Xl        [        R                  " SS/5      U-  =nU l        U(       ad  [        SXgXR                  US9  [        SUU4-  US9  [        SXR                  U R                  4-  US9  [        SX4-  US9  [        SX4-  US9  US -  nS!U-  nSn[#        [	        S"USS 5      5      nUU-   S-
  U-  n[%        SUS#-
  U-   S$-
  US-
  -  5      nSnUS:X  a  U[&        [(        S4;   a  OUnU[&        [(        [*        4;  a  US:  a  [        S%UU4-  US9  UU:  a#  S&UU4-  nUS:  a  [        UUS9  O[        U5      eUS:  a  [        S'U-  5      eUU   (       a  [        S(UUU   4-  5      eSUU'   US-  nU(       a  UU:  a  [        S)UUUUUUS9  SUU-  -   nUR-                  [	        UUUUU-    5      5        UR/                  5       nU[&        [(        [*        4;  a  M  U(       a  UU:w  a  [        S*UUUUUUS9  U(       a!  [        S+[        U5      US9  [1        US,U5        / U l        SnSn[5        [        U5      5       H  nUU   n U [(        [&        4;   a  M  U U:  a/  U(       d  [        S-US9  [        S.U U4-  US9  Sn[6        UU'   SnMO  U S/:  a  [        S0U -  5      eUU    (       a  [        S1U UU    4-  5      eS$UU '   US-  nU(       a  UU:  a  [        S2UUUUUUU US9	  SUU -  -   nU R2                  R-                  [	        UUUUU-    5      5        M     U(       a>  [        S3[        U R2                  5      US9  [1        U R2                  S,U5        [        US9  U(       a  U(       a  [        S+[        U5      US9  [1        US,U5        [5        U[        U R2                  5      5       H  n![6        U R2                  U!'   M     [        S3[        U R2                  5      US9  [1        U R2                  S,U5        U R9                  U R                  SU R2                  U R                  U R                  S4S5S69n"/ n#S7n$[5        S[        U"5      S85       H+  n%U$S-  n$U#R;                  [=        U$U"U%U%S8-    SU5      5        M-     U#U l        [A        U#SU#S   RB                  5        U(       a  U# H  n&U&RE                  U5        M     U R>                  S   n'U'RF                  S9:X  d   eU'RH                  S:  d  U'RJ                  S:X  a  S:U l&        OCU R9                  U R                  SU R2                  UU'RH                  U'RJ                  S;S S69U l&        / U l'        US:  a  U'RJ                  S:X  a
  [        S<US9  U'RJ                  S:  a  UnUn(US:  a  U(S:  a  UU   (       a  [        S=UUU   4-  5      eS9UU'   U(S-  n(SUU-  -   n)[#        [	        UUU)U)U-    5      5      n*U RN                  R-                  U*5        U R2                  U   nUS:  a  U(S:  a  M  U(       a  [        S>UU(4-  US9  U(S:X  a
  U[&        :X  d   eU(       a!  [        S?US9  [1        U RN                  S,U5        U(       a  [        S@US9  [1        USU5        g g )ANr      zNot an OLE2 compound document      s   z)Expected "little-endian" marker, found %rz<HH   z/
CompDoc format: version=0x%04x revision=0x%04xr:   "      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$   r5   	SIGNATUREr   r   r=   memsec_sizeshort_sec_sizedir_first_sec_sidmin_size_std_streamlendivmodmem_data_secsmem_data_lenarrayrb   listmaxEOCSIDFREESIDMSATSIDextendpop	dump_listSATxrangeEVILSID_get_streamrC   r   rD   rB   r)   r2   r%   r*   r+   r`   ra   )+r3   rd   r$   r5   revisionversionsszssszre   SAT_tot_secs_unusedSSAT_first_sec_sidSSAT_tot_secsMSATX_first_sec_sidMSATX_tot_secsrl   rk   	left_overrb   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dbytesrD   didposdsscs_dirnsecs	start_posnewss+                                              r   r7   CompDoc.__init__T   s   
q8y >??r":$JSQSTVZWXX"5#b*5DGZZahi5#b*-	8a#%C:m$&D#$8+4i==C4#6#6"#<6$--I\I\9]]dkl
 ;Br
+		
0';S3x#~#),#A yQMUs8X&'-46*( ;;sQC0=@@ty+s(4G4GgV4m7TT[bcQ!7!79Q9QSTZac;?Q>bbipq=AT@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&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 '4 ,DHHG<dhhG,
 wZ-T9dB(}c$((m<!( =,DHHG<dhhG, !!HHc488T]]D4J4Ja " ) !S[#.C1HCNN73s3s7(;QHI / 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	                    / n	Un
Uc~  U
S:  ak  Ub?  U R                   U
   (       a  [        SXzU R                   U
   4-  5      eXR                   U
'   X*U-  -   nU	R                  XX-    5         X:   n
U
S:  a  Mk  U
[        :X  d   eOUnU
S:  ax  Ub?  U R                   U
   (       a  [        SXzU R                   U
   4-  5      eXR                   U
'   X*U-  -   nUnX:  a  UnX-  nU	R                  XX-    5         X:   n
U
S:  a  Mx  U
[        :X  d   eUS:w  a  [        U R                  SXvXl-
  5        SR                  U	5      $ ! [         a    [        SXz4-  5      ef = f! [         a    [        SXz4-  5      ef = f)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   )rb   r   rC   
IndexErrorrp   r<   r$   join)r3   rd   basesatre   	start_sidsizer-   r]   sectorssr   todograbs                 r   ry   CompDoc._get_stream  s   <q&&yy|*+JdW[W`W`abWcMd+dee#*IIaL x</	sY-?@AA q& ;;Dq&&yy|*+JdW[W`W`abWcMd+dee#*IIaL x</	;DsY^<=A q&$ ;;qyT- xx  A " &T	" * " &T	" s   -E :E  E E:c                 |   US   nUSS  nU R                   nXR   R                   H  nXV   R                  R                  5       UR                  5       :X  d  M3  XV   R                  nUS:X  a  XV   s  $ US:X  a%  U(       d  [        S5      eU R                  XF5      s  $ XV   R                  S5        [        S5      e   g )Nr   r   r    z"Requested component is a 'storage'z'Requested stream is not a 'user stream')rD   r/   r-   lowerr%   r   _dir_searchr2   )r3   pathstorage_DIDheadtaildlchildets           r   r   CompDoc._dir_searchM  s    AwABx\\_--Ey~~##%5Y__79$7*+OPP++D88	q!"#LMM . r   c                    U R                  UR                  S5      5      nUc  gUR                  U R                  :  aT  U R	                  U R
                  SU R                  U R                  UR                  UR                  XR                  S-   S9$ U R	                  U R                  SU R                  U R                  UR                  UR                  US-   SS9$ )z
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.
/NrS   rR   r\   r    (from SSCS))r   splitr+   rh   ry   rd   rv   re   r*   r#   r`   ra   rf   )r3   qnamer   s      r   get_named_streamCompDoc.get_named_stream`  s     U[[-.9::111###txx

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

!7 $ G Gr   c                    U R                  UR                  S5      5      nUc  gUR                  U R                  :  a$  [	        SXR                  U R                  4-  5      eUR                  U R
                  :  a  U R                  U R                  SU R                  U R                  UR                  UR                  XR                  S-   5      nU R                  (       a5  [        SU R                  S9  [        U R                   S	U R                  5        U$ U R#                  U R$                  S
U R&                  U R(                  UR                  UR                  US-   S5      S
UR                  4$ )a  
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)rS   rR   z
seenr:   rP   r   r   )r   r   r+   rl   r   rh   _locate_streamrd   rv   re   r*   r#   r5   r=   r$   ru   rb   ry   r`   ra   rf   )r3   r   r   results       r   locate_named_streamCompDoc.locate_named_streamu  s/   " U[[-.9::)))X**d&7&78 9 : :::111((#txx

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

 r   c	                   ^ Un	U	S:  a  [        SU-  5      eSn
SnSn/ nSnXd-   S-
  U-  nU	S:  a  U R                  U	   (       aU  [        SU-  U R                  S9  [	        U R                  S	U R                  5        [        S
XyU R                  U	   4-  5      eXR                  U	'   US-  nX:  a  [        SXU-  4-  5      eXS-   :X  a  X-  nO#U
S:  a  UR                  X45        X)U-  -   nX-   nU	n
X9   n	U	S:  a  M  U	[        :X  d   eX:X  d   eU(       d  TX4$ UR                  X45        SR                  U4S jU 5       5      SU4$ )Nr   z%_locate_stream: start_sid (%d) is -veiiiHr   z_locate_stream(%s): seenr:   rP   r   z,%s: size exceeds expected %d bytes; corrupt?r   c              3   0   >#    U  H  u  pTX v   M     g 7f)Nr   ).0r   end_posrd   s      r   	<genexpr>)CompDoc._locate_stream.<locals>.<genexpr>  s     Q&4FIY/&s   )r   rb   r=   r$   ru   rC   rp   r   )r3   rd   r   r   re   r   expected_stream_sizer   r]   r   pr   r   slices	tot_foundfound_limits    `              r   r   CompDoc._locate_stream  s   q5FRSS		+6:xG1fyy|058t||LiX\XaXacegkgsgsNt"#BePTPYPYZ[P\E]#]^^"IIaLNI&"BH456  aCx# 6MM9"67 x</	#.AA/ 1f0 F{{'''99y*+Q&QQSTVjkkr   )r5   rv   ra   r`   rg   rD   r$   rd   rl   rk   rh   re   rb   rf   )Nr   Nr   )r   r   r   r   __doc__r?   r@   r7   ry   r   r   r   r   r   r   r   r   rH   rH   J   s6     %(JJa F)P/!b&G*&P+lr   rH   c                 ~    [        SUSU   4-  SUS9  XX1-     H  n[        [        U5      SUS9  M     [        US9  g Nz%5d%sz = )endr;   r:   r=   str)aliststridefdposequalvalues         r   x_dump_liner     sD    	'T4;'
'Sq9DM*c%jc* +	qMr   c                   ^ ^^ SU UU4S jjnS nS n[        S[        T 5      T5       H@  nUc  U" U5        UnM  T XDT-    T XUT-    :w  d  M$  XE-
  T:  a
  U" UT-
  SS9  U" U5        UnMB     Ub  Ub  XE:w  a  U" USS9  g g g g )Nr   c                    > [        SU SU   4-  STS9  TX T-     H  n[        [        U5      STS9  M     [        TS9  g r   r   )r   r   r   r   r   r   s      r   
_dump_linedump_list.<locals>._dump_line  sG    gtE{++1=4v.E#e*#A. /1r   r   )r   r   )rw   ri   )r   r   r   r   r   oldposs   ```   r   ru   ru     s     
 CFaUV,>sOF36z"eF&=&AA|f$3<q1sOF - co#-3a  3@or   r   )r   
__future__r   rm   r?   structr   timemachinerc   rp   rq   SATSIDrr   rx   	Exceptionr   objectr   rB   rH   r   r@   ru   r   r   r   <module>r      s   
 &  
   0		
	

	9 	Df D@L~lf ~lB  #zz !r   