o
    bK                     @   s"   d dl mZ G dd dejZdS )   )	xmlwriterc                       sp  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__ M/var/www/secure340b-portal/env/lib/python3.10/site-packages/xlsxwriter/vml.pyr      s   zVml.__init__Nc                 C   s   d}|    | | |r%|   |D ]}|d7 }| ||| |d7 }q|r?|   |D ]}|d7 }| ||| |d7 }q-|r[|   d}	|D ]}
|d7 }| ||	|
 |	d7 }	qI| 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index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_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schema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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 )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_idr5   sptr7   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_t201r1      r3   r4   r5   r6   r7   r8   )r&   r;   _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_t75r1   K   r9   zm@4@5l@4@11@9@11@9@5xefr4   r5   r6   zo:preferrelativer7   filledstrokedr8   )r&   r;   _write_formulas_write_image_path_write_aspect_ratio_lockr   )	r   r>   r5   r?   Zo_preferrelativer7   rE   rF   r(   r
   r
   r   r      s*   
zVml._write_image_shapetypec                 C      d}d|fg}|  d| d S )NZmiter	joinstylezv:stroker/   )r   rK   r(   r
   r
   r   r;         
zVml._write_strokec                 C   s0   g }|r	| d | d|f | d| d S )N)gradientshapeokr9   o:connecttypev:path)appendr0   )r   rM   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 )	NrD   r:   shadowoko:extrusionokstrokeokfillokrN   rO   r/   )r   rR   extrusionokrT   rU   rQ   r(   r
   r
   r   rA      s   zVml._write_button_pathc                 C   s2   d}d}d}d|fd|fd|fg}|  d| d S )NrD   r9   r:   rS   rM   rN   rO   r/   )r   rV   rM   rQ   r(   r
   r
   r   rH        zVml._write_image_pathc                 C   (   d}d}d|fd|fg}|  d| d S )Nr+   r9   r*   	shapetypeo:lockr/   )r   extrY   r(   r
   r
   r   rB        zVml._write_shapetype_lockc                 C   rX   )Nr+   r9   r*   rotationrZ   r/   )r   r[   r]   r(   r
   r
   r   _write_rotation_lock   r\   zVml._write_rotation_lockc                 C   rX   )Nr+   r9   r*   aspectratiorZ   r/   )r   r[   r_   r(   r
   r
   r   rI   ,  r\   zVml._write_aspect_ratio_lockc                 C   s   d}d}d}dt | }|d }|d }|d }	|d }
|d	 }| |\}}}}|	r-d
}d||||||f }d|fd|fd|fd|
fd|fg}| d| |   |   | d d |   | |||	| | d d S )Nz#_x0000_t202autohidden_x0000_s    r         	   visibleznposition:absolute;margin-left:%.15gpt;margin-top:%.15gpt;width:%.15gpt;height:%.15gpt;z-index:%d;visibility:%sr4   typestyle	fillcoloro:insetmodev:shapenone)	strr%   r&   _write_comment_fill_write_shadowr<   _write_comment_textbox_write_comment_client_datar   )r   r>   r   r   
shape_typeZ	insetmodeZ
visibilityrowcolrg   rj   r    r!   r"   r#   r$   ri   r(   r
   r
   r   r   8  s:   
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_t201rb   r    zuposition:absolute;margin-left:%.15gpt;margin-top:%.15gpt;width:%.15gpt;height:%.15gpt;z-index:%d;mso-wrap-style:tightr4   rh   ri   )zo:buttonr9   )rj   buttonFace [67])ZstrokecolorzwindowText [64])rk   r`   rl   font)rn   r%   r&   _write_button_fillr^   _write_button_textbox_write_button_client_datar   )r   r>   r   r   rs   r    r!   r"   r#   r$   ri   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
 |
 }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_t75rb   rc   r         rd   re      g      R@r   g      X@H   g      ?zTposition:absolute;margin-left:0;margin-top:0;width:%.15gpt;height:%.15gpt;z-index:%dr4   zo:spidrh   ri   rl   )rn   intr&   _write_imagedatar^   r   )r   r>   r   Z
image_datars   r#   r$   namepositionZx_dpiZy_dpiref_idri   r(   r
   r
   r   r     s4   	zVml._write_image_shapec                 C   rJ   )Nz#ffffe1color2v:fillr/   )r   color_2r(   r
   r
   r   ro     rL   zVml._write_comment_fillc                 C   rX   )Nrv   r9   r   zo:detectmouseclickr   r/   )r   r   Zdetectmouseclickr(   r
   r
   r   rx     r\   zVml._write_button_fillc                 C   s2   d}d}d}d|fd|fd|fg}|  d| d S )Nr9   blackoncolorobscuredzv:shadowr/   )r   r   r   r   r(   r
   r
   r   rp     rW   zVml._write_shadowc                 C   s2   d}d|fg}|  d| | d | d d S )Nmso-direction-alt:autori   	v:textboxr!   r&   
_write_divr   )r   ri   r(   r
   r
   r   rq     s
   

zVml._write_comment_textboxc                 C   s6   d}d|fdg}|  d| | d| | d d S )Nr   ri   )zo:singleclickrD   r   centerr   )r   rw   ri   r(   r
   r
   r   ry     s
   zVml._write_button_textboxc                 C   s:   d| }d|fg}|  d| |r| | | d d S )Nztext-align:ri   div)r&   _write_fontr   )r   alignrw   ri   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   rw   _xml_data_element)r   rw   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   rt   ru   rg   r    object_typer(   r
   r
   r   rr   .  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   rz   N  s   


zVml._write_button_client_datac                 C      |  d d S )Nzx:MoveWithCellsr/   r   r
   r
   r   r   m     zVml._write_move_with_cellsc                 C   r   )Nzx:SizeWithCellsr/   r   r
   r
   r   r   q  r   zVml._write_size_with_cellsc                 C   r   )Nz	x:Visibler/   r   r
   r
   r   r   u  r   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
   )rn   ).0ir
   r
   r   
<listcomp>~  s    z%Vml._write_anchor.<locals>.<listcomp>z, zx:Anchor)joinr   )r   r    Z	col_startZ	row_startx1y1Zcol_endZrow_endZx2y2stringsr.   r
   r
   r   r   y  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      |  d| d S )Nzx:Rowr   r   r
   r
   r   r        zVml._write_rowc                 C   r   )Nzx:Columnr   r   r
   r
   r   r     r   zVml._write_columnc                 C      |  dd d S )Nzx:PrintObjectr   r   r   r
   r
   r   r     r   zVml._write_print_objectc                 C   r   )Nzx:TextHAlignCenterr   r   r
   r
   r   r     r   zVml._write_text_halignc                 C   r   )Nzx:TextVAlignr   r   r   r
   r
   r   r     r   zVml._write_text_valignc                 C   r   )Nzx:FmlaMacror   r   r
   r
   r   r     r   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)rn   r0   )r   r   Zo_titler(   r
   r
   r   r     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   rG     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   r;   r<   rA   rH   rB   r^   rI   r   r   r   ro   rx   rp   rq   ry   r   r   rr   rz   r   r   r   r   r   r   r   r   r   r   r   r   rG   r   __classcell__r
   r
   r   r   r      s\    
/	$:11
 	r   N) r   Z	XMLwriterr   r
   r
   r
   r   <module>   s   