U
    ‰dË&  ã                   @   s&   d dl Z ddlmZ G dd„ dƒZdS )é    Né   )Úxrangec                   @   sL   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   é   éÿÿÿÿéþÿÿÿéýÿÿÿéüÿÿÿc                 C   s:   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/tmp/pip-unpacked-wheel-xnx7fvnv/xlwt/CompoundDoc.pyÚ__init__   s    zXlsDoc.__init__c                 C   sr  d| _ d d¡}t|ƒ}dd|  }d}d}d}d}d}d	}	d
}
|  j t d|| ||||||d
d
d
d
d
d
d
d
d
|	|
d
¡7  _ d d¡}t|ƒ}dd|  }d}d}d}d}d}d
}	| j}
|  j t 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 d|| ||||||d
d
d
d
d
d
d
d
d
|	|
d
¡d 7  _ d S )Nó    zRoot Entry z	utf-16-leó    é@   é   r   r   r   r   z<64s H 2B 3l 9L l L Lz	Workbook é   )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   sœ  | j d? }t| jƒd? }|| }d}d}d}|d| ks@||krr|d7 }|d7 }||kr,|d7 }|d7 }|d7 }q,| jgd | }d}||d k r´| j |¡ |d ||< |d7 }q†| j |¡ | j||< |d7 }||| k rþ| j |¡ | j||< |d7 }qÒ||| | k r0| j	 |¡ | j
||< |d7 }qþ||| | | d k rn| j |¡ |d ||< |d7 }q0| j |¡ | j||< |d7 }tjd|d  f|žŽ | _| jgd }	ttddƒ| j	ƒD ]\}
}||	|
< qÄtjd
|	žŽ | _| jgd | }|dkr| j|d	< d}
d}d}|
|k r~|d d dkr\|d7 }|t| jƒk rr| j| ||< n| j	|
 ||< |
d7 }
|d7 }qtjd|d  f|žŽ | _d S )Né	   r   ém   é€   r   é   z<%dlú<109lr   )r'   )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  dd¡}t  dd¡}d	}t  d
t| jƒ¡}	t  d| jd ¡}
d}t  d
d¡}t  dd¡}t  d
d¡}t| jƒdkr˜t  dd¡}nt  d| jd ¡}t  d
t| jƒ¡}d |||||||||	|
||||||g¡| _d S )Ns   ÐÏà¡±ás                   s   > s    s   þÿz<Hr#   é   s
             z<Lz<lr   s       r   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Ð   sF    ñzXlsDoc._build_headerc           	   
   C   s  ddt |ƒd   }t |ƒt |ƒ | _|  ¡  |  ¡  |  ¡  |}t|dƒ }|r\t|dƒ}| | j¡ | | j	¡ z| |¡ W nZ t
k
rÜ } z<|jdkr ‚ d}tdt |ƒ|ƒD ]}| t|||ƒ¡ q´W 5 d }~X Y nX | |¡ | | j¡ | | j¡ | | j¡ |r| ¡  d S )Nr   r   Úwritezw+bé   i  @ r   )r   r!   r"   r1   r5   ÚhasattrÚopenr6   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    

&
zXlsDoc.saveN)Ú__name__Ú
__module__Ú__qualname__ZSECTOR_SIZEZ	MIN_LIMITr(   r*   r,   r+   r   r"   r1   r5   rD   r   r   r   r   r      s   OU*r   )r   Úcompatr   r   r   r   r   r   Ú<module>   s   