
    nh                        d dl Z d dlZd dlZd dlmZ ddlmZmZmZ ddl	 ddl
 ddl ej                  Zej                  Zd ZdZd Z	 d dlZdZeZdZ e ed            \  ZZZZZdZd	d
dddddddddddddZi Zi Z ejC                         D ]  \  Z"Z#e"Z"e#Z#e#e e"<   e"ee#<    ["[#[dejH                  d eddddddf
dZ% G d de&      Z' G d de&      Z(d Z)d"dZ*d  Z+d! Z,y# e$ r d ZY w xY w)#    N)perf_counter   )compdoc
formattingsheet)*i    )P   F   2   -   (             	
)Consolidate_Area	Auto_Open
Auto_CloseExtractDatabaseCriteria
Print_AreaPrint_TitlesRecorder	Data_FormAuto_ActivateAuto_DeactivateSheet_Title_FilterDatabaseFc
                 0   t               }
t        r*t        j                         }|rt        j                          t               }	 |j                  | |||||||||	
       t               }||
z
  |_        |j                  t              }|st        d      |t        vrt        dt        |   z        ||_        |dk  r2|rt        |j                  d       dx|_        }|j#                          nx|dk(  r2|j%                          |rat        |j                  d       dx|_        }nA|j%                          |j&                  D cg c]  }d  c}|_        |s|j+                          t-        |j(                        |_        |dk(  r0|j.                  dkD  r!t        |j                  d	|j.                         t        rrt        j0                          t               }||z
  |_        |s|j5                          |S c c}w #  |j5                           xY w)
N)
filenamefile_contentslogfile	verbosityuse_mmapencoding_overrideformatting_info	on_demandragged_rowsignore_workbook_corruptionz#Can't determine file's BIFF versionz BIFF version %s is not supportedr   z`*** WARNING: on_demand is not supported for this Excel version.
*** Setting on_demand to False.
Fr   r   z|*** WARNING: Excel 4.0 workbook (.XLW) file contains %d worksheets.
*** Book-level data will be that of the last worksheet.
)r   	TOGGLE_GCgc	isenableddisableBookbiff2_8_loadload_time_stage_1getbofXL_WORKBOOK_GLOBALS	XLRDErrorSUPPORTED_VERSIONSbiff_text_from_numbiff_versionfprintfr1   r6   fake_globals_get_sheetparse_globals_sheet_names_sheet_list
get_sheetslennsheetsenableload_time_stage_2release_resources)r/   r1   r2   r3   r0   r4   r5   r6   r7   r8   t0orig_gc_enabledbkt1rE   sht2s                    r/var/www/html/SchoolMeal/SchoolMeal/pds_admin_SchoolMeal/Backend/venv/lib/python3.12/site-packages/excelrd/book.pyopen_workbook_xlsrX   D   s    
B,,.JJL	B=
'/+#'A 	 	
 ^!Bwyy!45ABB11>AST`Aaabb&2JJ8
 ,10y%%'RJJ8
 ,10y-/__=rd=BN(
2"**q.

L

	 		^!Bw
 
I- > 
s    DH 	G=BH =H Hc                   \    e Zd ZdZdgZdZdZdZdZdZ	dZ
dZdZdZdZdZdZdZdZd Zd
d	Zy)Namez
    Information relating to a named reference, formula, macro, etc.

    .. note::

      Name information is **not** extracted from files older than
      Excel 5.0 (``Book.biff_version < 50``)
    stackNr        c                 <   | j                   }|r|j                  }|j                  }|t        k(  rt	        |      dk(  r|d   }d|j
                  cxk  r|j                  dz
  k(  rn n|j                  |j                  dz
  k(  rg|j                  |j                  dz
  k(  rK| j                  j                  |j
                        }|j                  |j                  |j                        S | j                  | j                  j                  dd       t!        d      )a@  
        This is a convenience method for the frequent use case where the name
        refers to a single cell.

        :returns: An instance of the :class:`~excelrd.sheet.Cell` class.

        :raises excelrd.biffh.XLRDError:
          The name is not a constant absolute reference
          to a single cell.
        r   r   === Dump of Name object ========== End of dump =======headerfooterz2Not a constant absolute reference to a single cell)resultkindvalueoREFrL   shtxloshtxhirowxlorowxhicolxlocolxhibooksheet_by_indexcelldumpr1   rB   )selfresrf   rg   ref3drU   s         rW   rq   z	Name.cell   s     kk88DIIEt|E
aa9)99q(88q(8811%,,?B775<<>>		II00 	 	

 LMMr]   c                    | j                   }|r|j                  }|j                  }|t        k(  rlt	        |      dk(  r]|d   }d|j
                  cxk  r|j                  dz
  k(  r5n n1| j                  j                  |j
                        }|s/||j                  |j                  |j                  |j                  fS t        |j                  |j                        }t        |t        |j                  |j                              }t        |j                  |j                         }	t        |	t        |j                  |j                               }
d|cxk  r|cxk  r|j                  k  sJ  J d|	cxk  r|
cxk  r|j                   k  sJ  J ||||	|
fS | j#                  | j                  j$                  dd       t'        d      )a  
        This is a convenience method for the use case where the name
        refers to one rectangular area in one worksheet.

        :param clipped:
          If ``True``, the default, the returned rectangle is clipped
          to fit in ``(0, sheet.nrows, 0, sheet.ncols)``.
          it is guaranteed that ``0 <= rowxlo <= rowxhi <= sheet.nrows`` and
          that the number of usable rows in the area (which may be zero) is
          ``rowxhi - rowxlo``; likewise for columns.

        :returns: a tuple ``(sheet_object, rowxlo, rowxhi, colxlo, colxhi)``.

        :raises excelrd.biffh.XLRDError:
           The name is not a constant absolute reference
           to a single area in a single sheet.
        r   r   r`   ra   rb   zDNot a constant absolute reference to a single area in a single sheet)re   rf   rg   rh   rL   ri   rj   ro   rp   rk   rl   rm   rn   minnrowsmaxncolsrr   r1   rB   )rs   clippedrt   rf   rg   ru   rU   rk   rl   rm   rn   s              rW   area2dzName.area2d   sw   $ kk88DIIEt|E
