a
    ¥Q•hm  ã                   @   sÀ   d Z ddlmZmZmZmZmZ ddlmZ ddl	m
Z
 ddlmZ ddlmZ dd	lmZmZ dd
lmZ dZdd„ Zdd„ Zdd„ Zddd„Zdd„ Zdd„ Zd dd„Zdd„ Zdd„ ZdS )!zDraw borders.é    )ÚceilÚfloorÚpiÚsqrtÚtané   )Úboxes)Úreplaced)Ú
percentage)ÚMatrixé   )Ú	get_colorÚstyled_color)Ústacked)ÚtopÚrightÚbottomÚleftc              	   C   s˜   |j d d dks|jdu r dS | ¡ \}}}}}}}}	t||d�}
|
| j }
|  |||||j d ¡}t|||j|j d |j d |j d	 |j d
 ƒ dS )z5Set ``box`` mask border as alpha state on ``stream``.Úmask_border_sourcer   ÚnoneN©ÚeÚfÚmask_border_modeÚmask_border_sliceÚmask_border_repeatÚmask_border_outsetÚmask_border_width)ÚstyleÚmask_border_imageÚrounded_border_boxr   ÚctmÚset_alpha_stateÚdraw_border_image)ÚstreamÚboxÚxÚyÚwÚhÚtlÚtrÚbrÚblÚmatrixZmask_stream© r/   úO/var/www/sistema_ama/venv/lib/python3.9/site-packages/weasyprint/draw/border.pyÚset_mask_border   s    
ýr1   c                    s  ˆ j d dkrdS tˆ tjƒo8ˆ j d dkp8ˆ j d dk}|�rVˆ j d �rVdddˆ j d f}d	}ˆ jD ]ì}|j d
 dkr‚d	}qhn
|rŒd}qht| ƒ�® ˆ j d }ˆ j d }ˆ j d dkrÄˆ j d }ntˆ j d ˆ jƒ}|jˆ j d | d  }	|	|j	||j
f}
t| ||d|
|ƒ t|tˆ j dƒdƒ}t| |
|||ƒ W d  ƒ qh1 �sJ0    Y  qhˆ j d d dk�r¨ˆ jdu�r¨tˆ | ˆ jˆ j d ˆ j d ˆ j d ˆ j d ƒ dS ‡ fdd„tD ƒ}t|ƒdhk�rÎdS ‡ fdd„tD ƒ‰‡ ‡fdd„ttƒD ƒ}t|ƒdhdhfv }ttˆƒƒd k}d|v}|�rP|�rP|�rPt| ˆ |d ˆd ƒ dS ttt|ˆ|ƒƒ}d!D ]–}|| \}}}}|dk�sf|�sŽ�qft| ƒ�R t| |||ˆ  ¡ dd"… |ˆ  ¡ d"d… ƒ t| ˆ |t|||ƒƒ W d  ƒ n1 �sð0    Y  �qfdS )#zADraw the box borders and column rules to a ``pdf.stream.Stream``.Ú
visibilityÚvisibleNÚcolumn_widthÚautoÚcolumn_countÚcolumn_rule_widthr   TÚcolumn_spanÚallFÚcolumn_rule_styleÚ
column_gapÚnormalÚ	font_sizer   r   Úcolumn_rule_colorÚborder_image_sourcer   Úborder_image_sliceÚborder_image_repeatÚborder_image_outsetÚborder_image_widthc                    s   g | ]}t ˆ d |› d�ƒ‘qS )Úborder_Ú_width)Úgetattr©Ú.0Úside©r%   r/   r0   Ú
<listcomp>K   ó    zdraw_border.<locals>.<listcomp>c                    s    g | ]}t ˆ jd |› d�ƒ‘qS )rD   Ú_color)r   r   rG   rJ   r/   r0   rK   Q   rL   c                    s,   g | ]$\}}ˆ| j o&ˆ jd |› d� ‘qS )rD   Ú_style)Úalphar   )rH   ÚirI   ©r%   Úcolorsr/   r0   rK   R   s   ÿÚsolidÚdoubler   )r   é   r   r   é   )r   Ú
isinstancer   ÚBlockContainerBoxÚchildrenr   r
   ÚwidthÚ
