§
    ¥”jy  ã                   óª   — 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dS )z!Util functions for SVG rendering.é    N)Úsuppress)ÚcosÚradiansÚsinÚtan)Úurlparse©Úparse_coloré   )ÚMatrixc                   ó   — e Zd ZdZdS )Ú
PointErrorz,Exception raised when parsing a point fails.N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__© ó    úc/var/www/finuniver-perm.ru/html/portfolio/venv/lib/python3.11/site-packages/weasyprint/svg/utils.pyr   r      s   € € € € € Ø6Ð6Ð6Ð6r   r   c                 óÞ   — | pd                      dd¦  «        } t          j        dd| ¦  «        } t          j        dd| ¦  «        } t          j        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©Ústrings    r   Ú	normalizer!      sc   € àˆl˜×#Ò# C¨Ñ-Ô-€FÝŒV�I˜t VÑ,Ô,€FÝŒV�M 3¨Ñ/Ô/€FÝŒVÐ(¨&°&Ñ9Ô9€FØ�<Š<‰>Œ>Ðr   c                 ó8  — ddl m} | sdS t          t          ¦  «        5  t	          | ¦  «        cddd¦  «         S # 1 swxY w Y   t          | ¦  «                             dd¦  «        d         } |                      d¦  «        r!|€J ‚t	          | dd…         ¦  «        |z  d	z  S |                      d
¦  «        r|€J ‚|t	          | dd…         ¦  «        z  S |                      d¦  «        r|€J ‚|t	          | dd…         ¦  «        z  S |                      d¦  «        r!|€J ‚|t	          | dd…         ¦  «        z  dz  S |                     ¦   «         D ]D\  }}|                      |¦  «        r*t	          | dt          |¦  «         …         ¦  «        |z  c S ŒEdS )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  € à-Ð-Ð-Ð-Ð-Ð-àð Øˆqå	•*Ñ	Ô	ð ð Ý�V‰}Œ}ðð ð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð õ �vÑÔ×$Ò$ S¨!Ñ,Ô,¨QÔ/€FØ‡‚�sÑÔð 2Ø#Ð/Ð/Ð/Ý�V˜C˜R˜C”[Ñ!Ô!Ð$8Ñ8¸3Ñ>Ð>Ø	�Š˜Ñ	Ô	ð 	2ØÐ$Ð$Ð$Ø�5 ¨¨¨¤Ñ-Ô-Ñ-Ð-Ø	�Š˜Ñ	Ô	ð 2ØÐ$Ð$Ð$Ø�5 ¨¨¨¤Ñ-Ô-Ñ-Ð-Ø	�Š˜Ñ	Ô	ð 2àÐ$Ð$Ð$Ø�5 ¨¨¨¤Ñ-Ô-Ñ-°Ñ1Ð1à.×4Ò4Ñ6Ô6ð <ð <ÑˆˆkØ�?Š?˜4Ñ Ô ð 	<Ý˜ ¥# d¡)¤)  Ô,Ñ-Ô-°Ñ;Ð;Ð;Ð;ð	<ð ˆ1s   Ÿ;»?Á?c           	      ó  — d}t          | t          ¦  «        rG|                      ¦   «         } |                      d¦  «        rd}| dd…                              ¦   «         } 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|¦  «        }|rQ|                     dd¦  «        \  }}||                     ¦   «         d…         }g |                      |||¦  «        ¢|‘R 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   sr   € åŒHÐ)¨6Ñ2Ô2€EØð Ø�{Š{˜1˜aÑ Ô ‰ˆˆ1Ø˜Ÿ	š	™œ˜˜Ô%ˆØ4�—’˜1˜a Ñ+Ô+Ð4¨VÐ4Ð4Ð4åÐr   c                 óÄ  — |p|                      ¦   «         }|r|dd…         \  }}n.| j        |k    r!|                      |¦  «        \  }}d||fv rdS ndS |r||z  nd}|r||z  nd}	|r)|                     dd¦  «                             ¦   «         }
nd}
|
d         }|d	k    rd
}d
}n€t          |
¦  «        dk    r|
d         nd}|dk    rt          ||	¦  «        }nt          ||	¦  «        }|x}}	|dd…                              ¦   «         }|dd…                              ¦   «         }|j	        dk    rB|  
                    |                     d¦  «        |                     dd¦  «        |¦  «        \  }}nJd}|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Ô(IÑ%ˆ�~Ø�M >Ð2Ð2Ð2Ø�:ð 3ð ˆzà'4Ð;ˆe�mÑ#Ð#¸!€GØ)7Ð>ˆf�~Ñ%Ð%¸Q€Gàð !Ø—x’xÐ 5°zÑBÔB×HÒHÑJÔJˆˆà ˆØ˜ŒO€EØ�‚€Øˆ
Øˆ
ˆ
å+.¨|Ñ+<Ô+<¸qÒ+@Ð+@˜ Qœ˜ÀdˆØ˜GÒ#Ð#Ý˜g wÑ/Ô/ˆKˆKå˜g wÑ/Ô/ˆKØ'Ð'ˆ�'Ø˜1˜Q˜3”Z×%Ò%Ñ'Ô'ˆ
Ø˜1˜2˜2”Y—_’_Ñ&Ô&ˆ
à„x�8ÒÐØ#&§9¢9Ø�HŠH�VÑÔ˜dŸhšh v¨sÑ3Ô3°Yñ$@ô $@Ñ ˆ�[�[ð ˆØ˜ÒÐØ  =°7Ñ#:Ñ:¸aÑ?ˆKˆKØ˜5Ò Ð Ø -°'Ñ"9Ñ9ˆKàˆØ˜ÒÐØ˜F ^°gÑ%=Ñ=ÀÑBÑBˆKˆKØ˜5Ò Ð Ø˜6 N°WÑ$<Ñ<Ñ<ˆKàð ,Ø�w˜q”z GÑ+Ñ+ˆØ�w˜q”z GÑ+Ñ+ˆà�G˜[¨+Ð5Ð5r   c                 ó  — | rt|                       d¦  «        r_|                      d¦  «        rJ| dd…         } t          | ¦  «        dk    r-dD ]*}| d         | d         cxk    r|k    rn Œ| dd…         }  nŒ+t          | p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   Š   s°   € à
ð ˆs�~Š~˜fÑ%Ô%ð ¨#¯,ª,°sÑ*;Ô*;ð Ø�!�B�$ŒiˆÝˆs‰8Œ8�qŠ=ˆ=Ø#ð ð �Ø�q”6˜S œWÐ-Ð-Ò-Ð-¨Ò-Ð-Ð-Ð-Ð-Ø˜a ˜dœ)�CØ�Eð .õ �C�I˜2ÑÔÐr   c                 óB   — t          | pd¦  «        pt          d¦  «        S )z4Safely parse a color string and return a RGBA tuple.r   Úblackr	   r   s    r   Úcolorrv   –   s!   € å�v�| Ñ$Ô$Ð<­°GÑ(<Ô(<Ð<r   c                 óh  ‡‡— d\  }}t          |¦  «                             ¦   «         }t          |¦  «        dk    r*t          |d         ¦  «        t          |d         ¦  «        }}t	          ||¬¦  «        }t          j        dt          | ¦  «        ¦  «        }|D �]�\  }	}
ˆˆfd„|
                     d¦  «        D ¦   «         }|	d	k    rt	          |Ž |z  }Œ;|	d