aa8q(8811%,,?B"!5<<u||U\\YY rxx8F U\\288)DEF rxx8F U\\288)DEF<&<BHH<<<<<<&<BHH<<<<<vvvv==		II00 	 	

 ^__r]   T)__name__
__module____qualname____doc___repr_thesero   hiddenfuncvbasicmacrocomplexbuiltin	funcgroupbinary
name_indexnameraw_formulascopere   rq   r|    r]   rW   rZ   rZ      s}     )KD F D F E
 G G I
 F J D K E FN@)`r]   rZ   c            
       x   e Zd ZdZdZdZdZg ZdZdZ	dZ
dZg Zg Zg Zi Zi Zi Zg ZdZdZd Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Zd Zi Z i Z!d Z"dde#jH                  de%dddddf
dZ&d Z'd Z(d Z)d Z*d0dZ+d Z,d Z-d Z.d Z/d Z0d Z1d  Z2d! Z3d" Z4d# Z5d$ Z6d% Z7d& Z8d' Z9d( Z:d) Z;d* Z<d+ Z=d, Z>d- Z?d. Z@d/ ZAy)1r=   z
    Contents of a "workbook".

    .. warning::

      You should not instantiate this class yourself. You use the :class:`Book`
      object that was returned when you called :func:`~excelrd.open_workbook`.
    r   Nr   r   r\   g      c                     t        | j                        D ]#  }| j                  |   r| j                  |       % | j                  dd S )zt
        :returns: A list of all sheets in the book.

        All sheets not already loaded will be loaded.
        N)rangerM   rJ   	get_sheetrs   sheetxs     rW   sheetszBook.sheets  sI     DLL) 	'F##F+v&	' ""r]   c                 F    | j                   |   xs | j                  |      S )zu
        :param sheetx: Sheet index in ``range(nsheets)``
        :returns: A :class:`~excelrd.sheet.Sheet`.
        )rJ   r   r   s     rW   rp   zBook.sheet_by_index  s#    
 'A4>>&+AAr]   c              #   f   K   t        | j                        D ]  }| j                  |        yw)z
        Makes iteration through sheets of a book a little more straightforward.
        Don't free resources after use since it can be called like `list(book)`
        N)r   rM   rp   )rs   is     rW   __iter__zBook.__iter__  s1     
 t||$ 	)A%%a((	)s   /1c                     	 | j                   j                  |      }| j	                  |      S # t        $ r t        d|z        w xY w)zs
        :param sheet_name: Name of the sheet required.
        :returns: A :class:`~excelrd.sheet.Sheet`.
        No sheet named <%r>)rI   index
ValueErrorrB   rp   )rs   
sheet_namer   s      rW   sheet_by_namezBook.sheet_by_name  sU    
	@&&,,Z8F ""6**  	@1J>??	@s	   . Ac                 f    t        |t              r| j                  |      S | j                  |      S )z
        Allow indexing with sheet name or index.
        :param item: Name or index of sheet enquired upon
        :return: :class:`~excelrd.sheet.Sheet`.
        )
isinstanceintrp   r   )rs   items     rW   __getitem__zBook.__getitem__  s0     dC &&t,,%%d++r]   c                      | j                   dd S )z
        :returns:
          A list of the names of all the worksheets in the workbook file.
          This information is available even when no sheets have yet been
          loaded.
        N)rI   rs   s    rW   sheet_nameszBook.sheet_names   s       ##r]   c                     t        |t              r|}n	 | j                  j                  |      }t        | j                  |         S # t        $ r t        d|z        w xY w)z
        :param sheet_name_or_index: Name or index of sheet enquired upon
        :returns: ``True`` if sheet is loaded, ``False`` otherwise.

        .. versionadded:: 0.7.1
        r   )r   r   rI   r   r   rB   boolrJ   rs   sheet_name_or_indexr   s      rW   sheet_loadedzBook.sheet_loaded	  sn     )3/(FM**001DE D$$V,--  M 58K KLLMs   A A c                     t        |t              r|}n	 | j                  j                  |      }d| j                  |<   y# t        $ r t        d|z        w xY w)zu
        :param sheet_name_or_index: Name or index of sheet to be unloaded.

        .. versionadded:: 0.7.1
        r   N)r   r   rI   r   r   rB   rJ   r   s      rW   unload_sheetzBook.unload_sheet  sh     )3/(FM**001DE $(   M 58K KLLMs   A   Ac                 
   d| _         t        | j                  d      r| j                  j                          d| _        t        | j                  d      r| j                  j                          d| _        d| _        d| _        y)ab  
        This method has a dual purpose. You can call it to release
        memory-consuming objects and (possibly) a memory-mapped file
        (:class:`mmap.mmap` object) when you have finished loading sheets in
        ``on_demand`` mode, but still require the :class:`Book` object to
        examine the loaded sheets. It is also called automatically (a) when
        :func:`~excelrd.open_workbook`
        raises an exception and (b) if you are using a ``with`` statement, when
        the ``with`` block is exited. Calling this method multiple times on the
        same object has no ill effect.
        r   closeN)_resources_releasedhasattrmemr   filestr_sharedstrings_rich_text_runlist_mapr   s    rW   rP   zBook.release_resources(  sd     $% 488W%HHNN4<<)LL "&*#r]   c                     | S Nr   r   s    rW   	__enter__zBook.__enter__?  s    r]   c                 $    | j                          y r   )rP   )rs   exc_type	exc_valueexc_tbs       rW   __exit__zBook.__exit__B  s     r]   c                    g | _         g | _        g | _        d| _        g | _        g | _        i | _        d| _        d| _        d| _	        | j                          d| _        d| _        d | _        d | _        g | _        g | _        g | _        i | _        i | _        d| _        g | _        d| _        g | _        g | _        i | _        g | _        g | _        i | _        d| _        d| _        y )Nr   Fr^   r]   )rJ   rI   _sheet_visibilityrM   _sh_abs_posnr   r   raw_user_name_sheethdr_countbuiltinfmtcountinitialise_format_info_all_sheets_count_supbook_count_supbook_locals_inx_supbook_addins_inx_all_sheets_map_externsheet_info_externsheet_type_b57_extnsht_name_from_num_sheet_num_from_name_extnsht_count_supbook_typesr   addin_func_namesname_obj_list
colour_mappalette_recordxf_liststyle_name_mapr   r   r   s    rW   __init__zBook.__init__S  s    !# &(#" !##%!"#' #' !!#%'"&(#$&! #$  "  r]   Fc                    || _         || _        |xr t        | _        || _        || _        || _        |	| _        |st        |d      5 }|j                  dd       |j                         }|j                  dd       |dk(  rt        d      | j                  rAt        j                  |j                         |t        j                        | _        || _        n/|j#                         | _        t%        | j                        | _        d d d        n|| _        t%        |      | _        d| _        | j                  d d t(        j*                  k7  r| j                  | _        nt)        j.                  | j                  | j                   |
      }t0        rDdD ]4  }|j3                  |      \  | _        | _        | _        | j,                  s4 n\ t        d	      dD ]&  }|j5                  |      | _        | j,                  s& n t        d	      t%        | j,                        | _        ~| j,                  | j                  ur7t7        | j                  d
      r| j                  j9                          d| _        | j&                  | _        t<        rEt?        dtA        | j,                        | j&                  | j                   fz  | j                          y y # 1 sw Y   xY w)Nrbr      zFile size is 0 bytes)access   )r1   r8   )Workbookr=   z-Can't find workbook in OLE2 compound documentr   r]   zmem: %s, base: %d, len: %dfile)!r1   r2   MMAP_AVAILABLEr3   r4   r5   r6   r7   openseektellrB   mmapfilenoACCESS_READr   
stream_lenreadrL   baser   	SIGNATUREr   CompDocUSE_FANCY_CDlocate_named_streamget_named_streamr   r   	_positionDEBUGprinttype)rs   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   fsizecdqnames                  rW   r>   zBook.biff2_8_loadt  sX    " 3^!2."&h% 8q!vvxq!19#$:;;==#'99QXXZdFVFV#WDL&*DO#$668DL&)$,,&7DO8 8 )DL!-0DO	<<w000||DH+EB
 1 UE;=;Q;QRW;X8DHdixxU
 $$STT1 UE!2259DHxxU
 $$STT"%dhh-xxt||+4<<1LL&&(",TXX		4??/[[\\ _8 8s   CKK c                     i | _         g | _        d| _        d| _        dt        i| _        d| _        g | _        g | _        y )Nr   )	
format_mapformat_listxfcountactualfmtcountXL_CELL_NUMBER_xf_index_to_xl_type_map_xf_epilogue_doner   	font_listr   s    rW   r   zBook.initialise_format_info  sC    )*N(;%!"r]   c                     | j                   }| j                  ||dz    }t        |      }| xj                   |z  c_         |dk  rt        S |\  }}t	        |      dz  t	        |      z  S )Nr   r   )r   r   rL   MY_EOF	BYTES_ORD)rs   posbuff_twolenbufflohis         rW   	get2byteszBook.get2bytes  sc    nn88C#'*h-'!Q;MB""im33r]   c                     | j                   }| j                  }t        d|||dz          \  }}|dz  }||||z    }||z   | _         |||fS )N<HH   r   r   unpack)rs   r  r   codelengthdatas         rW   get_record_partszBook.get_record_parts  s`    nnhheSsQw%78fq3v&vfd##r]   c                     | j                   }| j                  }t        d|||dz          \  }}||k7  ry|dz  }||||z    }||z   | _         |||fS )Nr  r  )Nr   r]   r  )rs   reqd_recordr  r   r  r  r  s          rW   get_record_parts_conditionalz!Book.get_record_parts_conditional  sk    nnhheSsQw%78f;!q3v&vfd##r]   c                 (   | j                   rt        d      |r| j                  |   | _        | j	                  t
               t        j                  | | j                  | j                  |   |      }|j                  |        || j                  |<   |S )Nz,Can't load sheets after releasing resources.)r   rB   r   r   r@   XL_WORKSHEETr   SheetrI   r   rJ   )rs   	sh_number
