Ë
    £ëiy  ã                   ó¢   — 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
e«      Zd„ Zdd„Zd„ Zd„ Zdd„Zd„ Zd„ Zd„ Zy)z!Util functions for SVG rendering.é    N)Úsuppress)ÚcosÚradiansÚsinÚtan)Úurlparse©Úparse_coloré   )ÚMatrixc                   ó   — e Zd ZdZy)Ú
PointErrorz,Exception raised when parsing a point fails.N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__© ó    úT/var/www/html/chat/reports/venv/lib/python3.12/site-packages/weasyprint/svg/utils.pyr   r      s   „ Ú6r   r   c                 óØ   — | xs dj                  dd«      } t        j                  dd| «      } t        j                  dd| «      } t        j                  dd	| «      } | j                  «       S )
z1Give a canonical version of a given value string.Ú ÚEÚez(?<!e)-z -z[ 
	,]+ú z(\.[0-9-]+)(?=\.)z\1 )ÚreplaceÚreÚsubÚstrip©Ústrings    r   Ú	normalizer!      s[   € àŠl˜×#Ñ# C¨Ó-€FÜ�V‰V�I˜t VÓ,€FÜ�V‰V�M 3¨Ó/€FÜ�V‰VÐ(¨&°&Ó9€FØ�<‰<‹>Ðr   c                 óz  — ddl m} | syt        t        «      5  t	        | «      cddd«       S # 1 sw Y   nxY wt        | «      j                  dd«      d   } | j                  d«      r|€J ‚t	        | dd «      |z  d	z  S | j                  d
«      r|€J ‚|t	        | dd «      z  S | j                  d«      r|€J ‚|t	        | dd «      z  S | j                  d«      r|€J ‚|t	        | dd «      z  dz  S |j                  «       D ]3  \  }}| j                  |«      sŒt	        | dt        |«        «      |z  c S  y)z:Compute size from string, resolving units and percentages.r   )ÚLENGTHS_TO_PIXELSr   Nr   é   ú%éÿÿÿÿéd   ÚreméýÿÿÿÚeméþÿÿÿÚex)
Ú	css.unitsr#   r   Ú
ValueErrorÚfloatr!   ÚsplitÚendswithÚitemsÚlen)r    Ú	font_sizeÚpercentage_referencer#   ÚunitÚcoefficients         r   Úsizer8      s[  € å-áØä	”*Ó	ñ Ü�V‹}÷÷ ò úô �vÓ×$Ñ$ S¨!Ó,¨QÑ/€FØ‡��sÔØ#Ð/Ð/Ð/Ü�V˜C˜R�[Ó!Ð$8Ñ8¸3Ñ>Ð>Ø	�‰˜Ô	ØÐ$Ð$Ð$Øœ5 ¨¨ Ó-Ñ-Ð-Ø	�‰˜Ô	ØÐ$Ð$Ð$Øœ5 ¨¨ Ó-Ñ-Ð-Ø	�‰˜Ô	àÐ$Ð$Ð$Øœ5 ¨¨ Ó-Ñ-°Ñ1Ð1à.×4Ñ4Ó6ò <ÑˆˆkØ�?‰?˜4Õ Ü˜ ¤# d£) Ð,Ó-°Ñ;Ò;ð<ð
 s   ™.®7c           	      óÖ   — d}t        | t        «      r6| j                  «       } | j                  d«      rd}| dd j                  «       } t	        dt        dt        | «      |z  «      «      S )z>Return opacity between 0 and 1 from str, number or percentage.r$   r%   r'   Nr&   r   )Ú
isinstanceÚstrr   r1   ÚminÚmaxr/   )ÚvalueÚratios     r   Úalpha_valuer@   <   s^   € à€EÜ�%œÔØ—‘“ˆØ�>‰>˜#ÔØˆEØ˜#˜2�J×$Ñ$Ó&ˆEÜˆq”#�aœ˜u›¨Ñ-Ó.Ó/Ð/r   c                 ó¾   — t        j                  d|«      }|r@|j                  dd«      \  }}||j                  «       d }g | j	                  |||«      ¢|‘­S t
        ‚)z(Pop first two size values from a string.z(.*?) (.*?)(?: |$)r$   r   N)r   ÚmatchÚgroupÚendÚpointr   )Úsvgr    r4   rB   ÚxÚys         r   rE   rE   G   s_   € ä�H‰HÐ)¨6Ó2€EÙØ�{‰{˜1˜aÓ ‰ˆˆ1Ø˜Ÿ	™	›˜Ð%ˆØ4�—‘˜1˜a Ó+Ð4¨VÑ4Ð4äÐr   c                 ó.  — |xs |j                  «       }|r	|dd \  }}n+| j                  |k(  r| j                  |«      \  }}d||fv ryy|r||z  nd}|r||z  nd}	|r!|j                  dd«      j	                  «       }