position_xÚ
position_yÚheightÚclip_border_segmentr   r   Údraw_rect_borderÚborder_imager#   ÚSIDESÚsetÚ	enumerateÚlenÚdraw_rounded_borderÚtupleÚzipr    )r$   r%   ÚcolumnsÚborder_widthsZ	skip_nextÚchildZ
rule_widthZ
rule_styleÚgapr[   Ú
border_boxÚcolorÚwidthsÚstylesZsimple_styleZsingle_colorZ
four_sidesÚvaluesÚindexrI   rZ   r   r/   rQ   r0   Údraw_border   s‚    ý



ÿÿÿ2 ýþ
þÿrr   c           4         s²  ˆ  ˆ jd ˆ jd ¡\}}}	tj|||	ddˆ  ¡ ˆ  ¡ d�\‰‰|dd… }
|d }dd„ }||
d ˆƒ}||
d	 ˆƒ}||
d
 ˆƒ}||
d ˆƒ}|\}}ˆ  ¡ \}}}}}}}}ˆ  ¡ \}}}}}} }!}"|| }#|| }$|| |# }%|| |$ }&dd„ }'|'|d |$ƒ}(|'|d	 |%ƒ})|'|d
 |&ƒ}*|'|d |#ƒ}+||+8 }||(8 }||+|) 7 }||(|* 7 }dd„ },|,|d |$||ƒ}$|,|d	 |%||ƒ}%|,|d
 |&||ƒ}&|,|d |#||ƒ}#d‡ ‡‡‡‡fdd„	}-|-|||#|$dd||ƒ\}.}/|-|| |% ||%|$ˆ| d||ƒ |-|| |% || |& |%|&ˆ| ˆ| ||ƒ\}0}1|-||| |& |#|&dˆ| ||ƒ || ˆk  }2�rÎ|-||# |||# |% |$|dˆ| | ||d�	 |-||# || |& ||# |% |&|ˆ| ˆ| | ||d�	 || ˆk  }3�rH|-|| |% ||$ |%||$ |& ˆ| ||ˆ| | |d�	 |-|||$ |#||$ |& d||ˆ| | |d�	 |�r®|2�r®|3�r®|-||# ||$ ||# |% ||$ |& ||ˆ| | ˆ| | |||.�p |0|/�p¨|1d� dS )zHDraw ``image`` as a border image for ``box`` on ``stream`` as specified.Úimage_resolutionr=   N)Úspecified_widthÚspecified_heightÚdefault_widthÚdefault_heightrV   c                 S   s>   t | ttfƒrt| |ƒS | jdks&J ‚td| jƒd | S d S )Nú%éd   )rW   ÚintÚfloatÚminÚunitÚvalue)Ú	dimensionÚ	intrinsicr/   r/   r0   Úcompute_slice_dimension{   s    
z2draw_border_image.<locals>.compute_slice_dimensionr   r   r   rU   c                 S   s,   | j d u r| j| S | j dks"J ‚| jS d S )NÚpx)r}   r~   )r   Zfrom_borderr/   r/   r0   Úcompute_outset_dimension�   s    

z3draw_border_image.<locals>.compute_outset_dimensionc                 S   sR   | dkr|S t | ttfƒr"| | S | jdkr:| jd | S | jdksHJ ‚| jS d S )Nr5   rx   ry   r‚   )rW   rz   r{   r}   r~   )r   Úoriginalr€   Zarea_dimensionr/   r/   r0   Úcompute_width_adjustment¡   s    
z3draw_border_image.<locals>.compute_width_adjustmentÚstretchc                    sØ  dˆ||fv rd}
n d}|
s0|r,|r,|| nd}
|dkrJt || |
 ƒ}nj|dkr|t|| |
 ƒ}||
 ||  |d  }n8|dkr¨tdt|| |
 ƒƒ}|||  }