update_posrU   s       rW   r   zBook.get_sheet  s    ##JKK!..y9DNL! [[NNi(	
 	&(#	r]   c                 :   t         r-t        d| j                  | j                  | j                         t        t        | j                              D ]G  }t         r.t        d|| j                  | j                  | j                         | j                  |       I y )NzGET_SHEETS:r   zGET_SHEETS: sheetno =)r   r   rI   r   r1   r   rL   r   )rs   sheetnos     rW   rK   zBook.get_sheets  sz    -!2!2D4E4EDLLYS!2!234 		$G+%%%% NN7#		$r]   c                     t        j                  |        d}|g| _        dg| _        dg| _        | j
                  j                  d        | j                          y )NzSheet 1r   )r   initialise_bookrI   r   r   rJ   appendrK   )rs   fake_sheet_names     rW   rG   zBook.fake_globals_get_sheet  sR    ""4(#,-C"#%r]   c           	      f   | j                   }| j                          t        rt        | j                  d||       |dk(  rVt        |d| j                  d      }d}t        }t        | j                        dk(  r| j                  | j                  z   }nVd}nSt        d|dd       \  }}}|| j                  z   }|t        k  rt        |d| j                  d      }nt        |dd      }t        s| j                  d	k\  r%t        | j                  d
| j                   ||||       | xj                   dz  c_        |t        k7  ra| j"                  j%                  d       ddddj'                  |d      }t        s| j                  dk\  rt        | j                  d|||       y y t        | j(                        }	| j"                  j%                  |	       | j(                  j%                  |       | j                  j%                  |       | j*                  j%                  |       |	| j,                  |<   y )NzBOUNDSHEET: bv=%d data %r
r   r   r   lenlenr^   z<iBB   r   zFBOUNDSHEET: inx=%d vis=%r sheet_name=%r abs_posn=%d sheet_type=0x%02x
zMacro sheetChartzVisual Basic module)r   r   r%  UNKNOWNzANOTE *** Ignoring non-worksheet data named %r (type 0x%02x = %s)
)rE   derive_encodingr   rF   r1   unpack_stringencodingXL_BOUNDSHEET_WORKSHEETrL   r   _sheetsoffsetr   r  BIFF_FIRST_UNICODEunpack_unicoder2   r   r   r   getrI   r   r   )
rs   r  bvr   
visibility
sheet_typeabs_posnoffsetdescrsnums
             rW   handle_boundsheetzBook.handle_boundsheet  s   DLL"?TJ8 'tQaHJJ0J4$$%*--		9
 -3FD1I-F*FJ
		)H&&*4DMM!L
