a
    èÞJbL  ã                   @   s"   d dl mZ G dd„ dejƒZdS )é   )Ú	xmlwriterc                       sl  e Zd ZdZ‡ fdd„ZdWdd„Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ Zd!d"„ Zd#d$„ Zd%d&„ Zd'd(„ Zd)d*„ Zd+d,„ Zd-d.„ Zd/d0„ Zd1d2„ ZdXd3d4„Zd5d6„ Zd7d8„ Zd9d:„ Zd;d<„ Z d=d>„ Z!d?d@„ Z"dAdB„ Z#dCdD„ Z$dEdF„ Z%dGdH„ Z&dIdJ„ Z'dKdL„ Z(dMdN„ Z)dOdP„ Z*dQdR„ Z+dSdT„ Z,dUdV„ Z-‡  Z.S )YÚVmlz8
    A class for writing the Excel XLSX Vml file.


    c                    s   t t| ƒ ¡  dS )z
        Constructor.

        N)Úsuperr   Ú__init__©Úself©Ú	__class__© ú-lib/python3.9/site-packages/xlsxwriter/vml.pyr      s    zVml.__init__Nc                 C   sÌ   d}|   ¡  |  |¡ |rJ|  ¡  |D ]"}|d7 }|  |||¡ |d7 }q&|r~|  ¡  |D ]"}|d7 }|  |||¡ |d7 }qZ|r¶|  ¡  d}	|D ]"}
|d7 }|  ||	|
¡ |	d7 }	q’|  d¡ |  	¡  d S )Nr   Úxml)
Ú_write_xml_namespaceÚ_write_shapelayoutÚ_write_button_shapetypeÚ_write_button_shapeÚ_write_comment_shapetypeÚ_write_comment_shapeÚ_write_image_shapetypeÚ_write_image_shapeÚ_xml_end_tagZ
_xml_close)r   Údata_idZvml_shape_idZcomments_dataZbuttons_dataZheader_images_dataÚz_indexÚbuttonÚcommentÚindexZimager
   r
   r   Ú_assemble_xml_file'   s0    




zVml._assemble_xml_filec                 C   s@   |dd… \}}}}|d9 }|d9 }|d9 }|d9 }||||fS )Né   é   ç      è?r
   )r   ÚverticesÚleftÚtopÚwidthÚheightr
   r
   r   Ú_pixels_to_pointsV   s    zVml._pixels_to_pointsc                 C   sB   d}|d }|d }|d }d|fd|fd|fg}|   d|¡ d S )	Nzurn:schemas-microsoft-com:Zvmlzoffice:officezoffice:excelzxmlns:vzxmlns:ozxmlns:xr   )Ú_xml_start_tag)r   ZschemaZxmlnsZxmlns_oZxmlns_xÚ
attributesr
   r
   r   r   h   s    ýzVml._write_xml_namespacec                 C   s*   dg}|   d|¡ |  |¡ |  d¡ d S )N©úv:extÚeditzo:shapelayout)r%   Ú_write_idmapr   ©r   r   r&   r
   r
   r   r   w   s    
zVml._write_shapelayoutc                 C   s   dd|fg}|   d|¡ d S )Nr'   Údatazo:idmap©Ú_xml_empty_tagr+   r
   r
   r   r*   ‚   s    þzVml._write_idmapc                 C   sZ   d}d}d}d}d|fd|fd|fd|fg}|   d	|¡ |  ¡  |  d
d¡ |  d	¡ d S )NZ_x0000_t202ú21600,21600éÊ   úm,l,21600r21600,l21600,xeÚidÚ	coordsizeúo:sptÚpathúv:shapetypeÚtÚrect)r%   Ú_write_strokeÚ_write_comment_pathr   ©r   Úshape_idr3   Úsptr5   r&   r
   r
   r   r   ‹   s    üzVml._write_comment_shapetypec                 C   s^   d}d}d}d}d|fd|fd|fd|fg}|   d	|¡ |  ¡  |  ¡  |  ¡  |  d	¡ d S )
NZ_x0000_t201r/   éÉ   r1   r2   r3   r4   r5   r6   )r%   r9   Ú_write_button_pathÚ_write_shapetype_lockr   r;   r
   r
   r   r   £   s    üzVml._write_button_shapetypec           	      C   s„   d}d}d}d}d}d}d}d|fd|fd	|fd
