a
    ¥Q•h9  ã                   @   s¬   d Z ddlZddlmZ ddlmZmZmZmZ ddl	m
Z
 ddlmZ ddlmZ G d	d
„ d
eƒ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d„ ZdS )z!Util functions for SVG rendering.é    N)Úsuppress)ÚcosÚradiansÚsinÚtan)Úurlparse©Úparse_coloré   )ÚMatrixc                   @   s   e Zd ZdZdS )Ú
PointErrorz,Exception raised when parsing a point fails.N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__© r   r   úM/var/www/sistema_ama/venv/lib/python3.9/site-packages/weasyprint/svg/utils.pyr      s   r   c                 C   sB   | pd  dd¡} t dd| ¡} t dd| ¡} t dd	| ¡} |  ¡ S )
z1Give a canonical version of a given value string.Ú ÚEÚez(?<!e)-z -z[ 
	,]+ú z(\.[0-9-]+)(?=\.)z\1 )ÚreplaceÚreÚsubÚstrip©Ústringr   r   r   Ú	normalize   s
    r   c                 C   sN  ddl m} | sdS ttƒ� t| ƒW  d  ƒ S 1 s:0    Y  t| ƒ dd¡d } |  d¡r†|dusnJ ‚t| dd… ƒ| d	 S |  d
¡r°|dusœJ ‚|t| dd… ƒ S |  d¡rÚ|dusÆJ ‚|t| dd… ƒ S |  d¡�r|du� sôJ ‚|t| dd… ƒ d S | ¡ D ]4\}}|  |¡�rt| dt	|ƒ … ƒ|   S �qdS )z:Compute size from string, resolving units and percentages.r
   )ÚLENGTHS_TO_PIXELSr   Nr   é   ú%éÿÿÿÿéd   ÚreméýÿÿÿÚeméþÿÿÿÚex)
Z	css.utilsr   r   Ú
ValueErrorÚfloatr   ÚsplitÚendswithÚitemsÚlen)r   Ú	font_sizeZpercentage_referencer   ÚunitÚcoefficientr   r   r   Úsize   s,    
&


"r1   c                 C   sL   d}t | tƒr4|  ¡ } |  d¡r4d}| dd…  ¡ } tdtdt| ƒ| ƒƒS )z>Return opacity between 0 and 1 from str, number or percentage.r   r    r"   Nr!   r   )Ú
isinstanceÚstrr   r+   ÚminÚmaxr)   )ÚvalueÚratior   r   r   Úalpha_value<   s    

r8   c                 C   sP   t  d|¡}|rH| dd¡\}}|| ¡ d… }g |  |||¡¢|‘R S t‚dS )z(Pop first two size values from a string.z(.*?) (.*?)(?: |$)r   r
   N)r   ÚmatchÚgroupÚendÚpointr   )Úsvgr   r.   r9   ÚxÚyr   r   r   r<   G   s    r<   c                 C   sÌ  |p
|  ¡ }|r"|dd… \}}n.| j|krL|  |¡\}}d||fv rPdS ndS |r\|| nd}|rl|| nd}	| dd¡ ¡ }
|
d }|dkršd	}d	}n^t|
ƒdkr®|
d nd}|d
krÆt||	ƒ}n
t||	ƒ}| }}	|dd…  ¡ }|dd…  ¡ }|j	dk�r&|  
| d¡| dd¡|¡\}}ntd}|dk�rF|||  d }n|dk�r\|||  }d}|dk�r€||||	  d 7 }n|dk�rš||||	  7 }|�rÀ||d | 8 }||d |	 8 }||	||fS )z7Compute scale and translation needed to preserve ratio.r
   N)r   r   r   r   r   ÚpreserveAspectRatioÚxMidYMidr   Únoner4   Úsliceé   é   ÚmarkerÚrefXÚrefYÚ0Úmidr5   )Úget_viewboxÚtreeÚget_intrinsic_sizeÚgetr*   r-   r5   r4   ÚlowerÚtagr<   )r=   Únoder.   ÚwidthÚheightÚviewboxÚviewbox_widthÚviewbox_heightÚscale_xÚscale_yZaspect_ratioÚalignÚ
x_positionÚ
y_positionZmeet_or_sliceZscale_valueÚtranslate_xÚtranslate_yr   r   r   Úpreserve_ratioR   sP    

ÿ




r^   c                 C   sv   | rj|   d¡rj|  d¡rj| dd… } t| ƒdkrjdD ]4}| d | d   krT|kr4n q4| dd… }  qjq4t| prd	ƒS )
u-   Parse a URL, possibly in a "url(â€¦)" string.zurl(ú)rD   r!   r
   )ú'ú"r   r   r   )Ú
startswithr+   r-   r   )ÚurlÚquoter   r   r   Ú	parse_url‡   s     re   c                 C   s   t | pdƒpt dƒS )z4Safely parse a color string and return a RGBA tuple.r   Úblackr   r   r   r   r   Úcolor“   s    rg   c              
      sD  t  dt| ƒ¡}tƒ }|D �]"\}}‡ ‡fdd„| d¡D ƒ}|dkrTt|Ž | }q|dk�rt|ƒdkr‚t|d |d	 d
�| }tttt|d ƒƒƒt	tt|d ƒƒƒt	tt|d ƒƒƒ ttt|d ƒƒƒƒ| }t|ƒdk�r>t|d  |d	  d
�| }q| 
d¡�r|t|ƒdk�r&| d¡ |dv �rPtttt| d¡ƒƒƒd�| }|dv �r>tttt| d¡ƒƒƒd�| }q| 
d¡�rÞt|ƒdk�r | d¡ |dv �r¾t| d¡d�| }|dv �r>t| d¡d�| }q| 
d¡rt|ƒdk�r| |d ¡ |dv �r"t| d¡d�| }|dv rt| d¡d�| }q|S )z3Get a matrix corresponding to the transform string.z(\w+) ?\( ?(.*?) ?\)c                    s   g | ]}t |ˆ ˆƒ‘qS r   )r1   )Ú.0r6   ©r.   Únormalized_diagonalr   r   Ú
<listcomp>    s   ÿztransform.<locals>.<listcomp>r   ÚmatrixÚrotateé   r   r
   )r   Úfr   Úskew)ÚskewXrp   )Úc)ÚskewYrp   )ÚbÚ	translate)Ú
translateXru   )r   )Ú
translateYru   )ro   Úscale)ÚscaleXrx   )Úa)ÚscaleYrx   )Úd)r   Úfindallr   r   r*   r-   r   r   r)   r   rb   Úappendr   Úpop)Útransform_stringr.   rj   Ztransformationsrl   Ztransformation_typeÚtransformationÚvaluesr   ri   r   Ú	transform˜   sj    ÿþ
üü

ÿÿ
ÿÿ




rƒ   )NN)N)r   r   Ú
contextlibr   Úmathr   r   r   r   Úurllib.parser   Útinycss2.color4r	   rl   r   Ú	Exceptionr   r   r1   r8   r<   r^   re   rg   rƒ   r   r   r   r   Ú<module>   s   	
"
5