k    �r4t          |¦  «        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    r"t	          |d          |d          ¬¦  «        |z  }�Œv|	                     d¦  «        rÌt          |¦  «        dk    r|                     d¦  «         |	dv rMt	          t          t          t          |                     d¦  «        ¦  «        ¦  «        ¦  «        ¬¦  «        |z  }|	dv rMt	          t          t          t          |                     d¦  «        ¦  «        ¦  «        ¦  «        ¬¦  «        |z  }�ŒW|	                     d¦  «        r~t          |¦  «        dk    r|                     d¦  «         |	dv r&t	          |                     d¦  «        ¬¦  «        |z  }|	dv r&t	          |                     d¦  «        ¬¦  «        |z  }�Œê|	                     d¦  «        r‚t          |¦  «        dk    r|                     |d         ¦  «         |	dv r&t	          |                     d¦  «        ¬¦  «        |z  }|	dv r&t	          |                     d¦  «        ¬¦  «        |z  }�Œƒt	          | | ¬¦  «        |z  S )z3Get a matrix corresponding to the transform string.)r   r   r   r   r$   )r   Úfz(\w+) ?\( ?(.*?) ?\)c                 ó2   •— g | ]}t          |‰‰¦  «        ‘ŒS r   )r8   )Ú.0r>   r4   Únormalized_diagonals     €€r   ú
<listcomp>ztransform.<locals>.<listcomp>§   s6   ø€ ð 4ð 4ð 4àõ �˜	Ð#6Ñ7Ô7ð4ð 4ð 4r   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   r{   Úorigin_xÚorigin_yÚsize_stringsr}   ÚtransformationsÚtransformation_typeÚtransformationÚvaluess     ``        r   Ú	transformr™   ›   s  øø€ ð Ñ€HˆhÝÐ-Ñ.Ô.×4Ò4Ñ6Ô6€LÝ
ˆ<ÑÔ˜AÒÐÝ! ,¨q¤/Ñ2Ô2µD¸Àa¼Ñ4IÔ4I�(ˆÝ�h (Ð+Ñ+Ô+€Få”jÐ!8½)ÐDTÑ:UÔ:UÑVÔV€OØ/>ð &:ñ &:Ñ+Ð˜^ð4ð 4ð 4ð 4ð 4à'×-Ò-¨cÑ2Ô2ð4ñ 4ô 4ˆð  (Ò*Ð*Ý˜V�_ vÑ-ˆFˆFØ  HÒ,Ñ,Ý�6‰{Œ{˜aÒÐÝ &¨¤)¨v°a¬yÐ9Ñ9Ô9¸FÑB�ÝÝ•G�E &¨¤)Ñ,Ô,Ñ-Ô-Ñ.Ô.Ý•G�E &¨¤)Ñ,Ô,Ñ-Ô-Ñ.Ô.Ý•W�U 6¨!¤9Ñ-Ô-Ñ.Ô.Ñ/Ô/Ð/Ý•G�E &¨¤)Ñ,Ô,Ñ-Ô-Ñ.Ô.ñ	0ô 0ð 39ñ	9ˆFõ
 �6‰{Œ{˜aÒÐÝ 6¨!¤9 *°¸´°
Ð;Ñ;Ô;¸fÑD�ùØ ×+Ò+¨FÑ3Ô3ð 	:Ý�6‰{Œ{˜aÒÐØ—’˜aÑ Ô Ð Ø"Ð&7Ð7Ð7ÝÝ�'¥%¨¯
ª
°1©¬Ñ"6Ô"6Ñ7Ô7Ñ8Ô8ð:ñ :ô :Ø<BñC�à"Ð&7Ð7Ð7ÝÝ�'¥%¨¯
ª
°1©¬Ñ"6Ô"6Ñ7Ô7Ñ8Ô8ð:ñ :ô :Ø<BñC�ùà ×+Ò+¨KÑ8Ô8ð 	:Ý�6‰{Œ{˜aÒÐØ—’˜aÑ Ô Ð Ø"Ð&AÐAÐAÝ &§*¢*¨Q¡-¤-Ð0Ñ0Ô0°6Ñ9�Ø"Ð&AÐAÐAÝ &§*¢*¨Q¡-¤-Ð0Ñ0Ô0°6Ñ9�ùØ ×+Ò+¨GÑ4Ô4ð 	:Ý�6‰{Œ{˜aÒÐØ—’˜f QœiÑ(Ô(Ð(Ø"Ð&9Ð9Ð9Ý &§*¢*¨Q¡-¤-Ð0Ñ0Ô0°6Ñ9�Ø"Ð&9Ð9Ð9Ý &§*¢*¨Q¡-¤-Ð0Ñ0Ô0°6Ñ9�ùå�X�I ( Ð+Ñ+Ô+¨fÑ4Ð4r   )NN)N)r   r   Ú
contextlibr   Úmathr   r   r   r   Úurllib.parser   Útinycss2.color5r
   r}   r   Ú	Exceptionr   r!   r8   r@   rE   rk   rs   rv   r™   r   r   r   ú<module>rŸ      s8  ðØ 'Ð 'à 	€	€	€	Ø Ð Ð Ð Ð Ð Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø !Ð !Ð !Ð !Ð !Ð !à 'Ð 'Ð 'Ð 'Ð 'Ð 'à Ð Ð Ð Ð Ð ð7ð 7ð 7ð 7ð 7�ñ 7ô 7ð 7ðð ð ðð ð ð ðD0ð 0ð 0ðð ð ð56ð 56ð 56ð 56ðp	ð 	ð 	ð=ð =ð =ð
35ð 35ð 35ð 35ð 35r   