|fd|fd|fd|fg}|   d|¡ |  ¡  |  ¡  |  ¡  |  ¡  |  d¡ d S )NZ
_x0000_t75r/   éK   r7   zm@4@5l@4@11@9@11@9@5xeÚfr2   r3   r4   zo:preferrelativer5   ÚfilledÚstrokedr6   )r%   r9   Ú_write_formulasÚ_write_image_pathÚ_write_aspect_ratio_lockr   )	r   r<   r3   r=   Zo_preferrelativer5   rC   rD   r&   r
   r
   r   r   ¾   s*    ù
zVml._write_image_shapetypec                 C   s   d}d|fg}|   d|¡ d S )NZmiterÚ	joinstylezv:stroker-   )r   rH   r&   r
   r
   r   r9   â   s    
zVml._write_strokec                 C   s0   g }|r|  d¡ |  d|f¡ |  d|¡ d S )N)Úgradientshapeokr7   úo:connecttypeúv:path)Úappendr.   )r   rI   Úconnecttyper&   r
   r
   r   r:   ê   s
    
zVml._write_comment_pathc                 C   sF   d}d}d}d}d}d|fd|fd|fd|fd|fg}|   d|¡ d S )	NrB   r8   Úshadowokúo:extrusionokÚstrokeokÚfillokrJ   rK   r-   )r   rN   ÚextrusionokrP   rQ   rM   r&   r
   r
   r   r?   õ   s    ûzVml._write_button_pathc                 C   s2   d}d}d}d|fd|fd|fg}|   d|¡ d S )NrB   r7   r8   rO   rI   rJ   rK   r-   )r   rR   rI   rM   r&   r
   r
   r   rF     s    ýzVml._write_image_pathc                 C   s(   d}d}d|fd|fg}|   d|¡ d S )Nr)   r7   r(   Ú	shapetypeúo:lockr-   )r   ÚextrS   r&   r
   r
   r   r@     s    þzVml._write_shapetype_lockc                 C   s(   d}d}d|fd|fg}|   d|¡ d S )Nr)   r7   r(   ÚrotationrT   r-   )r   rU   rV   r&   r
   r
   r   Ú_write_rotation_lock!  s    þzVml._write_rotation_lockc                 C   s(   d}d}d|fd|fg}|   d|¡ d S )Nr)   r7   r(   ÚaspectratiorT   r-   )r   rU   rX   r&   r
   r
   r   rG   -  s    þzVml._write_aspect_ratio_lockc                 C   sÞ   d}d}d}dt |ƒ }|d }|d }|d }	|d }
|d	 }|  |¡\}}}}|	rZd
}d||||||f }d|fd|fd|fd|
fd|fg}|  d|¡ |  ¡  |  ¡  |  d d¡ |  ¡  |  |||	|¡ |  d¡ d S )Nz#_x0000_t202ÚautoZhiddenÚ_x0000_sé    r   é   é   é	   Úvisibleznposition:absolute;margin-left:%.15gpt;margin-top:%.15gpt;width:%.15gpt;height:%.15gpt;z-index:%d;visibility:%sr2   ÚtypeÚstyleÚ	fillcolorúo:insetmodeúv:shapeZnone)	Ústrr$   r%   Ú_write_comment_fillÚ_write_shadowr:   Ú_write_comment_textboxÚ_write_comment_client_datar   )r   r<   r   r   Ú
shape_typeZ	insetmodeZ
visibilityÚrowÚcolr_   rb   r   r    r!   r"   r#   ra   r&   r
   r
   r   r   9  s:    úÿ