nd}|| }
dˆ||fv rÈd}n¤d}|sä|rà|rà|| nd}|	dkrþt || | ƒ}nn|	dk�r2t|| | ƒ}|| ||  |d  }n:|	dk�r`tdt|| | ƒƒ}|||  }nd}|| }d|
|fv �r‚|
|fS ˆ|
 }ˆ| }|| ˆ }|| ˆ }tˆƒ��
 ˆ | |||¡ ˆ ¡  ˆ ¡  ˆj| | | || | d� ˆj|
|d� t	|ƒD ]¤}t	|ƒD ]”}tˆƒ�t |||  }|||  }ˆj||d� ˆ ||
 || ||¡ ˆ ¡  ˆ ¡  ˆ 
ˆˆˆˆ jd ¡ W d   ƒ n1 �sž0    Y  �q�q
W d   ƒ n1 �sÆ0    Y  |
|fS )	Nr   r   ÚrepeatÚspaceÚroundr   )ÚaÚdÚimage_rendering)r   r   Úmaxr‰   r   Ú	rectangleÚclipÚendÚ	transformÚrangeÚdrawr   )r&   r'   rZ   r]   Zslice_xZslice_yZslice_widthZslice_heightÚrepeat_xÚrepeat_yÚscale_xÚscale_yZextra_dxZn_repeats_xZextra_dyZn_repeats_yZrendered_widthZrendered_heightÚoffset_xÚoffset_yrP   ÚjÚtranslate_xÚtranslate_y©r%   ÚimageÚintrinsic_heightÚintrinsic_widthr$   r/   r0   Údraw_border_image_region»   sz    ÿ
ÿ

þþLz3draw_border_image.<locals>.draw_border_image_region)r”   )r•   )r”   r•   r–   r—   )r†   r†   NN)Úget_intrinsic_sizer   r	   Údefault_image_sizingÚborder_widthÚborder_heightr    Úrounded_padding_box)4r%   r$   rž   Zborder_sliceZborder_repeatZborder_outsetr¤   rZ   r]   ÚratioZimage_sliceZshould_fillr�   Z	slice_topZslice_rightZslice_bottomZ
slice_leftr”   r•   r&   r'   r(   r)   r*   r+   r,   r-   r‚   ÚpyÚpwÚphZptlÚptrZpbrZpblZborder_leftZ
border_topZborder_rightZborder_bottomrƒ   Z
outset_topZoutset_rightZoutset_bottomZoutset_leftr…   r¡   Z
scale_leftZ	scale_topZscale_rightZscale_bottomZx_middleZy_middler/   r�   r0   r#   n   sÄ    ÿ

þ
ÿÿÿÿ  þMÿþýþýûû
ü

úr#   Nc           3   	      s  |\}}}	}
|pd\\}}\}}\}}\}}|p8d|f \}}}}dd„ }dd„ }ˆdkrœ|||||ƒ\\}}}|| || |ƒ\\}}}|}d}d‰ |‰nøˆd	krò|| || |ƒ\\}}}|| | | | ƒ\\}}}|}d}d
‰ ||	 ‰n¢ˆdk�rJ||| || ƒ\\}}}|| | | | ƒ\\}}}|}d}d‰ ||
 ‰nJˆdk�r”|||||ƒ\\}}}||| || ƒ\\}}}|}d}d‰ |‰ˆdv �r6||d
  || |d
   } }!| |d
  || |d
   }"}#|	| | }$|	}%ˆ  ||	 ˆ¡ ˆ |ˆ¡ ˆ || ˆ| ¡ ˆ ||	 | ˆ| ¡ n¤ˆdv �rÚ| | |d
  ||d
   } }!| | |d
  | |d
   }"}#|
| | }$|
}%ˆ  ˆ||
 ¡ ˆ ˆ|¡ ˆ ˆ| || ¡ ˆ ˆ| ||
 | ¡ |dv �rì|dk�rò|nd| ‰|�s|�rô|| |!ƒ}&||"|#ƒ}'|$|& |' }%t|%ˆ ƒ}(|�rP|�rP|%|(|(d
   ‰n|%|(|(d
  d  ‰t|&ˆd
  ˆ ƒ})t|'ˆd
  ˆ ƒ}*t|$ˆ ƒ}+‡ ‡‡‡‡fdd„},|,|)|+||||||&ƒ\}+}-|,|*|+| ||	 ||
 |||'ƒd }+|$dk�rìtd|+d
ƒD ]ð}.|.|-7 }.ˆdv �rrt|| |.ˆ  || ƒ}/t|| |.d ˆ  ||	 | ƒ}0ˆ|dk �rb|nd }1|1| }2ndˆdv �rÖt|| |.ˆ  || ƒ}1t|| |.d ˆ  ||
 | ƒ}2ˆ|dk�rÈ|nd }/|/| }0ˆ |/|1|0|/ |2|1 ¡ �q nøˆj	dd� ˆ 
¡  |%t|%ˆ ƒt|%ˆ ƒd d
   �p0d‰tdt|%ˆ ƒd
ƒD ]¤}.ˆdk�rnˆ ||.ˆ  |ˆ|¡ nzˆd	k�ršˆ ||	 | ||.ˆ  |ˆ¡ nNˆdk�rÆˆ ||.ˆ  ||
 | ˆ|¡ n"ˆdk�rFˆ |||.ˆ  |ˆ¡ �qFˆj	dd� ˆ 
¡  dS )z�Clip one segment of box border.

    The strategy is to remove the zones not needed because of the style or the
    side before painting.

    )©r   r   r¬   r¬   r¬   rV   c                 S   s8   t | ƒt |ƒkr,t |ƒt |ƒkr,| |fdfS ||fdfS )a  Get the point use for border transition.

        The extra boolean returned is ``True`` if the point is in the padding
        box (ie. the padding box is rounded).

        This point is not specified. We must be sure to be inside the rounded
        padding box, and in the zone defined in the "transition zone" allowed
        by the specification. We chose the corner of the transition zone. It's
        easy to get and gives quite good results, but it seems to be different
        from what other browsers do.

        TF)Úabs)Úx1Úy1Úx2Úy2r/   r/   r0   Útransition_pointI  s    ,
þz-clip_border_segment.<locals>.transition_pointc              	   S   sH   | | | |  }t d | |  dd|d  dtdd|d   ƒ    S )a7  Return the length of the half of one ellipsis corner.

        Inspired by [Ramanujan, S., "Modular Equations and Approximations to
        pi" Quart. J. Pure. Appl. Math., vol. 45 (1913-1914), pp. 350-372],
        wonderfully explained by Dr Rob.

        https://mathforum.org/dr.math/faq/formulas/

        é   r   rU   r   é
   rV   )r   r   )rŠ   Úbr&   r/   r/   r0   Úcorner_half_lengthZ  s    
&ÿz/clip_border_segment.<locals>.corner_half_lengthr   r   r   r   r   éÿÿÿÿrU   r   ©r   r   ©r   r   )ÚdottedÚdashedrº   ç      à?c                    sÌ  | s|d dfS t d| dƒD �]ˆ}|d7 }dˆ  | || ˆ |  d t }	|dkrZtntdˆ  | |d | ˆ |  d t ˆ t d ƒ}
ˆdv röˆ || ˆ| ¡ ˆ || || d t|
ƒ  ˆ¡ ˆ || || d t|	ƒ  ˆ¡ n^ˆdv �rTˆ ˆ| || ¡ ˆ ˆ|| || t|
ƒ  ¡ ˆ ˆ|| || t|	ƒ  ¡ |
ˆ t d kr|	|
 dˆ  | |d | ˆ |  d t |	  }|d7 } �qÄqdˆ t d |
 |
|	   }||fS )Nr   r   r   r¼   rV   r¸   r¹   )r’   r   r|   r�   Úmove_toÚline_tor   )ZdashesÚlineÚwayr&   r'   r‚   r¨   ZchlrP   Úangle1Úangle2Úoffset©ÚangleÚdashZmain_offsetrI   r$   r/   r0   Ú	draw_dotsª  sb    ÿÿÿÿÿ
ýÿÿ
ÿÿÿÿþÿz&clip_border_segment.<locals>.draw_dotsr   g�íµ ÷Æ°>T©Úeven_oddN)r½   r¾   r‰   r   r   r’   r�   r|   rŽ   r�   r�   )3r$   r   rZ   rI   rl   ri   ÚradiiÚbbxÚbbyÚbbwÚbbhZtlhZtlvZtrhZtrvZbrhZbrvZblhZblvÚbtr,   Úbbr-   r²   r¶   Zpx1Zpy1Zrounded1Zpx2Zpy2Zrounded2rÀ   Úa1Úb1Úa2Úb2Zline_lengthÚlengthZchl1Zchl2Zdash_lengthZdashes1Zdashes2r¿   rÇ   rÃ   rP   r®   r°   r¯   r±   r/   rÄ   r0   r^   =  sÚ     




 
 "


#ÿÿÿ

"

"ÿÿ

ÿ
ÿ
r^   c                 C   sÚ   |dv r||   |d ¡ t| | ¡ ƒ t| | d¡ƒ | jdd� |   |d ¡ t| | d¡ƒ t| | ¡ ƒ | jdd� d S |   |¡ t| | ¡ ƒ |dkr¼t| | d¡ƒ t| | d	¡ƒ t| | ¡ ƒ | jdd� d S )
N©ÚridgeÚgroover   r¼   TrÈ   r   rT   gUUUUUUÕ?gUUUUUUå?)Ú	set_colorÚrounded_boxr¦   Úrounded_box_ratioÚfillr    )r$   r%   r   rm   r/   r/   r0   re   õ  s"    
re   c                 C   sÐ  |\}}}}|\}	}
}}|dv rú|   |d ¡ | j|Ž  |  ||d  ||	d  |||
 d  ||	| d  ¡ | jdd� |  ||d  ||	d  |||
 d  ||	| d  ¡ |  || ||	 || |
 ||	 | ¡ |   |d ¡ | jdd� d S |   |¡ | j|Ž  |dk�r˜|  ||d  ||	d  |||
 d  ||	| d  ¡ |  ||d d  ||	d d  |||
 d d  ||	| d d  ¡ |  || ||	 || |
 ||	 | ¡ | jdd� d S )	NrÖ   r   r   TrÈ   r   rT   rU   )rÙ   rŽ   rÜ   )r$   r%   rn   r   rm   rË   rÌ   rÍ   rÎ   rÏ   r,   rÐ   r-   r/   r/   r0   r_   	  s>    
þþ(


þ$þ(r_   c	              
   C   sn  ||ks||ksJ ‚t | ƒ��: |dvr6| j|dd� |dkrR|  d| g|¡ n|dkrh|  |g|¡ |dk�r8|  |d ¡ ||krÚ|  ||d  |¡ |  ||d  |¡ |  ||d  |¡ |  ||d  |¡ nZ||k�rB|  |||d  ¡ |  |||d  ¡ |  |||d  ¡ |  |||d  ¡ �n
|dv �rJ|  |d	 ¡ | j|d
 dd� ||k�r–|  ||d  |¡ |  ||d  |¡ n2||k�rÈ|  |||d  ¡ |  |||d  ¡ |  ¡  | j|d dd� ||k�r|  ||d  |¡ |  ||d  |¡ n2||k�rB|  |||d  ¡ |  |||d  ¡ nø|dk�r ||k�sbJ ‚d}	d| }
|  ||d	|
  || d|
 ¡ |  ¡  |  	¡  || }|  ||¡ ||k �rB|  |¡ |  
||
d	  ||	|
  |d|
 d	  ||	|
  |d	|
  |¡ |d	|
 7 }|	d9 }	�q²n"|  |¡ |  ||¡ |  ||¡ |  ¡  W d   ƒ n1 �s`0    Y  d S )NrÖ   T)Ústroker»   é   rº   rT   rU   r   r   rV   r   Úwavyg      è?r·   )r   rÙ   Úset_dashÚset_line_widthr½   r¾   rÝ   rŽ   r�   r�   Úcurve_to)r$   r®   r¯   r°   r±   Ú	thicknessr   rm   rÃ   ZupÚradiusr&   r/   r/   r0   Ú	draw_line'  sv    







 