+D!A>
DNNa'Y&& 	!#00  ''+ ( c*i(	  !+LLX , t(()D  ''-$$Z0$$X.""))*548D%%j1r]   c                 p    t        d|dd       d   }t        rt        | j                  d|       || _        y )N<Hr   r   zBUILTINFMTCOUNT: %r
)r  r   rF   r1   r   )rs   r  r   s      rW   handle_builtinfmtcountzBook.handle_builtinfmtcountT  s7     !tAay1!4DLL"9?K.r]   c           
         | j                   r| j                   | _        n| j                  Z| j                  dk  rt	        | j
                  d       d| _        nd| _        | j                  dk\  rt	        | j
                  d       n| j                  }|t        v r
t        |   }nDd|cxk  rdk  rn nd	t        |      z   }n'| j                  dk\  r
d| _        d
}ndt        |      z   }t        s| j                  r'|| j                  k7  rt	        | j
                  d||       || _        | j                  dk7  r	 t        d| j                         | j                  rAt        | j                   d| j                  d      }|j#                         }|| _        d| _        | j                  S # t        $ rY}t	        | j
                  d| j                  | j                  t        |      j                  j                  d      d   |        d }~ww xY w)Nr
   zD*** No CODEPAGE record, no encoding_override: will use 'iso-8859-1'
z
iso-8859-1i  r   z2*** No CODEPAGE record; assuming 1200 (utf_16_le)
i,  i  cp	utf_16_leunknown_codepage_z%CODEPAGE: codepage %r -> encoding %r
s   trialz/ERROR *** codepage %r -> encoding %r -> %s: %s
.r^   r   r   r#  F)r4   r*  codepagerE   rF   r1   r2   encoding_from_codepagestrr   BaseExceptionr   r~   splitr   r)  	user_namerstrip)rs   r@  r*  estrgs        rW   r(  zBook.derive_encoding\  s   !! 22DM]]"  2%LL[ !- $>>Q&DLL*_`}}H111(;(D(#h-/""b( $&.X>H,E&NPXZbc$DM==D Hdmm,  DMM!LD;;=D "DN!&D}}# ! 	LLFMMMMG$$**3/3 	s   8F' '	H	0AHH	c                 V    t        d|dd       d   }|| _        | j                          y )Nr9  r   r   )r  r@  r(  )rs   r  r@  s      rW   handle_codepagezBook.handle_codepage  s,    $Qq	*1- r]   c                     t        d|dd       }| j                  rt        d|| j                         | j                  dk(  s| j                  |k(  sJ || _        y )Nr  r   r  z
Countries:r   r   )r  r2   r   r1   	countries)rs   r  rL  s      rW   handle_countryzBook.handle_country  sO    5$q),	>>,	=~~'4>>Y+FFF"r]   c                     t        d|dd       d   }t        s| j                  rt        | j                  d|       |dv sJ || _        y )Nr9  r   r   zDATEMODE: datemode %r
)r   r   )r  r   r2   rF   r1   datemode)rs   r  rO  s      rW   handle_datemodezBook.handle_datemode  sH    $Qq	*1-DNNDLL";XF6!!! r]   c           	      ^   t         xs | j                  dk\  }| j                  dk\  rt        d|d d       \  }}d}t	        ||d      \  }}||d  }| j
                  d   t        k(  r| j                  j                  |       |r)t        | j                  d| j
                  d   ||||       y y y )	Nr   r
   <HIr%  r   r#  r^   zCEXTERNNAME: sbktype=%d oflags=0x%04x oinfo=0x%08x name=%r extra=%r
)r   r2   rE   r  unpack_unicode_update_posr   SUPBOOK_ADDINr   r   rF   r1   )rs   r  blahoption_flags
other_infor  r   extras           rW   handle_externnamezBook.handle_externname  s    +!+"'-eT"1X'>$L*C1$AFID#JE""2&-7%%,,T2LLZ''+   #r]   c           	         | j                          | xj                  dz  c_        t        xs | j                  dk\  }t        xs | j                  dk\  }| j                  dk\  rt        d|dd       d   }|dz  dz   }t        |      |k  r_|r!t        | j                  d|t        |             | j                         \  }}}|t        k7  rt        d      ||z  }t        |      |k  r_d}	t        |      D ]W  }
t        d	||	|	dz          }|\  }}}| j                  j                  |       |	dz  }	|s>t        | j                  d
|
|||       Y y t        d|d d       \  }}|rmt        d| j                         t!        |dt        |      | j                         dddddj#                  |d      }t        d|||fz  | j                         |dk(  rXt%        |d|dz    | j&                        }|| j(                  | j                  <   |r!t        | j(                  | j                         d|cxk  rdk  sn d}| j*                  j                  |       y )Nr   r   r
   r9  r   r%  z*INFO: EXTERNSHEET needs %d bytes, have %d