ûzVml._write_comment_shapec                 C   sà   d}dt |ƒ }|d }|  |¡\}}}}	d||||	|f }
d|fd|fg}| d¡rh| d|d f¡ | d	|
f¡ | d
¡ | d¡ | d¡ | d¡ |  d|¡ |  ¡  |  ¡  |  |d ¡ |  |¡ |  	d¡ d S )Nz#_x0000_t201rZ   r   zuposition:absolute;margin-left:%.15gpt;margin-top:%.15gpt;width:%.15gpt;height:%.15gpt;z-index:%d;mso-wrap-style:tightr2   r`   ÚdescriptionZaltra   )zo:buttonr7   )rb   úbuttonFace [67])ZstrokecolorzwindowText [64])rc   rY   rd   Úfont)
re   r$   ÚgetrL   r%   Ú_write_button_fillrW   Ú_write_button_textboxÚ_write_button_client_datar   )r   r<   r   r   rj   r   r    r!   r"   r#   ra   r&   r
   r
   r   r   s  s0    úÿ
þ





zVml._write_button_shapec                 C   sè   d}dt |ƒ }|d }|d }|d }|d }|d }	|d }
|d	 }|d
 |	 }|d
 |
 }dt|d d d ƒ }dt|d d d ƒ }d|||f }d|fd|fd|fd|fg}|  d|¡ |  ||¡ |  ¡  |  d¡ d S )Nz#_x0000_t75rZ   r[   r   é   é   r\   r]   é   g      R@r   g      X@éH   g      Ð?zTposition:absolute;margin-left:0;margin-top:0;width:%.15gpt;height:%.15gpt;z-index:%dr2   zo:spidr`   ra   rd   )re   Úintr%   Ú_write_imagedatarW   r   )r   r<   r   Z
image_datarj   r"   r#   ÚnameZpositionZx_dpiZy_dpiÚref_idra   r&   r
   r
   r   r   ¨  s4    ûÿ	üzVml._write_image_shapec                 C   s   d}d|fg}|   d|¡ d S )Nz#ffffe1Úcolor2úv:fillr-   )r   Úcolor_2r&   r
   r
   r   rf   Ù  s    
zVml._write_comment_fillc                 C   s(   d}d}d|fd|fg}|   d|¡ d S )Nrn   r7   r|   zo:detectmouseclickr}   r-   )r   r~   Zdetectmouseclickr&   r
   r
   r   rq   á  s    þzVml._write_button_fillc                 C   s2   d}d}d}d|fd|fd|fg}|   d|¡ d S )Nr7   ZblackÚonÚcolorÚobscuredzv:shadowr-   )r   r   r€   r   r&   r
   r
   r   rg   í  s    ýzVml._write_shadowc                 C   s2   d}d|fg}|   d|¡ |  d¡ |  d¡ d S )Númso-direction-alt:autora   ú	v:textboxr    ©r%   Ú
_write_divr   )r   ra   r&   r
   r
   r   rh   û  s
    

zVml._write_comment_textboxc                 C   s6   d}d|fdg}|   d|¡ |  d|¡ |  d¡ d S )Nr‚   ra   )zo:singleclickrB   rƒ   Úcenterr„   )r   ro   ra   r&   r
   r
   r   rr     s
    zVml._write_button_textboxc                 C   s:   d| }d|fg}|   d|¡ |r,|  |¡ |  d¡ d S )Nztext-align:ra   Zdiv)r%   Ú_write_fontr   )r   Zalignro   ra   r&   r
   r
   r   r…     s    

zVml._write_divc                 C   s<   |d }d}d}d}d|fd|fd|fg}|   d||¡ d S )	NÚcaptionZCalibriéÜ   z#000000ÚfaceÚsizer€   ro   ©Ú_xml_data_element)r   ro   rˆ   rŠ   r‹   r€   r&   r
   r
   r   r‡   $  s    ýzVml._write_fontc                 C   sj   d}d|fg}|   d|¡ |  ¡  |  ¡  |  |¡ |  ¡  |  |¡ |  |¡ |r\|  ¡  |  d¡ d S )NZNoteÚ
ObjectTypeúx:ClientData)	r%   Ú_write_move_with_cellsÚ_write_size_with_cellsÚ_write_anchorÚ_write_auto_fillÚ
_write_rowÚ_write_columnÚ_write_visibler   )r   rk   rl   r_   r   Úobject_typer&   r
   r
   r   ri   3  s    