nd}
|
d   }|d	k(  rd
}d
}n]t        |
«      dkD  r|
d   nd}|dk(  rt        ||	«      }nt        ||	«      }|x}}	|dd j                  «       }|dd j                  «       }|j                  dk(  r6| j                  |j                  d«      |j                  dd«      |«      \  }}nFd}|dk(  r|||z  z
  dz  }n|dk(  r|||z  z
  }d}|dk(  r||||	z  z
  dz  z  }n|dk(  r||||	z  z
  z  }|r||d   |z  z  }||d   |	z  z  }||	||fS )z7Compute scale and translation needed to preserve ratio.r   N)r$   r$   r   r   r$   ÚpreserveAspectRatioÚxMidYMid)Únoner   rL   r<   Úsliceé   é   ÚmarkerÚrefXÚrefYÚ0Úmidr=   )Úget_viewboxÚtreeÚget_intrinsic_sizeÚgetr0   r3   r=   r<   ÚlowerÚtagrE   )rF   Únoder4   ÚwidthÚheightÚviewboxÚviewbox_widthÚviewbox_heightÚscale_xÚscale_yÚaspect_ratioÚalignÚ
x_positionÚ
y_positionÚmeet_or_sliceÚscale_valueÚtranslate_xÚtranslate_ys                     r   Úpreserve_ratiork   R   s
  € àÒ+˜×)Ñ)Ó+€GÙØ(/°°¨Ñ%ˆ‘~Ø	�‰�TÒ	Ø(+×(>Ñ(>¸yÓ(IÑ%ˆ�~Ø�M >Ð2Ñ2Øàá'4ˆe�mÒ#¸!€GÙ)7ˆf�~Ò%¸Q€GáØ—x‘xÐ 5°zÓB×HÑHÓJ‰à ˆØ˜‰O€EØ�‚Øˆ
Ø‰
ä+.¨|Ó+<¸qÒ+@˜ QšÀdˆØ˜GÒ#Ü˜g wÓ/‰Kä˜g wÓ/ˆKØ'Ð'ˆ�'Ø˜1˜Q�Z×%Ñ%Ó'ˆ
Ø˜1˜2�Y—_‘_Ó&ˆ
à‡x�x�8ÒØ#&§9¡9Ø�H‰H�VÓ˜dŸh™h v¨sÓ3°Yó$@Ñ ˆ‘[ð ˆØ˜ÒØ  =°7Ñ#:Ñ:¸aÑ?‰KØ˜5Ò Ø -°'Ñ"9Ñ9ˆKàˆØ˜ÒØ˜F ^°gÑ%=Ñ=ÀÑBÑB‰KØ˜5Ò Ø˜6 N°WÑ$<Ñ<Ñ<ˆKáØ�w˜q‘z GÑ+Ñ+ˆØ�w˜q‘z GÑ+Ñ+ˆà�G˜[¨+Ð5Ð5r   c                 óÒ   — | rW| j                  d«      rF| j                  d«      r5| dd } t        | «      dk\  r"dD ]  }| d   | d   cxk(  r|k(  sŒn Œ| dd }  n t        | xs d	«      S )
u-   Parse a URL, possibly in a "url(â€¦)" string.zurl(ú)rN   r&   r   )ú'ú"r   r$   r   )Ú
startswithr1   r3   r   )ÚurlÚquotes     r   Ú	parse_urlrs   Š   st   € á
ˆs�~‰~˜fÔ%¨#¯,©,°sÔ*;Ø�!�BˆiˆÜˆs‹8�qŠ=Ø#ò �Ø�q‘6˜S ™WÔ-¨Ö-Ø˜a ˜)�CÙðô �C’I˜2ÓÐr   c                 ó:   — t        | xs d«      xs t        d«      S )z4Safely parse a color string and return a RGBA tuple.r   Úblackr	   r   s    r   Úcolorrv   –   s   € ä�v’| Ó$Ò<¬°GÓ(<Ð<r   c                 ó   — d\  }}t        |«      j                  «       }t        |«      dk(  rt        |d   «      t        |d   «      }}t	        ||¬«      }t        j                  dt        | «      «      }|D �]¾  \  }	}
|
j                  d«      D �cg c]  }t        |||«      ‘Œ }}|	dk(  rt	        |Ž |z  }ŒA|	d	k(  rØt        |«      d
k(  rt	        |d   |d   ¬«      |z  }t	        t        t        t        |d   «      «      «      t        t        t        |d   «      «      «      t        t        t        |d   «      «      «       t        t        t        |d   «      «      «      «      |z  }t        |«      d
k(  s�Œt	        |d    |d    ¬«      |z  }�Œ|	j                  d«      r�t        |«      dk(  r|j                  d«       |	dv r9t	        t        t        t        |j                  d«      «      «      «      ¬«      |z  }|	dv s�Œ‘t	        t        t        t        |j                  d«      «      «      «      ¬«      |z  }�ŒÌ|	j                  d«      rgt        |«      dk(  r|j                  d«       |	dv rt	        |j                  d«      ¬«      |z  }|	dv s�Œ$t	        |j                  d«      ¬«      |z  }�ŒD|	j                  d«      s�ŒWt        |«      dk(  r|j                  |d   «       |	dv rt	        |j                  d«      ¬«      |z  }|	dv s�Œ¡t	        |j                  d«      ¬«      |z  }�ŒÁ t	        | | ¬«      |z  S c c}w )z3Get a matrix corresponding to the transform string.)r   r   r   r   r$   )r   Úfz(\w+) ?\( ?(.*?) ?\)r   ÚmatrixÚrotateé   Úskew)ÚskewXr|   )Úc)ÚskewYr|   )ÚbÚ	translate)Ú
translateXr�   )r   )Ú
translateYr�   )rx   Úscale)ÚscaleXr„   )Úa)ÚscaleYr„   )Úd)r!   r0   r3   r8   r   r   Úfindallr   r   r/   r   rp   Úappendr   Úpop)Útransform_stringÚtransform_originr4   Únormalized_diagonalÚorigin_xÚorigin_yÚsize_stringsry   ÚtransformationsÚtransformation_typeÚtransformationr>   Úvaluess                r   Ú	transformr–   ›   s  € ð Ñ€HˆhÜÐ-Ó.×4Ñ4Ó6€LÜ
ˆ<Ó˜AÒÜ! ,¨q¡/Ó2´D¸Àa¹Ó4I�(ˆÜ�h (Ô+€Fä—j‘jÐ!8¼)ÐDTÓ:UÓV€OØ/>ó &:Ñ+Ð˜^ð (×-Ñ-¨cÓ2ö4àô �˜	Ð#6Õ7ð4ˆð 4ð  (Ò*Ü˜V�_ vÑ-‰FØ  HÒ,Ü�6‹{˜aÒÜ &¨¡)¨v°a©yÔ9¸FÑB�ÜÜ”GœE &¨¡)Ó,Ó-Ó.Ü”GœE &¨¡)Ó,Ó-Ó.Ü”WœU 6¨!¡9Ó-Ó.Ó/Ð/Ü”GœE &¨¡)Ó,Ó-Ó.ó	0ð 39ñ	9ˆFô
 �6‹{˜aÔÜ 6¨!¡9 *°¸±°
Ô;¸fÑD’Ø ×+Ñ+¨FÔ3Ü�6‹{˜aÒØ—‘˜aÔ Ø"Ð&7Ñ7ÜÜœ'¤%¨¯
©
°1«Ó"6Ó7Ó8ô:Ø<BñC�à"Ð&7Ó7ÜÜœ'¤%¨¯
©
°1«Ó"6Ó7Ó8ô:Ø<BñC’à ×+Ñ+¨KÔ8Ü�6‹{˜aÒØ—‘˜aÔ Ø"Ð&AÑAÜ &§*¡*¨Q£-Ô0°6Ñ9�Ø"Ð&AÓAÜ &§*¡*¨Q£-Ô0°6Ñ9’Ø ×+Ñ+¨GÖ4Ü�6‹{˜aÒØ—‘˜f Q™iÔ(Ø"Ð&9Ñ9Ü &§*¡*¨Q£-Ô0°6Ñ9�Ø"Ð&9Ó9Ü &§*¡*¨Q£-Ô0°6Ñ9’ðM&:ôP �X�I ( Ô+¨fÑ4Ð4ùòO4s   ÂM)NN)N)r   r   Ú
contextlibr   Úmathr   r   r   r   Úurllib.parser   Útinycss2.color5r
   ry   r   Ú	Exceptionr   r!   r8   r@   rE   rk   rs   rv   r–   r   r   r   ú<module>rœ      sS   ðÙ 'ã 	Ý ß 'Ó 'Ý !å 'å ô7�ô 7òóòD0òó56òp	ò=ó
35r   