z)Missing CONTINUE after EXTERNSHEET recordz<HHHzLEXTERNSHEET(b8): k = %2d, record = %2d, first_sheet = %5d, last sheet = %5d
z<BBzEXTERNSHEET(b7-):r   foutzEncoded URLzCurrent sheet!!zSpecific sheet in own doc'tz Nonspecific sheet in own doc't!!)r   r      r  zNot encodedz   %3d chars, type is %d (%s)r]  r  )r(  r   r   r2   rE   r  rL   rF   r1   r  XL_CONTINUErB   r   r   r   r   hex_char_dumpr/  rB  r*  r   r   )rs   r  blah1blah2num_refs
bytes_reqdcode2length2data2r  kinforef_recordxref_first_sheetxref_last_sheetxnctymsgr   s                      rW   handle_externsheetzBook.handle_externsheet  sT   q ,1,,1,"dD1I.q1H!A)Jd)j(E"D		 )-(=(=(?%wK'#$OPP d)j( C8_ fd3q&9:AE>-&&--d3qg#(' E48,FB)=dAs4yt||D$(49	
 #b-(  5REDLLYQw a"q&!14==A
CM++D,?,?@$55DLLILqL&&--b1r]   c                    | j                   dk\  r| j                  }t        |d       t        |dt	        |      d|       | j
                  dk\  rvt        d|d d       \  }|dk(  r+t        d|dd        \  }}t        |d||       t        d      |d	k(  r0t        d|d
d       \  }|d	k(  rd}n
|dk(  rd}nd}t        |d|       t        d      )Nr   z
FILEPASS:
r   )r   r\  r
   r9  r  z!weak XOR: key=0x%04x hash=0x%04x
r   r  r%  z	BIFF8 stdzBIFF8 strongz** UNKNOWN ENCRYPTION METHOD **z%s
zWorkbook is encrypted)r2   r1   rF   r_  rL   rE   r  rB   )rs   r  logfkind1key
hash_valuekind2captions           rW   handle_filepasszBook.handle_filepass  s    >>Q<<DD-($3t914@  B&!$Ra1A:&,UDH&=OCD"FZX /00 aZ%dD1I6HUz"-!"0"CD&'2/00r]   c                    t         xs | j                  dk\  }| j                  }|dk  ry | j                          t	        d|dd       \
  }}}}}}	}
}}}t               }| |_        t        | j                        }||_	        | j                  j                  |       ||_        g d}|D ]  \  }}}t        ||||z  |z	          d|j                     }|dk  rt        |d| j                  |	      \  }}nt!        |d|	      \  }}||_        |	|_        d |_        |rt)        | j*                  d
|||||||	|
       |}|j,                  r2t.        j1                  |d      }|rt3        d|z  | j*                         ||_        ||d  |_        ||_        d|_        |r"|j=                  | j*                  d|z  d       y y )Nr   r   z	<HBBHHH4Br      ))r   r   r   )r   r   r   )r   r  r   )r   r   r]  )r      r  )r       r	   )r   i  r%  )r   i      z Mr
   )	known_lenzZNAME[%d]:%s oflags=%d, name_len=%d, fmla_len=%d, extsht_index=%d, sheet_index=%d, name=%r
z??Unknown??z    builtin: %sr   z--- handle_name: name[%d] ---z-------------------rb   )r   r2   rE   r(  r  rZ   ro   rL   r   r   r   rV  setattrr   unpack_string_update_posr*  rS  extn_sheet_numexcel_sheet_indexr   rF   r1   r   builtin_name_from_coder/  r   r   r   basic_formula_len	evaluatedrr   )rs   r  rU  r0  rV  kb_shortcutname_lenfmla_lenextsht_indexsheet_indexmenu_text_lendescription_text_lenhelp_topic_text_lenstatus_bar_text_lennobjr   attrsattrmasknshift
macro_flaginternal_namer  r   s                           rW   handle_namezBook.handle_name  s   +!+7 ;Qr
+	
 v	++,
$!!$'(	
 #( 	AD$D$!4 ?@	A $**%
7!9b$--8"M3 ";4x!XM3*!,
m <<)--dMBD'$.T\\B	:!)II6C,   r]   c                 D   | j                   dk\  }| j                  }|rpt        d|       t        dt        | j                        |       t        dt        | j
                        |       t        dt        | j                        |       t        | j                        }t        |      D ]  }| j                  |   }| j                  dk\  rR|j                  }|dk(  rd	}nd
|cxk  rt        | j                        k  rn n| j                  |d
z
     }|d	k(  r]d}nZd}nWd| j                  cxk  rdk  rBn n?|j                  }|dk(  rd	}n+| j
                  |   }| j                  j                  |d      }|_         t        |      D ]F  }| j                  |   }|j                  s|j                   r+|j"                  r8t%        | |||       H | j                   dk\  rOt        d|       t        |      D ]'  }| j                  |   }|j'                  |d|z         ) t        d|       i }	i }
