î
nÐR\Ë&  ã               @   s3   d  d l  Z  d d l m Z Gd d „  d ƒ Z d S)é    Né   )Úxrangec               @   sp   e  Z d  Z d Z d Z d Z d Z d Z d Z d d „  Z	 d	 d
 „  Z
 d d „  Z d d „  Z d d „  Z d S)ÚXlsDoci   i   r   é   é   é   c             C   sU   g  |  _  d |  _ g  |  _ d |  _ g  |  _ d |  _ d |  _ g  |  _ d |  _ d  S)NÚ )	Úbook_stream_sectÚ
dir_streamÚdir_stream_sectÚ
packed_SATÚSAT_sectÚpacked_MSAT_1stÚpacked_MSAT_2ndÚMSAT_sect_2ndÚheader)Úself© r   ú4/var/www/dbchiro/venv/build/xlwt/xlwt/CompoundDoc.pyÚ__init__   s    								zXlsDoc.__init__c             C   s  d |  _  d j d ƒ } t | ƒ } d d | } d } d } d } d } d } d }	 d	 }
 |  j  t j d
 | | | | | | | | d	 d	 d	 d	 d	 d	 d	 d	 d	 |	 |
 d	 ƒ 7_  d j d ƒ } t | ƒ } d d | } d } d } d } d } d } d	 }	 |  j }
 |  j  t j d
 | | | | | | | | d	 d	 d	 d	 d	 d	 d	 d	 d	 |	 |
 d	 ƒ 7_  d } t | ƒ } d d | } d	 } d } d } d } d } d }	 d	 }
 |  j  t j d
 | | | | | | | | d	 d	 d	 d	 d	 d	 d	 d	 d	 |	 |
 d	 ƒ d 7_  d  S)Nó    zRoot Entry z	utf-16-les    é@   é   r   r   r   z<64s H 2B 3l 9L l L LZ	Workbook éÿÿÿÿr   éþÿÿÿr   r   r   r   r   r   r   )r
   ÚencodeÚlenÚstructÚpackÚbook_stream_len)r   Zdentry_nameZdentry_name_szZdentry_name_padZdentry_typeZdentry_colourZdentry_did_leftZdentry_did_rightZdentry_did_rootZdentry_start_sidZdentry_stream_szr   r   r   Ú_build_directory,   sˆ    		zXlsDoc._build_directoryc             C   so  |  j  d ?} t |  j ƒ d ?} | | } d } d } d } xa | d | k s[ | | k rŸ | d 7} | d 7} | | k r? | d 7} | d 7} | d 7} q? q? W|  j g d | } d } x< | | d k  rø |  j j | ƒ | d | | <| d 7} q½ W|  j j | ƒ |  j | | <| d 7} x; | | | k  r]|  j j | ƒ |  j | | <| d 7} q#Wx? | | | | k  rŸ|  j	 j | ƒ |  j
 | | <| d 7} qaWxH | | | | | d k  rê|  j j | ƒ | d | | <| d 7} q£W|  j j | ƒ |  j | | <| d 7} t j d | d | Œ |  _ |  j g d }	 x3 t t d d ƒ |  j	 ƒ D] \ }
 } | |	 |
 <q[Wt j d |	 Œ |  _ |  j g d | } | d k rº|  j | d	 <n  d }
 d } d } x |
 | k  rM| d d d k r%| d 7} | t |  j ƒ k  r@|  j | | | <q@n |  j	 |
 | | <|
 d 7}
 | d 7} qÏWt j d | d | Œ |  _ d  S)
Né	   r   ém   é€   r   é   z<%dlz<109lr   )r   r   r
   ÚSID_FREE_SECTORr	   ÚappendÚSID_END_OF_CHAINr   ÚSID_USED_BY_MSATr   ÚSID_USED_BY_SATr   r   r   r   ÚzipÚranger   r   )r   Zbook_sect_countZdir_sect_countZtotal_sect_countZSAT_sect_countZMSAT_sect_countZSAT_sect_count_limitZSATÚsectZMSAT_1stÚiZSAT_sect_numZMSAT_2ndZ	msat_sectZsid_numr   r   r   Ú
_build_sat{   sr    






(

zXlsDoc._build_satc             C   s\  d } d } d } d } d } t  j d d ƒ } t  j d d	 ƒ } d } t  j d t |  j ƒ ƒ }	 t  j d |  j d ƒ }
 d } t  j d d ƒ } t  j d d ƒ } t  j d d ƒ } t |  j ƒ d k râ t  j d d ƒ } n t  j d |  j d ƒ } t  j d t |  j ƒ ƒ } d j | | | | | | | | |	 |
 | | | | | | g ƒ |  _ d  S)Ns   ÐÏà¡±ás    é   s   > s    s   þÿz<Hr!   é   é
   z<Lz<lr   r   i   r   r   s                   s
             s       r   r   )r   r   r   r   r   r   Újoinr   )r   Z	doc_magicÚfile_uidZrev_numZver_numZ
byte_orderZlog_sect_sizeZlog_short_sect_sizeZ	not_used0Ztotal_sat_sectorsZdir_start_sidZ	not_used1Zmin_stream_sizeZssat_start_sidZtotal_ssat_sectorsZmsat_start_sidZtotal_msat_sectorsr   r   r   Ú_build_headerÐ   sD    	zXlsDoc._build_headerc       	      C   s  d d t  | ƒ d } t  | ƒ t  | ƒ |  _ |  j ƒ  |  j ƒ  |  j ƒ  | } t | d ƒ } | r} t | d ƒ } n  | j |  j ƒ | j |  j	 ƒ y | j | ƒ Wn| t
 k
 r,} z\ | j d k rØ ‚  n  d
 } x9 t d t  | ƒ | ƒ D] } | j t | | | ƒ ƒ q÷ WWYd  d  } ~ Xn X| j | ƒ | j |  j ƒ | j |  j ƒ | j |  j ƒ | r}| j ƒ  n  d  S)Ns    i   Úwritezw+bé   r   i   r   i   i  @ )r   r   r    r.   r4   ÚhasattrÚopenr5   r   r   ÚIOErrorÚerrnor   Úbufferr   r   r
   Úclose)	r   Zfile_name_or_filelike_objÚstreamÚpaddingÚfZ	we_own_itÚeÚ
chunk_sizeÚoffsetr   r   r   Úsaveú   s2    


0zXlsDoc.saveNr   r   éýÿÿÿéüÿÿÿ)Ú__name__Ú
__module__Ú__qualname__ZSECTOR_SIZEZ	MIN_LIMITr%   r'   r)   r(   r   r    r.   r4   rC   r   r   r   r   r      s   OU*r   )r   Úcompatr   r   r   r   r   r   Ú<module>   s   