ý
rå   c           	      C   s  |j d }|j d }t|j dƒ}|j d }|j d dkrî|rî|jrî| ¡ | | | ¡ | | | ¡ d|  d|  | ¡ d|  d|  f}tD ]Z}t| ƒ�> t	| ||||ƒ t
| |d|f |t|||ƒƒ W d   ƒ q’1 sâ0    Y  q’|jD ]}t|tjƒrôt| |ƒ qôd S )	NÚoutline_widthÚoutline_offsetÚoutline_colorÚoutline_styler2   r3   r   rV   )r   r   rO   Úborder_box_xÚborder_box_yr¤   r¥   ra   r   r^   r_   r   rY   rW   r   ÚBoxÚdraw_outline)	r$   r%   rZ   rÃ   rm   r   Zoutline_boxrI   rj   r/   r/   r0   rí   j  s(    


ü

þ$
rí   c              
   C   s¾  |\}}}}}}}}	t dd„ ||||	fD ƒƒrB|  ||||¡ dS d}
|  ||d  |¡ |  || |d  |¡ |  || |d |
  ||| ||d |
  || ||d  ¡ |  || || |d  ¡ |  || || |d |
  || |d |
  || || |d  || ¡ |  ||	d  || ¡ |  ||	d |
  || ||| |	d |
  ||| |	d  ¡ |  |||d  ¡ |  |||d |
  ||d |
  |||d  |¡ dS )zÓDraw the path of the border radius box.

    ``widths`` is a tuple of the inner widths (top, right, bottom, left) from
    the border box. Radii are adjusted from these values. Default is (0, 0, 0,
    0).

    c                 s   s   | ]}d |v V  qdS )r   Nr/   )rH   Úcornerr/   r/   r0   Ú	<genexpr>‹  rL   zrounded_box.<locals>.<genexpr>NgÍÌÌÌÌÌÜ?r   r   )r9   rŽ   r½   r¾   râ   )r$   rÊ   r&   r'   r(   r)   r*   r+   r,   r-   Úrr/   r/   r0   rÚ   �  s.    8ÿ>þ8ÿ,ÿrÚ   )NN)r   )Ú__doc__Úmathr   r   r   r   r   Úformatting_structurer   Úlayoutr	   Zlayout.percentr
   r.   r   rm   r   r   Ústackr   ra   r1   rr   r#   r^   re   r_   rå   rí   rÚ   r/   r/   r/   r0   Ú<module>   s(   Q Q ÿ
 9
C