t        |      D ]  }| j                  |   }|j(                  j+                         }||j                  f}||	v r| j                   rt-        |d|       ||	|<   |j                  ||f}||
v r|
|   j/                  |       |g|
|<    |
j1                         D ]-  }|
|   }|j3                          |D cg c]  }|d   	 c}|
|<   / |	| _        |
| _        y c c}w )Nr   z+++++ names_epilogue +++++r   r   r   r   r
   r   r^   r   r   r   )rU  z&---------- name object dump ----------z--- name[%d] ---)rc   z&--------------------------------------z)Duplicate entry %r in name_and_scope_map
)r2   r1   r   REPRr   r   r   rL   r   r   rE   r  r  r/  r   r   r   r  evaluate_name_formularr   r   lowerrF   r   keyssortname_and_scope_mapname_map)rs   rU  r   	num_namesnamexr  r  intl_sheet_indexr   r  r  
name_lcasers  	sort_dataalistxs                   rW   names_epiloguezBook.names_epilogueT  s&   ~~"LL.Q7#T$*>*>%?aH*D1L1L,MTUV($t/H/H*IPQR**+	9% 	*E%%e,D
   B&"44!#')$+BT-A-A)BB'+';';K!O'L$'2-+-( (*$t((.B."11!#')$!%!<!<[!IJ'+'@'@'D'DZQS'T$)DJ1	*4 9% 	@E%%e,DzzT[[~~!$e$?	@ >>Q:Cy) @))%0		!$6$>	?@ :C  9% 	3E%%e,D*Jtzz*C((T^^GM&*s#UD1I X%$++I6(1{$	3 ==? 	2CSMEJJL+01aQqT1HSM	2 #5  2s   :Lc                 (    t        d|dd       \  }}y )NrR  r  
   )r  )rs   r  obj_typeobj_ids       rW   
handle_objzBook.handle_obj  s     "%a4&r]   c           	         | j                   j                  d        t        xs | j                  dk\  }|r9t	        d| j
                         t        |dt        |      | j
                         t        d|dd       d   }|rt	        d|z  | j
                         | j                  }| xj                  dz  c_	        |dd	 d
k(  rht        | j                   d<   | j                  dz
  | _        |r>t	        d||fz  | j
                         t	        d| j                  | j
                         y |dd	 dk(  rDt        | j                   d<   | j                  dz
  | _        |rt	        d|z  | j
                         y t        |dd      \  }}|dk(  r.t         | j                   d<   |rt#        | j
                  d||       y t$        | j                   d<   |rt#        | j
                  d||       g }t'        |      D ]K  }	 t        ||d      \  }	}|j                  |	       |s)t#        | j
                  d|t        |	      |	|       M y # t(        j*                  $ r- | j                  rt	        d|||fz  | j
                         Y  y w xY w)Nr   zSUPBOOK:r   r   r[  r9  znum_sheets = %dr   r  s   r^   z(SUPBOOK[%d]: internal 3D refs; %d sheetsz    _all_sheets_maps    :zSUPBOOK[%d]: add-in functionsr#  z#SUPBOOK[%d]: DDE/OLE document = %r
zSUPBOOK[%d]: url = %r
zK*** WARNING: unpack failure in sheet %d of %d in SUPBOOK record for file %rz-  sheetx=%d namelen=%d name=%r (next pos=%d)
)r   r   r   r2   r   r1   r_  rL   r  r   SUPBOOK_INTERNALr   r   rT  r   rS  SUPBOOK_DDEOLErF   SUPBOOK_EXTERNALr   structerror)
rs   r  rU  
num_sheetssbnurlr  r   r  shnames
             rW   handle_supbookzBook.handle_supbook  sd   ""4(+!+*4<<0$3t94<<@D$q),Q/
#j0t||D!!q !9#&6D#'+':':Q'>D$>#zARR +T-A-AU!9++&3D#'+':':Q'>D$5;$,,O,T1Q?S?&4D#&LcSVW"2BDLL";S#Fz" 	A7c!L v&LLDK	 << 	 >>ej#./!\\
 	s   ;I<JJc                    | j                          t        d|d d       d   }t        |d| j                  d      }| j                  }|| j
                  |   k(  sJ | xj                  dz  c_        | j                  }|dz
  t        |      z
  }t        rt        | j                  d||||       | j                          t        r$t        d| j                  z  | j                         | j                  j                  d        | j!                  |d	
       t        r"t        d| j                  | j                         ||z   | _        y )N<ir  r   r   r#  z'SHEETHDR %d at posn %d: len=%d name=%r
z SHEETHDR: xf epilogue flag is %dr   F)r  z"SHEETHDR: posn after get_sheet() =)r(  r  r)  r*  r   rI   r   rL   r   rF   r1   r   r   r   rJ   r   r   )rs   r  	sheet_lenr   r  BOF_posnposns          rW   handle_sheethdrzBook.handle_sheethdr  s"   
 	4bq*1-	"4DMM!D
&&T..w7777!>>!|c$i': 	##%4t7M7MMTXT`T`a%w516T\\Z!I-r]   c                 l    t        d|      d   }t        rt        d|| j                         || _        y )Nr  r   zSHEETSOFFSET:r   )r  r   r   r1   r,  )rs   r  r  s      rW   handle_sheetsoffsetzBook.handle_sheetsoffset  s.    dD!!$/4dll;!r]   c                 B   t         r!t        d| j                         t               }t	        |      }|g}t        d|dd       d   }t         s| j                  dk\  rt        | j                  d|       	 | j                  t              \  }}}|n8||z  }t         dk\  rt        | j                  d	||       |j                  |       Tt        ||      \  | _        }| j                  r|| _        t         r*t               }	t        d
|	z
  dd| j                         y y )NzSST Processingr   r  r  r   r   r   zSST: unique strings: %d
