a
    Qh9                     @   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sJ |t| dd  S | dr|dusJ |t| dd  S | dr|du sJ |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rd	}d	}n^t|
dkr|
d nd}|d
krt||	}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rt|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rt|dkr|d |dv rt|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