B
    ±ªt\¥K  ã               @   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.7/site-packages/xlsxwriter/vml.pyr      s    zVml.__init__Nc             C   sØ   d}|   ¡  |  |¡ |rN|  ¡  x*|D ]"}|d7 }|  |||¡ |d7 }q(W |r†|  ¡  x*|D ]"}|d7 }|  |||¡ |d7 }q`W |rÂ|  ¡  d}	x*|D ]"}
|d7 }|  ||	|
¡ |	d7 }	qœW |  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é   é   g      è?r   )r   ÚverticesÚleftÚtopÚwidthÚheightr   r   r	   Ú_pixels_to_pointsU   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   g   s    
zVml._write_xml_namespacec             C   s*   dg}|   d|¡ |  |¡ |  d¡ d S )N)zv:extÚeditzo:shapelayout)r"   Ú_write_idmapr   )r   r   r#   r   r   r	   r   v   s    
zVml._write_shapelayoutc             C   s   dd|fg}|   d|¡ d S )N)zv:extr$   Údatazo:idmap)Ú_xml_empty_tag)r   r   r#   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_t202z21600,21600éÊ   zm,l,21600r21600,l21600,xeÚidÚ	coordsizezo:sptÚpathzv:shapetypeÚtÚrect)r"   Ú_write_strokeÚ_write_comment_pathr   )r   Úshape_idr*   Úsptr+   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_t201z21600,21600éÉ   zm,l,21600r21600,l21600,xer)   r*   zo:sptr+   zv:shapetype)r"   r.   Ú_write_button_pathÚ_write_shapetype_lockr   )r   r0   r*   r1   r+   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_t75z21600,21600éK   r,   zm@4@5l@4@11@9@11@9@5xeÚfr)   r*   zo:sptzo:preferrelativer+   ÚfilledÚstrokedzv:shapetype)r"   r.   Ú_write_formulasÚ_write_image_pathÚ_write_aspect_ratio_lockr   )	r   r0   r*   r1   Zo_preferrelativer+   r7   r8   r#   r   r   r	   r   ½   s(    
zVml._write_image_shapetypec             C   s   d}d|fg}|   d|¡ d S )NZmiterÚ	joinstylezv:stroke)r'   )r   r<   r#   r   r   r	   r.   á   s    
zVml._write_strokec             C   s0   g }|r|  d¡ |  d|f¡ |  d|¡ d S )N)Úgradientshapeokr,   zo:connecttypezv:path)Úappendr'   )r   r=   Ú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 )	Nr6   r-   Úshadowokzo:extrusionokÚstrokeokÚfillokzo:connecttypezv:path)r'   )r   r@   ÚextrusionokrA   rB   r?   r#   r   r   r	   r3   ô   s    
zVml._write_button_pathc             C   s2   d}d}d}d|fd|fd|fg}|   d|¡ d S )Nr6   r,   r-   zo:extrusionokr=   zo:connecttypezv:path)r'   )r   rC   r=   r?   r#   r   r   r	   r:     s    
zVml._write_image_pathc             C   s(   d}d}d|fd|fg}|   d|¡ d S )Nr$   r,   zv:extÚ	shapetypezo:lock)r'   )r   ÚextrD   r#   r   r   r	   r4     s
    
zVml._write_shapetype_lockc             C   s(   d}d}d|fd|fg}|   d|¡ d S )Nr$   r,   zv:extÚrotationzo:lock)r'   )r   rE   rF   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$   r,   zv:extÚaspectratiozo:lock)r'   )r   rE   rH   r#   r   r   r	   r;   ,  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:%sr)   ÚtypeÚstyleÚ	fillcolorzo:insetmodezv:shapeZnone)	Ústrr!   r"   Ú_write_comment_fillÚ_write_shadowr/   Ú_write_comment_textboxÚ_write_comment_client_datar   )r   r0   r   r   Ú
shape_typeZ	insetmodeZ
visibilityÚrowÚcolrO   rR   r   r   r   r   r    rQ   r#   r   r   r	   r   8  s4    
zVml._write_comment_shapec             C   sœ   d}dt |ƒ }|d }|  |¡\}}}}	d||||	|f }
d|fd|fd|
fdd	d
dg}|  d|¡ |  ¡  |  ¡  |  |d ¡ |  |¡ |  d¡ d S )Nz#_x0000_t201rJ   r   zuposition:absolute;margin-left:%.15gpt;margin-top:%.15gpt;width:%.15gpt;height:%.15gpt;z-index:%d;mso-wrap-style:tightr)   rP   rQ   )zo:buttonr,   )rR   zbuttonFace [67])ZstrokecolorzwindowText [64])zo:insetmoderI   zv:shapeÚfont)rS   r!   r"   Ú_write_button_fillrG   Ú_write_button_textboxÚ_write_button_client_datar   )r   r0   r   r   rX   r   r   r   r   r    rQ   r#   r   r   r	   r   r  s&    
zVml._write_button_shapec             C   sà   d}dt |ƒ }|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_t75rJ   rK   r   é   é   rL   rM   g      R@g      è?g      X@éH   g      Ð?zTposition:absolute;margin-left:0;margin-top:0;width:%.15gpt;height:%.15gpt;z-index:%dr)   zo:spidrP   rQ   zv:shape)rS   Úintr"   Ú_write_imagedatarG   r   )r   r0   r   Z
image_datarX   r   r    ÚnameZpositionZx_dpiZy_dpirQ   r#   r   r   r	   r   £  s,    
zVml._write_image_shapec             C   s   d}d|fg}|   d|¡ d S )Nz#ffffe1Úcolor2zv:fill)r'   )r   Úcolor_2r#   r   r   r	   rT   Ó  s    
zVml._write_comment_fillc             C   s(   d}d}d|fd|fg}|   d|¡ d S )NzbuttonFace [67]r,   re   zo:detectmouseclickzv:fill)r'   )r   rf   Zdetectmouseclickr#   r   r   r	   r\   Û  s
    
zVml._write_button_fillc             C   s2   d}d}d}d|fd|fd|fg}|   d|¡ d S )Nr,   ZblackÚonÚcolorÚobscuredzv:shadow)r'   )r   rg   rh   ri   r#   r   r   r	   rU   ç  s    
zVml._write_shadowc             C   s2   d}d|fg}|   d|¡ |  d¡ |  d¡ d S )Nzmso-direction-alt:autorQ   z	v:textboxr   )r"   Ú
_write_divr   )r   rQ   r#   r   r   r	   rV   õ  s
    

zVml._write_comment_textboxc             C   s6   d}d|fdg}|   d|¡ |  d|¡ |  d¡ d S )Nzmso-direction-alt:autorQ   )zo:singleclickr6   z	v:textboxÚcenter)r"   rj   r   )r   r[   rQ   r#   r   r   r	   r]     s
    zVml._write_button_textboxc             C   s:   d| }d|fg}|   d|¡ |r,|  |¡ |  d¡ d S )Nztext-align:rQ   Zdiv)r"   Ú_write_fontr   )r   Zalignr[   rQ   r#   r   r   r	   rj     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Úsizerh   r[   )Ú_xml_data_element)r   r[   rm   ro   rp   rh   r#   r   r   r	   rl     s    
zVml._write_fontc             C   sj   d}d|fg}|   d|¡ |  ¡  |  ¡  |  |¡ |  ¡  |  |¡ |  |¡ |r\|  ¡  |  d¡ d S )NZNoteÚ
ObjectTypezx:ClientData)	r"   Ú_write_move_with_cellsÚ_write_size_with_cellsÚ_write_anchorÚ_write_auto_fillÚ
_write_rowÚ_write_columnÚ_write_visibler   )r   rY   rZ   rO   r   Úobject_typer#   r   r   r	   rW   -  s    



zVml._write_comment_client_datac             C   sl   |d }|d }d}d|fg}|   d|¡ |  |¡ |  ¡  |  ¡  |  |¡ |  ¡  |  ¡  |  d¡ d S )NÚmacror   ZButtonrr   zx:ClientData)r"   ru   Ú_write_print_objectrv   Ú_write_fmla_macroÚ_write_text_halignÚ_write_text_valignr   )r   r   r{   r   rz   r#   r   r   r	   r^   M  s    


zVml._write_button_client_datac             C   s   |   d¡ d S )Nzx:MoveWithCells)r'   )r   r   r   r	   rs   l  s    zVml._write_move_with_cellsc             C   s   |   d¡ d S )Nzx:SizeWithCells)r'   )r   r   r   r	   rt   p  s    zVml._write_size_with_cellsc             C   s   |   d¡ d S )Nz	x:Visible)r'   )r   r   r   r	   ry   t  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   )rS   )Ú.0Úir   r   r	   ú
<listcomp>}  s    z%Vml._write_anchor.<locals>.<listcomp>z, zx:Anchor)Újoinrq   )r   r   Z	col_startZ	row_startZx1Zy1Zcol_endZrow_endZx2Zy2Zstringsr&   r   r   r	   ru   x  s
    
zVml._write_anchorc             C   s   d}|   d|¡ d S )NÚFalsez
x:AutoFill)rq   )r   r&   r   r   r	   rv   ƒ  s    zVml._write_auto_fillc             C   s   |   d|¡ d S )Nzx:Row)rq   )r   r&   r   r   r	   rw   ‰  s    zVml._write_rowc             C   s   |   d|¡ d S )Nzx:Column)rq   )r   r&   r   r   r	   rx     s    zVml._write_columnc             C   s   |   dd¡ d S )Nzx:PrintObjectr„   )rq   )r   r   r   r	   r|   ‘  s    zVml._write_print_objectc             C   s   |   dd¡ d S )Nzx:TextHAlignÚCenter)rq   )r   r   r   r	   r~   •  s    zVml._write_text_halignc             C   s   |   dd¡ d S )Nzx:TextVAlignr…   )rq   )r   r   r   r	   r   ™  s    zVml._write_text_valignc             C   s   |   d|¡ d S )Nzx:FmlaMacro)rq   )r   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)rS   r'   )r   Zimage_indexZo_titler#   r   r   r	   rc   ¡  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	   r9   ª  s    












zVml._write_formulasc             C   s   d|fg}|   d|¡ d S )NÚeqnzv:f)r'   )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   r.   r/   r3   r:   r4   rG   r;   r   r   r   rT   r\   rU   rV   r]   rj   rl   rW   r^   rs   rt   ry   ru   rv   rw   rx   r|   r~   r   r}   rc   r9   r†   Ú__classcell__r   r   )r   r	   r      sX    
.	$:10
 	r   N)Ú r   Z	XMLwriterr   r   r   r   r	   Ú<module>	   s   