z'CONTINUE: adding %d bytes to SST -> %d
zSST processing took z.2fz seconds)r   r   r1   r   rL   r  r2   rF   r  r^  r   unpack_SST_tabler   r5   r   )
rs   r  rQ   nbtstrlistuniquestringsr  nb
rt_runlistrT   s
             rW   
handle_sstzBook.handle_sst  s   "6B$i&tT!AY/2DNNa'DLL"=}M!>>{KND"d|2ICz&PRTVYZNN4   +;7M*R'Z*4D'B(bX>T\\R r]   c                    d}| j                   dk  r5| j                  sd| _        || _        y t	        |d| j                  d      }n	 t        |dd      }|r,t        | j                  dt        |      | j                  |       |j                         }|| _        y # t        $ r t        |j                         dd      }Y mw xY w)Nr   r
   Tr   r#  r   z!WRITEACCESS: %d bytes; raw=%s %r
)rE   r*  r   rE  r)  r.  UnicodeDecodeErrorstriprF   r1   rL   rF  )rs   r  r   rH  s       rW   handle_writeaccesszBook.handle_writeaccess$  s    r!==%)"!% q$--BDA%dAa8 4D	"" {{} & A%djjlAa@As   B %CCc                 2   t        j                  |        	 | j                         \  }}}t        rt	        d|z  | j
                         |t        k(  r| j                  |       n|t        k(  s	|t        k(  r| j                  |       n|t        k(  r| j                  |       no|t        k(  r| j                  |       nS|t        k(  r| j!                  |       n7|t"        k(  r| j%                  |       n|t&        k(  r| j)                  |       n|t*        k(  r| j-                  |       n|t.        k(  r| j1                  |       n|t2        k(  r| j5                  |       n|t6        k(  r| j9                  |       n|t:        k(  r| j=                  |       ns|t>        k(  r| jA                  |       nW|tB        k(  r| jE                  |       n;|tF        k(  r| jI                  |       n|tJ        k(  r| jM                  |       n|tN        k(  r| jQ                  |       n|tR        k(  r| jU                  |       n|dz  dk(  r7| jV                  r+tY        | j
                  d| jZ                  |z
  dz
  |||       n|t\        k(  r| j_                          | ja                          | jc                          | jd                  s| jg                          | jh                  dk(  r(t        r"t	        d| jZ                  | j
                         y 	 )	Nz$parse_globals: record code is 0x%04xr      	   z5*** Unexpected BOF at posn %d: 0x%04x len=%d data=%r
r  r   zglobal EOF: position)5r   r  r  r   r   r1   XL_SSTr  XL_FONTXL_FONT_B3B4handle_font	XL_FORMAThandle_formatXL_XF	handle_xfXL_BOUNDSHEETr7  XL_DATEMODErP  XL_CODEPAGErJ  
XL_COUNTRYrM  XL_EXTERNNAMErY  XL_EXTERNSHEETro  XL_FILEPASSrw  XL_WRITEACCESSr  XL_SHEETSOFFSETr  XL_SHEETHDRr  
XL_SUPBOOKr  XL_NAMEr  
XL_PALETTEhandle_paletteXL_STYLEhandle_styler2   rF   r   XL_EOFxf_epiloguer  palette_epiloguer*  r(  rE   )rs   rcr  r  s       rW   rH   zBook.parse_globals=  s}    	""4(#446B<rAUV|%w""4  &y""4(ut$}$&&t,{"$$T*{"$$T*z!##D)}$&&t,~%''-{"$$T*~%''-&((.{"$$T*z!##D)w  &z!##D)x!!$'daDNNLLLNNV+a/ v  "##%%%'}}((*$$*4dnn4<<X  E r]   c                 P    | j                   |||z    }|t        |      z   | _        |S r   )r   rL   r   )rs   r  r  r  s       rW   r   z	Book.read  s*    xxcFl+s4yr]   c           	         t         rt        d|z  | j                         d }| j                  }| j	                         }|t
        k(  r |d       |t        vr |d| j                  ||dz    z         | j	                         }|t
        k(  r |d       d|cxk  rd	k  sn  |d
||fz         dt        dt        |   |z
        z  }| j                  | j                  |      }t         rt        | j                  d|       t        |      |k  r |d       ||z  }|dz	  }t        d|dd       \  }	}
t         rt        d||	|
fz  | j                         | j                  dz
  |z
  }t         rt        d||fz  | j                         dx}x}}|dk(  rGt        d|dd       \  }}|	dk(  rd}n:|	dk(  r|dk  s|dv rd}n)d}n&ddddddj                  |	d      }n|dv r	dddd|   }|dk(  r|
t        k(  rd}t         s| j                   dk\  r t        d ||	|
|||fz  | j                         |
t"        k(  xs |dk(  xr	 |
t        k(  }|t"        k(  r|s|
|k(  r|S |dk  r|
t$        k(  r|S |dk\  r|
d!k(  r |d"        |d#||	|
|||fz         y )$Nzreqd: 0x%04xr   c                     t        d| z         )Nz%Unsupported format, or corrupt file: )rB   )rn  s    rW   	bof_errorzBook.getbof.<locals>.bof_error  s    CcIJJr]   z$Expected BOF record; met end of filezExpected BOF record; found %rr   z)Incomplete BOF record[1]; met end of filer  r   z.Invalid length (%d) for BOF record type 0x%04x    r   z
getbof(): data=%r
z)Incomplete BOF record[2]; met end of filer  z5getbof(): op=0x%04x version2=0x%04x streamtype=0x%04xz+getbof(): BOF found at offset %d; savpos=%di   r
   i   i  )il	  i  i  r   r   r   r   r   )r      i   i   i   )r  r   r   r   r   zHBOF: op=0x%04x vers=0x%04x stream=0x%04x buildid=%d buildyr=%d -> BIFF%d   z%Workspace file -- no spreadsheet datazXBOF not workbook/worksheet: op=0x%04x vers=0x%04x strm=0x%04x build=%d year=%d -> BIFF%d)r   r   r1   r   r
  r  bofcodesr   ry   boflenr   rF   rL   r  r/  XL_WORKBOOK_GLOBALS_4Wr2   rA   r  )rs   