zVml._write_comment_client_datac                 C   sl   |d }|d }d}d|fg}|   d|¡ |  |¡ |  ¡  |  ¡  |  |¡ |  ¡  |  ¡  |  d¡ d S )NÚmacror   ZButtonrŽ   r   )r%   r’   Ú_write_print_objectr“   Ú_write_fmla_macroÚ_write_text_halignÚ_write_text_valignr   )r   r   r˜   r   r—   r&   r
   r
   r   rs   S  s    


zVml._write_button_client_datac                 C   s   |   d¡ d S )Nzx:MoveWithCellsr-   r   r
   r
   r   r   r  s    zVml._write_move_with_cellsc                 C   s   |   d¡ d S )Nzx:SizeWithCellsr-   r   r
   r
   r   r‘   v  s    zVml._write_size_with_cellsc                 C   s   |   d¡ d S )Nz	x:Visibler-   r   r
   r
   r   r–   z  s    zVml._write_visiblec                 C   sX   |d d… \}}}}}}}}	||||||||	g}
dd„ |
D ƒ}
d  |
¡}|  d|¡ d S )Nr   c                 S   s   g | ]}t |ƒ‘qS r
   )re   )Ú.0Úir
   r
   r   Ú
<listcomp>ƒ  ó    z%Vml._write_anchor.<locals>.<listcomp>z, zx:Anchor)Újoinr   )r   r   Z	col_startZ	row_startZx1Zy1Zcol_endZrow_endZx2Zy2Ústringsr,   r
   r
   r   r’   ~  s
    
zVml._write_anchorc                 C   s   d}|   d|¡ d S )NÚFalsez
x:AutoFillrŒ   ©r   r,   r
   r
   r   r“   ‰  s    zVml._write_auto_fillc                 C   s   |   d|¡ d S )Nzx:RowrŒ   r¤   r
   r
   r   r”     s    zVml._write_rowc                 C   s   |   d|¡ d S )Nzx:ColumnrŒ   r¤   r
   r
   r   r•   “  s    zVml._write_columnc                 C   s   |   dd¡ d S )Nzx:PrintObjectr£   rŒ   r   r
   r
   r   r™   —  s    zVml._write_print_objectc                 C   s   |   dd¡ d S )Nzx:TextHAlignÚCenterrŒ   r   r
   r
   r   r›   ›  s    zVml._write_text_halignc                 C   s   |   dd¡ d S )Nzx:TextVAlignr¥   rŒ   r   r
   r
   r   rœ   Ÿ  s    zVml._write_text_valignc                 C   s   |   d|¡ d S )Nzx:FmlaMacrorŒ   r¤   r
   r
   r   rš   £  s    zVml._write_fmla_macroc                 C   s(   ddt |ƒ fd|fg}|  d|¡ d S )Nzo:relidZrIdzo:titlezv:imagedata)re   r.   )r   r{   Zo_titler&   r
   r
   r   ry   §  s    þzVml._write_imagedatac                 C   s   |   d¡ |  d¡ |  d¡ |  d¡ |  d¡ |  d¡ |  d¡ |  d¡ |  d	¡ |  d
¡ |  d¡ |  d¡ |  d¡ |  d¡ d S )Nz
v:formulaszif lineDrawn pixelLineWidth 0z
sum @0 1 0z
sum 0 0 @1zprod @2 1 2zprod @3 21600 pixelWidthzprod @3 21600 pixelHeightz
sum @0 0 1zprod @6 1 2zprod @7 21600 pixelWidthzsum @8 21600 0zprod @7 21600 pixelHeightzsum @10 21600 0)r%   Ú_write_formular   r   r
   r
   r   rE   °  s    












zVml._write_formulasc                 C   s   d|fg}|   d|¡ d S )NÚeqnzv:fr-   )r   r§   r&   r
   r
   r   r¦   Ä  s    
zVml._write_formula)NNN)N)/Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r$   r   r   r*   r   r   r   r9   r:   r?   rF   r@   rW   rG   r   r   r   rf   rq   rg   rh   rr   r…   r‡   ri   rs   r   r‘   r–   r’   r“   r”   r•   r™   r›   rœ   rš   ry   rE   r¦   Ú__classcell__r
   r
   r   r   r      sZ     ÿ
/	$:51
 	r   N)Ú r   Z	XMLwriterr   r
   r
   r
   r   Ú<module>
   s   