rqd_streamr  savposopcoder  paddingr  version1version2
streamtype
bof_offsetversionbuildyeargot_globalss                   rW   r@   zBook.getbof  s    .:-DLLA	K !V<=!5&ST*8UUV!VABV!r!F&RXIYYZ#a&!899yy0DLL"94@t9vABQ;%eT!AY7*G8Z01\\
 ^^a'&0
=V@TT\\ "#""%$t Qq	2KE46!V#$;%+="= G G  #h"  ++r4X>Gb=Z+AAGDNNa'Z8ZgFG\\
 !$77 
rMBj,BB 	 --+*PZBZNR<J,6Nb=Z61=>fxUD'BC	
r]   r}   )Br~   r   r   r   rM   rO  rE   r   r@  r*  rL  rE  r  r   r   r   r   r   r   r?   rO   r   rp   r   r   r   r   r   r   rP   r   r   r  r  r   sysstdoutUSE_MMAPr>   r   r
  r  r  r   rK   rG   r7  r:  r(  rJ  rM  rP  rY  ro  rw  r  r  r  r  r  r  r  r  rH   r   r@   r   r]   rW   r=   r=   ,  s    G H
 L M H H I I I G K J: N  J N  	#B)	+	,$. (+.!  HF 

#(JX	4$	$*$<9|/2h#!(62p1*L\J!X5<|.>"S22FP
T
r]   r=   c                 l    | }|dz  r|dk\  r|dz  }d}nd}|dz  }|dz  r|dk\  r|dz  }d}nd}||||fS )	Ni   i   r   r   r  i @     r  r   )inrowincoloutrowrelrowoutcolrelcols         rW   expand_cell_addressr    sa    Fv~U?eOFT\Fv~S=cMF666))r]   c                 X    | dk\  sJ d}	 t        | d      \  }}||   |z   }|s|S |dz
  } !)Nr   r\   r      )divmod)colx_A2Zr   quotrems        rW   colnamer    sJ    199D
4$	cCy4Kax r]   c                     |rdd| dk     t        |       fz  }n	d| dz   fz  }|rdd|dk     t        |      fz  }||z   S dt        |      z   }||z   S )Nz(*%s%d)z+-r   z$%dr   $)absr  )rowxr  r	  r  rowpartcolparts         rW   display_cell_addressr    sv    tD1H~s4y994!8+%tD1H~s4y99 W %Wr]   c                    d}t        |       }| d   }t        |      }d}g }|j                  }i }	t        }
t        }t        }d}t        |      D ]  } |
d|||dz          d   }|dz  } |||         }|dz  }d}d}|dz  r |
d|||dz          d   }|dz  }|dz  r |
d|||dz          d   }|dz  }d	}d}	 ||z
  }|dz  r3 |||z
  dz	  |      }|||d|z  z    }	 |t        |d
      z  }|d|z  z  }n( |||z
  |      }||||z    }|t        ||      z  }||z  }||z  }||k(  rn#|dz  }| |   }t        |      } ||d         }d}|r_g }t        |      D ]A  }||k(  rd}|dz  }| |   }t        |      }|j                   |
d|||dz                 |dz  }C ||	t        |      <   ||z  }||k\  r*||z
  }|dz  }||k  r| |   }t        |      }n
||dz
  k(  sJ  ||        ||	fS #   xY w)zReturn list of stringsr   r   latin_1r9  r   r   r  r  r\   r=  r  )rL   r   r  rw   r  r   rB  )datatabnstringsdatainxndatasr  datalenr  strings	strappendrichtext_runslocal_unpack	local_minlocal_BYTES_ORDr  	_unused_incharsoptionsrtcountphoszaccstrgcharsgot	charsneed
charsavailrawstrgrunsrunindexs                             rW   r  r    s   G\F1:D$iG
CGIMLIOG8_ F	dDsQw$78;q!$s),qT>"4cC!G)<=a@G1HCT> tC#'':;A>E1HC)I~&#!';YG
sS1z>%9:s7K88G q:~% 'w}i@
sS:%563w00z!
"H6!qLG7#D$iG%d1g.GC? B D!'N '>CqLG"7+D!$iGLS370CDEq +/M#g,'u'>-CqLGw'd) HqL000'MFN M!!_ s    G22G5)ABCDEFGHIJKLMNOPQRSTUVWXYZ)-r:   r  r  timer   r\   r   r   r   biffhformulatimemachiner  
empty_cellr   r   r9   r   r   ImportErrorr  r  listr   SUPBOOK_UNKr  r  rT  r  rC   _code_from_builtin_namer  code_from_builtin_nameitems_bin_bicr  rX   
BaseObjectrZ   r=   r  r  r  r  r   r]   rW   <module>rD     s   
  
  ( (    

		N 	QUV[\]V^Q_ N/5       )//1 (JD$DD#'4 #'4 	(
 	$' JJ$SlO`: O`dr
: r
p%*&	U"]/  Ns   C% %C/.C/