§
    ¥”jú[  ã                   óú  — d Z ddlZddlmZmZ ddlmZmZmZ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 d
dlmZ d
dlmZ d
dlmZ d
dlmZmZmZ  edd¦  «        Z edd¦  «        Z edd¦  «        Z eeee e dœZ!dde	dz  fde	fde	dz  dz  fdddddddddœZ" eddedd¦  «        Z# edde	dd¦  «        Z$ eddedd¦  «        Z% edde dd¦  «        Z& eddedd¦  «        Z' G d „ d!e(¦  «        Z) G d"„ d#e(¦  «        Z* G d$„ d%e(¦  «        Z+ G d&„ d'e¦  «        Z,d(„ Z-d)„ Z.d*„ Z/d+„ Z0d,„ Z1d-„ Z2d.„ Z3d/„ Z4d0„ Z5d1„ Z6d2„ Z7d3„ Z8dFd6„Z9d7„ Z:dGd8„Z;dFd9„Z<d:„ Z=d;„ Z>d<„ Z?d=„ Z@d>„ ZAd?„ ZBd@„ ZCdA„ ZDdB„ ZEdC„ ZFdD„ ZGdHdE„ZHdS )IzCSS tokens parsers.é    N)ÚABCÚabstractmethod)ÚeÚinfÚnanÚpi)ÚDimensionTokenÚ
IdentTokenÚNumberTokenÚPercentageToken)Úparse_coloré   )ÚLOGGER)Úget_url_tupleé   )Ú	functions)Ú
check_math)Ú	Dimension)ÚANGLE_TO_RADIANSÚLENGTH_UNITSÚRESOLUTION_TO_DPPXú%é2   éd   )ÚtopÚleftÚcenterÚbottomÚright)Úangler   r    é   )ÚcornerÚtop_left)r"   Ú	top_right)r"   Úbottom_left)r"   Úbottom_right))Útor   )r'   r   )r'   r   )r'   r   )r'   r   r   )r'   r   r   )r'   r   r   )r'   r   r   )r'   r   r   )r'   r   r   )r'   r   r   )r'   r   r   r   u   Ï€u   âˆžu   -âˆžÚNaNc                   ó   — e Zd ZdZdS )ÚInvalidValuesz7Invalid or unsupported values for a known CSS property.N©Ú__name__Ú
__module__Ú__qualname__Ú__doc__© ó    úd/var/www/finuniver-perm.ru/html/portfolio/venv/lib/python3.11/site-packages/weasyprint/css/tokens.pyr*   r*   4   s   € € € € € ØAÐAÐAÐAr1   r*   c                   ó   — e Zd ZdZdS )ÚPercentageInMathz5Percentage in math function without reference length.Nr+   r0   r1   r2   r4   r4   8   s   € € € € € Ø?Ð?Ð?Ð?r1   r4   c                   ó   — e Zd ZdZdS )ÚFontUnitInMathz<Font-relative unit in math function without reference style.Nr+   r0   r1   r2   r6   r6   <   s   € € € € € ØFÐFÐFÐFr1   r6   c                   ó4   — e Zd ZdZd„ Zed„ ¦   «         Zd„ ZdS )ÚPendingzCAbstract class representing property value with pending validation.c                 ó0   — || _         || _        d| _        d S )NF)ÚtokensÚnameÚ_reported_error)Úselfr:   r;   s      r2   Ú__init__zPending.__init__C   s   € ØˆŒØˆŒ	Ø$ˆÔÐÐr1   c                 ó   — t           ‚)z#Get validated value for wanted key.)ÚNotImplementedError)r=   r:   Ú
wanted_keys      r2   ÚvalidatezPending.validateH   s
   € õ "Ð!r1   c           	      óˆ  — 	 |st          d¦  «        ‚|                      ||¦  «        S # t           $ rŽ}| j        r|‚| j        d         j        }| j        d         j        }d                     d„ |D ¦   «         ¦  «        }|j        r|j        d         nd}t          j	        d| j
        ||||¦  «         d| _        |‚d}~ww xY w)	z#Get validated value or raise error.zno valuer   ú c              3   ó>   K  — | ]}|                      ¦   «         V — Œd S ©N)Ú	serialize©Ú.0Útokens     r2   ú	<genexpr>z Pending.solve.<locals>.<genexpr>Z   s,   è è € ÐCÐC°5˜UŸ_š_Ñ.Ô.ÐCÐCÐCÐCÐCÐCr1   zinvalid valuezIgnored `%s: %s` at %d:%d, %s.TN)r*   rB   r<   r:   Úsource_lineÚsource_columnÚjoinÚargsr   Úwarningr;   )r=   r:   rA   Ú	exceptionrL   rM   ÚvalueÚmessages           r2   ÚsolvezPending.solveM   sì   € ð	Øð 0õ $ JÑ/Ô/Ð/Ø—=’= ¨Ñ4Ô4Ð4øÝð 	ð 	ð 	ØÔ#ð  Ø�Øœ+ aœ.Ô4ˆKØ œK¨œNÔ8ˆMØ—H’HÐCÐC¸FÐCÑCÔCÑCÔCˆEØ+4¬>ÐN�i”n QÔ'Ð'¸ˆGÝŒNØ0Ø”	˜5 +¨}¸gñGô Gð Gð $(ˆDÔ ØˆOøøøøð	øøøs   ‚&) ©
C³B	B<Â<CN)r,   r-   r.   r/   r>   r   rB   rT   r0   r1   r2   r8   r8   @   sS   € € € € € ØMÐMð%ð %ð %ð
 ð"ð "ñ „^ð"ðð ð ð ð r1   r8   c                 óZ   — t          | ¦  «        dk    rt          | d         d¬¦  «        S d S )Nr   r   T©Ú
percentage)ÚlenÚ
get_length©r:   s    r2   Úparse_color_hintr[   c   s2   € Ý
ˆ6�{„{�aÒÐÝ˜& œ)°Ð5Ñ5Ô5Ð5ð Ðr1   c                 ó,  — t          | ¦  «        dk    r3t          | d         ¦  «        }|dk    rt          d¦  «        d fS |�|d fS nHt          | ¦  «        dk    r5t          | d         ¦  «        }t          | d         dd¬¦  «        }|�|�||fS t          ‚)Nr   r   ÚcurrentcolorÚblackr   T)ÚnegativerW   )rX   r   rY   r*   )r:   ÚcolorÚpositions      r2   Úparse_color_stoprb   h   s¬   € Ý
ˆ6�{„{�aÒÐÝ˜F 1œIÑ&Ô&ˆØ�NÒ"Ð"å˜wÑ'Ô'¨Ð-Ð-ØÐØ˜$�;Ðð å	ˆV‰Œ˜Ò	Ð	Ý˜F 1œIÑ&Ô&ˆÝ˜f Qœi°$À4ÐHÑHÔHˆØÐ Ð!5Ø˜(�?Ð"Ý
Ðr1   c                 ó˜  — | st           ‚t          | d         ¦  «        g}g }d}| dd …         D ]�}t          |¦  «        x}r|                     |¦  «         d}Œ+|r?|                     t          ¦  «         |                     t          |¦  «        ¦  «         d}Œl|                     t          |¦  «        ¦  «         d}Œ‘|st           ‚||fS )Nr   Tr   F)r*   rb   r[   ÚappendÚFIFTY_PERCENT)Úcolor_stops_hintsÚcolor_stopsÚcolor_hintsÚprevious_was_color_stopr:   Úhints         r2   Úparse_color_stops_and_hintsrk   x   sü   € Øð ÝÐå#Ð$5°aÔ$8Ñ9Ô9Ð:€KØ€KØ"Ðà# A B BÔ'ð 
+ð 
+ˆÝ# FÑ+Ô+Ð+ˆ4ð 		+Ø×Ò˜tÑ$Ô$Ð$Ø&+Ð#Ð#Ø$ð 	+Ø×Ò�}Ñ-Ô-Ð-Ø×ÒÕ/°Ñ7Ô7Ñ8Ô8Ð8Ø&*Ð#Ð#à×ÒÕ/°Ñ7Ô7Ñ8Ô8Ð8Ø&*Ð#Ð#à"ð ÝÐà˜Ð#Ð#r1   c                 ó*  — | d         }t          |¦  «        dk    r&t          |d         ¦  «        }|�d|f| dd …         fS nHt                               t	          t          t          |¦  «        ¦  «        ¦  «        }|�|| dd …         fS dt          f| fS )Nr   r   r    )rX   Ú	get_angleÚDIRECTION_KEYWORDSÚgetÚtupleÚmapÚget_keywordr   )Ú	argumentsÚ	first_argr    Úresults       r2   Ú parse_linear_gradient_parametersrv   ’   sŸ   € Ø˜!”€IÝ
ˆ9�~„~˜ÒÐÝ˜) Aœ,Ñ'Ô'ˆØÐØ˜UÐ# Y¨q¨r¨r¤]Ð2Ð2ð õ $×'Ò'­­cµ+¸yÑ.IÔ.IÑ(JÔ(JÑKÔKˆØÐØ˜9 Q R Rœ=Ð(Ð(Ø•Rˆ=˜)Ð#Ð#r1   c                 óø  — t          | ¦  «        dk    r| d         t          ddd¦  «        g} nt          | ¦  «        dk    rdS | \  }}t          |d¬¦  «        }t          |d¬¦  «        }|r|r||fS t          t          | ¦  «        \  }}|r|dv r|t
          |         fS |r|d	v rt
          |         |fS |d	v r|dv rt
          |         t
          |         fS |dv r|d	v rt
          |         t
          |         fS dS dS )
z:Common syntax of background-position and transform-origin.r   r   r   r   NTrV   )r   r   r   )r   r   r   )rX   r
   rY   rq   rr   ÚBACKGROUND_POSITION_PERCENTAGES)r:   Útoken_1Útoken_2Úlength_1Úlength_2Ú	keyword_1Ú	keyword_2s          r2   Úparse_2d_positionr   Ÿ   sZ  € å
ˆ6�{„{�aÒÐØ˜”)�Z¨¨1¨hÑ7Ô7Ð8ˆˆÝ	ˆV‰Œ˜Ò	Ð	ØˆtàÑ€GˆWÝ˜'¨dÐ3Ñ3Ô3€HÝ˜'¨dÐ3Ñ3Ô3€HØð "�Hð "Ø˜Ð!Ð!Ý�{¨FÑ3Ô3Ñ€IˆyØð <�IÐ!<Ð<Ð<ØÕ8¸ÔCÐCÐCØ	ð 
<�iÐ#>Ð>Ð>Ý.¨yÔ9¸8ÐCÐCØ
Ð2Ð
2Ð
2Ø
Ð2Ð
2Ð
2Ý/°	Ô:Ý/°	Ô:ð<ð 	<à
Ð2Ð
2Ð
2Ø
Ð2Ð
2Ð
2å/°	Ô:Ý/°	Ô:ð<ð 	<ð 3Ð
2Ø
2Ð
2r1   c                 ó,  — t          | ¦  «        }|�|\  }}d|d|fS t          | ¦  «        dk    rxt          | d         ¦  «        }t          | d         ¦  «        }t          | d         d¬	¦  «        }t          | d
         d¬	¦  «        }|r|r|dv r
|dv r||||fS |dv r
|dv r||||fS t          | ¦  «        d
k    rÓt          | d         d¬	¦  «        }|�+t          | d         ¦  «        }	t          | d         ¦  «        }
nAt          | d         d¬	¦  «        }t          | d         ¦  «        }
t          | d         ¦  «        }	|�N|
dk    r |	dv rdt          |	|fS |	dv r|	|dt          fS dS |	dv r|
dv r|	||
t
          fS |	dv r|
dv r|
t
          |	|fS dS dS dS dS )zÄParse background-position and object-position.

    See https://drafts.csswg.org/css-backgrounds-3/#the-background-position
    https://drafts.csswg.org/css-images-3/#propdef-object-position

    Nr   r   é   r   r   r   TrV   r!   )r   r   )r   r   r   )r   rX   rr   rY   re   ÚZERO_PERCENT)r:   ru   Úpos_xÚpos_yr}   r~   r{   r|   ÚlengthÚkeywordÚother_keywords              r2   Úparse_positionrˆ   »   s1  € õ ˜vÑ&Ô&€FØÐØ‰ˆˆuØ�u˜e UÐ*Ð*å
ˆ6�{„{�aÒÐÝ  q¤	Ñ*Ô*ˆ	Ý  q¤	Ñ*Ô*ˆ	Ý˜f Qœi°DÐ9Ñ9Ô9ˆÝ˜f Qœi°DÐ9Ñ9Ô9ˆØð 	@˜ð 	@ØÐ.Ð.Ð.ØÐ!2Ð2Ð2Ø  (¨I°xÐ?Ð?ØÐ.Ð.Ð.ØÐ!2Ð2Ð2Ø  (¨I°xÐ?Ð?å
ˆ6�{„{�aÒÐÝ˜F 1œI°$Ð7Ñ7Ô7ˆØÐÝ! &¨¤)Ñ,Ô,ˆGÝ'¨¨q¬	Ñ2Ô2ˆMˆMå  q¤	°dÐ;Ñ;Ô;ˆFÝ'¨¨q¬	Ñ2Ô2ˆMÝ! &¨¤)Ñ,Ô,ˆGàÐØ Ò(Ð(ØÐ/Ð/Ð/Ø!¥=°'¸6ÐAÐAØÐ/Ð/Ð/Ø" F¨Eµ=Ð@Ð@ð 0Ð/àÐ.Ð.Ð.Ø!Ð%6Ð6Ð6Ø ¨µ|ÐCÐCØÐ.Ð.Ð.Ø!Ð%6Ð6Ð6Ø$¥l°G¸VÐCÐCð+ Ðð Ðð /Ð.Ø6Ð6r1   c                 ó"  — d }d }d }d }| d         d d d…         }|rÉ|                      ¦   «         }t          |¦  «        }|dk    rt          |d d d…         ¦  «        }|€d S nƒ|dv r|€|}nx|dv r|€d|f}nm|rL|€Jt          |d¬¦  «        }t          |d         d¬¦  «        }	d ||	fvrd	||	ff}d
}|                      ¦   «          |€t          |¦  «        }|�d	||ff}d}|€d S |°É||fdv rd S |p|pd
|pd|pdt          dt          f| dd …         fS )Nr   éÿÿÿÿÚat©ÚcircleÚellipse)zclosest-cornerúfarthest-cornerzclosest-sidezfarthest-sider†   TrV   ÚexplicitrŽ   r�   )rŒ   rŒ   ©r†   r�   r   r   r   )Úpoprr   rˆ   rY   re   )
rs   Úshapera   ÚsizeÚ
size_shapeÚstackrJ   r†   r{   r|   s
             r2   Ú parse_radial_gradient_parametersr—   ì   s­  € Ø€EØ€HØ€DØ€JØ�aŒL˜˜˜2˜Ô€EØ
ð Ø—	’	‘”ˆÝ˜eÑ$Ô$ˆØ�dŠ?ˆ?Ý% e¨D¨D¨b¨D¤kÑ2Ô2ˆHØÐØ�ØØÐ-Ð-Ð-°%°-ØˆEˆEØð :ð :ð :Ø>B¸lØ˜gÐ%ˆDˆDàð  ˜˜Ý% e¸Ð=Ñ=Ô=�Ý% e¨B¤i¸DÐAÑAÔA�Ø ¨(Ð3Ð3Ð3Ø%¨°(Ð';Ð;�DØ!*�JØ—I’I‘K”K�KØˆ|Ý% eÑ,Ô,�ØÐ'Ø%¨°(Ð';Ð;�DØ!)�JØˆ|Ø�ð7 ð ð8 	ˆzÐÐLÐLÐLØˆàÐ(�Ð(˜yØÐ.Ð.ØÐA�V�]¨Eµ=ÐAØ�!�"�"Œð	ð r1   c                 óâ   — g }g }| D ]E}|j         dk    r#|j        dk    r|                     |¦  «         g }Œ0|                     |¦  «         ŒF|                     |¦  «         t          |¦  «        S )z¦Split a list of tokens on commas, ie ``LiteralToken(',')``.

    Only "top-level" comma tokens are splitting points, not commas inside a
    function or blocks.

    Úliteralú,)ÚtyperR   rd   rp   )r:   ÚpartsÚ	this_partrJ   s       r2   Úsplit_on_commarž     s„   € ð €EØ€IØð $ð $ˆØŒ:˜Ò"Ð" u¤{°cÒ'9Ð'9Ø�LŠL˜Ñ#Ô#Ð#ØˆIˆIà×Ò˜UÑ#Ô#Ð#Ð#Ø	‡L‚L�ÑÔÐÝ�‰<Œ<Ðr1   c                 ó4   — t          d„ | D ¦   «         ¦  «        S )z=Remove any top-level whitespace and comments in a token list.c              3   ó,   K  — | ]}|j         d v¯|V — ŒdS ))Ú
whitespaceÚcommentN)r›   rH   s     r2   rK   z$remove_whitespace.<locals>.<genexpr>,  s<   è è € ð 8ð 8ØØŒ:Ð6Ð6Ð6ð 	Ø6Ð6Ð6Ð6ð8ð 8r1   )rp   rZ   s    r2   Úremove_whitespacer£   *  s0   € åð 8ð 8Ø!ð8ñ 8ô 8ñ 8ô 8ð 8r1   c                 ó*   — | j         dk    r| j        S dS )z[If ``token`` is a keyword, return its lowercase name.

    Otherwise return ``None``.

    ÚidentN)r›   Úlower_value©rJ   s    r2   rr   rr   1  s"   € ð „z�WÒÐØÔ Ð ð Ðr1   c                 ó*   — | j         dk    r| j        S dS )zQIf ``token`` is a keyword, return its name.

    Otherwise return ``None``.

    r¥   N)r›   rR   r§   s    r2   Úget_custom_identr©   ;  s!   € ð „z�WÒÐØŒ{Ðð Ðr1   c                 ód   — t          | ¦  «        dk    r| d         }|j        dk    r	|j        S dS dS )zeIf ``values`` is a 1-element list of keywords, return its name.

    Otherwise return ``None``.

    r   r   r¥   N)rX   r›   r¦   )r:   rJ   s     r2   Úget_single_keywordr«   E  sB   € õ ˆ6�{„{�aÒÐØ�q”	ˆØŒ:˜Ò Ð ØÔ$Ð$ð Ðà Ð r1   TFc                 óº  — ddl m} t          | ¦  «        rg	  || ¦  «        }|€dS |j        dk    rdS |j        }|s|dk     rd}|rt          |¦  «        }t          |d¦  «        S # t          t          f$ r Y dS w xY w| j        dk    rQ|r-| j	        �"|s| j	        dk    rt          | j	        d¦  «        S dS dS |s| j        dk    rt          | j        d¦  «        S dS dS )zParse a <number> token.r   ©Úresolve_mathNÚnumberr   )
Ú r®   r   r›   rR   Úroundr   r4   r6   Ú	int_value)rJ   r_   Úintegerr®   ÚresolvedrR   s         r2   Ú
get_numberrµ   Q  sJ  € àÐÐÐÐÐå�%ÑÔð 0ð	*Ø#�| EÑ*Ô*ˆHð ÐØ�ØŒ} Ò(Ð(Ø�Ø”NˆEØð  ¨¢	 	Ø�Øð %õ ˜e™œ�Ý˜U DÑ)Ô)Ð)øõ !¥.Ð1ð 	ð 	ð 	ØˆFˆFð	øøøð 
Œ�xÒ	Ð	Øð 	0ØŒÐ*Øð <˜uœ°!Ò3Ð3Ý$ U¤_°dÑ;Ô;Ð;ð +Ð*Ø3Ð3àð 	0˜œ¨Ò)Ð)Ý˜Uœ[¨$Ñ/Ô/Ð/ð 
 Ð	ð
 *Ð)s   —A% Á%A:Á9A:c                 ó@  — | j         dk    r	d| j        fS | j         dk    r|| j        dk    rt          j        | d¦  «        S | j        dv rt          j        | ¦  «        S | j        dk    rt          j        | ¦  «        S | j        dk    rt          j        d| ¦  «        S dS dS )zParse a <string> token.ÚstringÚfunctionÚattr)ÚcounterÚcountersÚcontentN)r›   rR   r;   r   Ú
check_attrÚcheck_counterÚcheck_contentÚcheck_string_or_elementr§   s    r2   Ú
get_stringrÁ   p  s¶   € à„z�XÒÐØ˜%œ+Ð&Ð&Ø„z�ZÒÐØŒ:˜ÒÐÝÔ'¨¨xÑ8Ô8Ð8ØŒZÐ2Ð2Ð2ÝÔ*¨5Ñ1Ô1Ð1ØŒZ˜9Ò$Ð$ÝÔ*¨5Ñ1Ô1Ð1ØŒZ˜8Ò#Ð#ÝÔ4°X¸uÑEÔEÐEð  Ðð $Ð#r1   c                 ó  — ddl m} t          | ¦  «        rC	  || ¦  «        p| } |st          d| j        ¦  «        | _        n# t
          t          f$ r Y dS w xY w| j        dk    r"|s| j        dk    rt          | j        d¦  «        S dS dS )zParse a <percentage> token.r   r­   r   NrW   r   )	r°   r®   r   ÚmaxrR   r4   r6   r›   r   )rJ   r_   r®   s      r2   Úget_percentagerÄ     sÄ   € àÐÐÐÐÐå�%ÑÔð 2ð	2Ø �L Ñ'Ô'Ð0¨5ˆEð
 ð 2Ý! ! U¤[Ñ1Ô1�”øøõ !¥.Ð1ð 	ð 	ð 	ØˆFˆFð	øøøð „z�\Ò!Ð! xÐ!°5´;À!Ò3CÐ3CÝ˜œ cÑ*Ô*Ð*ð "Ð!Ð3CÐ3Cs   —A ÁAÁAc                 óT  — ddl m} t          | ¦  «        rW	  || ¦  «        p| } |s#| j        dvrt	          d| j        ¦  «        | _        n## t          $ r	 |r| ndcY S t          $ r | cY S w xY w|r-| j        dk    r"|s| j        dk    rt          | j        d¦  «        S | j        dk    rY| j	         
                    ¦   «         t          v r9|s| j        dk    r,t          | j        | j	         
                    ¦   «         ¦  «        S | j        d	k    r| j        dk    rt          dd¦  «        S dS dS )
zParse a <length> token.r   r­   )r¸   r¯   r   NrW   r   Ú	dimensionr¯   )r°   r®   r   r›   rÃ   rR   r4   r6   r   ÚunitÚlowerr   )rJ   r_   rW   r®   s       r2   rY   rY   �  sƒ  € àÐÐÐÐÐå�%ÑÔð 2ð	2Ø �L Ñ'Ô'Ð0¨5ˆEð ð 2 ¤
Ð2HÐ HÐ HÝ! ! U¤[Ñ1Ô1�”øøõ  ð 	1ð 	1ð 	1ð 'Ð0�5�5¨DÐ0Ð0Ð0Ýð 	ð 	ð 	ØˆLˆLˆLð	øøøð ð /�e”j LÒ0Ð0Øð 	/�u”{ aÒ'Ð'Ý˜Uœ[¨#Ñ.Ô.Ð.Ø„z�[Ò Ð  U¤Z×%5Ò%5Ñ%7Ô%7½<Ð%GÐ%GØð 	>�u”{ aÒ'Ð'Ý˜Uœ[¨%¬*×*:Ò*:Ñ*<Ô*<Ñ=Ô=Ð=Ø„z�XÒÐ %¤+°Ò"2Ð"2Ý˜˜DÑ!Ô!Ð!ð ÐÐ"2Ð"2s   —A
 Á
A*ÁA*Á)A*c                 ó  — ddl m} 	  || ¦  «        p| } n# t          t          f$ r Y dS w xY w| j        dk    r| j        dk    rdS | j        dk    r7t          j        | j         	                    ¦   «         ¦  «        }|�| j        |z  S dS dS )z"Parse an <angle> token in radians.r   r­   Nr¯   r   rÆ   )
r°   r®   r4   r6   r›   rR   r   ro   rÇ   rÈ   ©rJ   r®   Úfactors      r2   rm   rm   «  sÀ   € àÐÐÐÐÐðØ�˜UÑ#Ô#Ð, uˆˆøÝ�nÐ-ð ð ð Øˆˆðøøøà„z�XÒÐ %¤+°Ò"2Ð"2àˆqØ	Œ�{Ò	"Ð	"Ý!Ô% e¤j×&6Ò&6Ñ&8Ô&8Ñ9Ô9ˆØÐØ”; Ñ'Ð'ð 
#Ð	"àÐó   ˆ –+ª+c                 óè   — ddl m} 	  || ¦  «        p| } n# t          t          f$ r Y dS w xY w| j        dk    r7t          j        | j                             ¦   «         ¦  «        }|�| j	        |z  S dS dS )z#Parse a <resolution> token in dppx.r   r­   NrÆ   )
r°   r®   r4   r6   r›   r   ro   rÇ   rÈ   rR   rÊ   s      r2   Úget_resolutionrÎ   ¼  s¢   € àÐÐÐÐÐðØ�˜UÑ#Ô#Ð, uˆˆøÝ�nÐ-ð ð ð Øˆˆðøøøà„z�[Ò Ð Ý#Ô'¨¬
×(8Ò(8Ñ(:Ô(:Ñ;Ô;ˆØÐØ”; Ñ'Ð'ð !Ð àÐrÌ   c           	      ó\  — ddl m}m} t          | |¦  «        x}r0|d         dk    sJ ‚|d         d         dk    rd|d         d         fS t	          j        | ¦  «        }|                     d¬¦  «        }|sd	S |j                             d
¦  «        }|j        dv r4t          |¦  «        \  }}	t          |	¦  «        \  }	}
d ||	|||
¦  «        fS |j        dv rSt          |¦  «        }|�|\  }}}}	nd}d}dt          dt          f}|}	t          |	¦  «        \  }	}
d ||	|||||
¦  «        fS d	S )zParse an <image> token.r   )ÚLinearGradientÚRadialGradientr   Úurlr   ÚexternalF)Úsingle_tokensNz
repeating-)úlinear-gradientzrepeating-linear-gradientrÕ   )úradial-gradientzrepeating-radial-gradientrŽ   r‘   r   r   rÖ   )ÚimagesrÐ   rÑ   Úget_urlr   ÚFunctionÚsplit_commar;   Ú
startswithrv   rk   r—   re   )rJ   Úbase_urlrÐ   rÑ   Ú
parsed_urlr¸   rs   Ú	repeatingÚ	directionrg   rh   ru   r“   r”   ra   s                  r2   Ú	get_imagerà   Ê  s¡  € à7Ð7Ð7Ð7Ð7Ð7Ð7Ð7å˜U HÑ-Ô-Ð-€zð +Ø˜!Œ} Ò%Ð%Ð%Ð%Ø�aŒ=˜Ô˜zÒ)Ð)Ø˜* Qœ-¨Ô*Ð*Ð*ÝÔ! %Ñ(Ô(€HØ×$Ò$°5Ð$Ñ9Ô9€IØð ØˆØ”×(Ò(¨Ñ6Ô6€IØ„}ÐHÐHÐHÝ!AÀ)Ñ!LÔ!LÑˆ	�;Ý#>¸{Ñ#KÔ#KÑ ˆ�[Ø  . .Ø˜ I¨{ñ#<ô #<ð <ð 	<à	ŒÐJÐ	JÐ	JÝ1°)Ñ<Ô<ˆØÐØ17Ñ.ˆE�4˜ ; ;àˆEØ/ˆDØ�}¨eµ]ÐBˆHØ#ˆKÝ#>¸{Ñ#KÔ#KÑ ˆ�[Ø  . .Ø˜  h°	¸;ñ#Hô #Hð Hð 	Hð 
KÐ	Jr1   c                 óV  — | j         dk    rt          | j        |¦  «        }nq| j         dk    rd| j        dk    rt	          j        | d¦  «        S | j        dk    r7t          | j        ¦  «        dv r!t          | j        d         j        |¦  «        }ndS dS |€t          d|›�¦  «        ‚d|fS )zParse an <url> token.rÒ   r¸   r¹   ©r   r   r   Nz+Relative URI reference without a base URI: )	r›   r   rR   r;   r   r½   rX   rs   r*   )rJ   rÜ   rÒ   s      r2   rØ   rØ   ê  s½   € à„z�UÒÐÝ˜EœK¨Ñ2Ô2ˆˆØ	Œ�zÒ	!Ð	!ØŒ:˜ÒÐÝÔ'¨¨uÑ5Ô5Ð5ØŒZ˜5Ò Ð ¥S¨¬Ñ%9Ô%9¸VÐ%CÐ%Cõ   ¤°Ô 2Ô 8¸(ÑCÔCˆCˆCàˆFàˆà
€{ÝÐQÈ#ÐQÐQÑRÔRÐRà�3ˆ<Ðr1   c                 ó0   — t          | ¦  «        }|dv r|S dS )zParse a <quote> token.)z
open-quotezclose-quotezno-open-quotezno-close-quoteN)rr   )rJ   r†   s     r2   Ú	get_quoterä      s2   € å˜%Ñ Ô €GØð /ð /ð /ð ˆð/ð /r1   c                 óF  — t          j        | ¦  «        }|                     ¦   «         }|j        dk    rt	          |¦  «        dvrdS n@|j        dk    rt	          |¦  «        dvrdS n!|j        dk    rt	          |¦  «        dvrdS ndS g }|                     d¦  «        }t          |¦  «        }|€*t          ||¦  «        }|€dS |                     |¦  «         n|                     |¦  «         |j         	                    d¦  «        r¿|                     d¦  «        }|j
        d	k    rdS |                     |j        ¦  «         |j        dk    r;t          |                     d¦  «        ¦  «        }	|	€dS |                     |	¦  «         |r#t          |                     d¦  «        ¦  «        }
nd
}
|                     |
¦  «         nB|r)t          |                     d¦  «        ¦  «        }|dvrdS nd}|                     |¦  «         |j        › d�t          |¦  «        fS )zParse a <target> token.ztarget-counter)r   r!   Nztarget-counters)r!   r�   ztarget-textrâ   r   r¥   Údecimal)r¼   ÚbeforeÚafterzfirst-letterr¼   z())r   rÙ   rÚ   r;   rX   r’   rÁ   rØ   rd   rÛ   r›   rR   rr   rp   )rJ   rÜ   r¸   rs   ÚvaluesÚlinkÚstring_linkrÒ   r¥   r·   Úcounter_styler¼   s               r2   Ú
get_targetrí   	  sJ  € åÔ! %Ñ(Ô(€HØ×$Ò$Ñ&Ô&€IØ„}Ð(Ò(Ð(Ýˆy‰>Œ> Ð'Ð'ØˆFð (à	ŒÐ+Ò	+Ð	+Ýˆy‰>Œ> Ð'Ð'ØˆFð (à	Œ˜-Ò	'Ð	'Ýˆy‰>Œ> Ð'Ð'ØˆFð (ð 	ˆà€Fà�=Š=˜ÑÔ€DÝ˜TÑ"Ô"€KØÐÝ�d˜HÑ%Ô%ˆØˆ;ØˆFØ�Š�cÑÔÐÐà�Š�kÑ"Ô"Ð"à„}×ÒÐ 0Ñ1Ô1ð Ø—’˜aÑ Ô ˆØŒ:˜Ò Ð ØˆFØ�Š�e”kÑ"Ô"Ð"àŒ=Ð-Ò-Ð-Ý 	§¢¨aÑ 0Ô 0Ñ1Ô1ˆFØˆ~Ø�Ø�MŠM˜&Ñ!Ô!Ð!àð 	&Ý'¨	¯ª°aÑ(8Ô(8Ñ9Ô9ˆMˆMà%ˆMØ�Š�mÑ$Ô$Ð$Ð$àð 	 Ý! )§-¢-°Ñ"2Ô"2Ñ3Ô3ˆGØÐLÐLÐLØ�ð Mð  ˆGØ�Š�gÑÔÐàŒ}Ð Ð Ð ¥%¨¡-¤-Ð0Ð0r1   c                 ó0   ‡— ˆfd„| D ¦   «         }d|vr|S dS )zParse <content-list> tokens.c                 ó0   •— g | ]}t          |‰¦  «        ‘ŒS r0   )Úget_content_list_token)rI   rJ   rÜ   s     €r2   ú
<listcomp>z$get_content_list.<locals>.<listcomp>E  s$   ø€ ÐQÐQÐQÀÕ+¨E°8Ñ<Ô<ÐQÐQÐQr1   Nr0   )r:   rÜ   Úparsed_tokenss    ` r2   Úget_content_listró   B  s8   ø€ ð RÐQÐQÐQÈ&ÐQÑQÔQ€MØ�=Ð Ð ØÐð !Ð r1   c                 óF  — t          | ¦  «        x}�|S t          | ¦  «        dk    rdS t          | |¦  «        x}�|S t          | ¦  «        x}�d|fS t	          | |¦  «        x}�|S t          j        | ¦  «        }|                     ¦   «         }|j        dk    rht          |¦  «        dk    rdS |\  }|j
        dk    r,|j        dk    rd	}n0|j        d
k    rd}n"|j        dk    rd}ndS |j
        dk    r|j        }dd|ffS |j        dk    rt          j        d| ¦  «        S dS )z'Parse one of the <content-list> tokens.NÚcontents)z	content()ÚtextÚquoteÚleaderr   r¥   Údottedú.ÚsolidÚ_ÚspacerD   r·   zleader()Úelement)rÁ   rr   rØ   rä   rí   r   rÙ   rÚ   r;   rX   r›   rR   rÀ   )	rJ   rÜ   r·   rÒ   r÷   Útargetr¸   rs   Úargs	            r2   rð   rð   J  sx  € õ
 ˜UÑ#Ô#Ð#ˆÐ0Øˆõ �5ÑÔ˜ZÒ'Ð'Ø$Ð$õ �u˜hÑ'Ô'Ð'ˆÐ4Øˆ
õ ˜5Ñ!Ô!Ð!ˆÐ.Ø˜ÐÐõ ˜U HÑ-Ô-Ð-ˆÐ:ØˆåÔ! %Ñ(Ô(€HØ×$Ò$Ñ&Ô&€Ið „}˜Ò Ð Ýˆy‰>Œ>˜QÒÐØˆFØ‰ˆØŒ8�wÒÐØŒy˜HÒ$Ð$Ø��Ø”˜gÒ%Ð%Ø��Ø”˜gÒ%Ð%Ø��à�ØŒX˜Ò!Ð!Ø”YˆFØ˜X vÐ.Ð/Ð/ð 
Œ˜)Ò	#Ð	#ÝÔ0°¸EÑBÔBÐBð 
$Ð	#r1   c                 óF   ‡ — t          j        ‰ ¦  «        ˆ fd„¦   «         }|S )z;Decorator for validators that only accept a single keyword.c                 ó@   •— t          | ¦  «        } ‰|¦  «        r|S dS )z6Wrap a validator to call get_single_keyword on tokens.N)r«   )r:   r†   r¸   s     €r2   Úkeyword_validatorz)single_keyword.<locals>.keyword_validator~  s3   ø€ õ % VÑ,Ô,ˆØˆ8�GÑÔð 	ØˆNð	ð 	r1   )Ú	functoolsÚwraps)r¸   r  s   ` r2   Úsingle_keywordr  |  s9   ø€ å„_�XÑÔðð ð ð ñ Ôðð
 Ðr1   c                 óT   ‡ — t          j        ‰ ¦  «        ˆ fd„¦   «         }‰ |_        |S )z9Decorator for validators that only accept a single token.c                 óL   •— t          | ¦  «        dk    r ‰| d         g|¢R Ž S dS )z*Validate a property whose token is single.r   r   N)rX   )r:   rO   r¸   s     €r2   Úsingle_token_validatorz,single_token.<locals>.single_token_validator‰  s:   ø€ õ ˆv‰;Œ;˜!ÒÐØ�8˜F 1œIÐ-¨Ð-Ð-Ð-Ð-ð Ðr1   )r  r  Ú__func__)r¸   r	  s   ` r2   Úsingle_tokenr  ‡  sB   ø€ å„_�XÑÔð.ð .ð .ð .ñ Ôð.ð '/ÐÔ#Ø!Ð!r1   c                 óT   ‡ — t          j        ‰ ¦  «        ˆ fd„¦   «         }‰ |_        |S )z<Decorator for validators that accept a comma separated list.c                 óª   •— g }t          | ¦  «        D ]2} ‰t          |¦  «        g|¢R Ž }|€ d S |                     |¦  «         Œ3t          |¦  «        S rF   )rž   r£   rd   rp   )r:   rO   ÚresultsÚpartru   r¸   s        €r2   Úwrapperz%comma_separated_list.<locals>.wrapper”  sl   ø€ àˆÝ" 6Ñ*Ô*ð 	#ð 	#ˆDØ�XÕ/°Ñ5Ô5Ð=¸Ð=Ð=Ð=ˆFØˆ~Ø�t�tØ�NŠN˜6Ñ"Ô"Ð"Ð"Ý�W‰~Œ~Ðr1   )r  r  Úsingle_value)r¸   r  s   ` r2   Úcomma_separated_listr  ’  s@   ø€ å„_�XÑÔðð ð ð ñ Ôðð $€GÔØ€Nr1   c           	      óh  — t          | t          t          f¦  «        rQ|r || j        ¦  «        n| j        }t          dd|dt	          |¦  «        | j                             ¦   «         ¦  «        S t          | t          ¦  «        r9|r || j        ¦  «        n| j        }t          dd|dt	          |¦  «        ¦  «        S t          | t          t          t          f¦  «        rÔt          | t          ¦  «        r| j        }n| }|r ||¦  «        n|}t          |¦  «                             ¦   «         rt          |¦  «        nd}t	          t          |¦  «                             ¦   «         r|n|¦  «        }|€t          dd|||¦  «        S |dk    rt          dd|||¦  «        S t          dd||||¦  «        S dS )z/Transform a computed value result into a token.r   Nr   )Ú
isinstancer	   r   rR   ÚstrrÇ   rÈ   r   r   ÚintÚfloatÚ
is_integerr±   )Úitemr¸   rÇ   rR   r²   Úrepresentations         r2   Útokenizer  ¡  s©  € å�$�­Ð3Ñ4Ô4ð PØ(0Ð@��˜œÑ$Ô$Ð$°d´jˆÝ˜a  E¨4µ°U±´¸T¼Y¿_º_Ñ=NÔ=NÑOÔOÐOÝ	�D�/Ñ	*Ô	*ð PØ(0Ð@��˜œÑ$Ô$Ð$°d´jˆÝ˜q ! U¨Dµ#°e±*´*Ñ=Ô=Ð=Ý	�D�;­­UÐ3Ñ	4Ô	4ð PÝ�d�KÑ(Ô(ð 	Ø”JˆEˆEàˆEØ#+Ð6��˜‘”�°ˆÝ$)¨%¡L¤L×$;Ò$;Ñ$=Ô$=ÐG•E˜%‘L”L�LÀ4ˆ	Ý­%°©,¬,×*AÒ*AÑ*CÔ*CÐN˜Y˜YÈÑOÔOˆØˆ<Ý˜q ! U¨I°~ÑFÔFÐFØ�SŠ[ˆ[Ý" 1 a¨°	¸>ÑJÔJÐJå! ! Q¨¨y¸.È$ÑOÔOÐOðPð Pr1   )TF)T)NN)Ir/   r  Úabcr   r   Úmathr   r   r   r   Útinycss2.astr	   r
   r   r   Útinycss2.color5r   Úloggerr   Úurlsr   r°   r   r   Ú
propertiesr   Úunitsr   r   r   r‚   re   ÚHUNDRED_PERCENTrx   rn   ÚEÚPIÚPLUS_INFINITYÚMINUS_INFINITYÚNANÚ
ValueErrorr*   r4   r6   r8   r[   rb   rk   rv   r   rˆ   r—   rž   r£   rr   r©   r«   rµ   rÁ   rÄ   rY   rm   rÎ   rà   rØ   rä   rí   ró   rð   r  r  r  r  r0   r1   r2   ú<module>r+     s®  ðØ Ð à Ð Ð Ð Ø #Ð #Ð #Ð #Ð #Ð #Ð #Ð #Ø  Ð  Ð  Ð  Ð  Ð  Ð  Ð  Ð  Ð  Ð  Ð  à QÐ QÐ QÐ QÐ QÐ QÐ QÐ QÐ QÐ QÐ QÐ QØ 'Ð 'Ð 'Ð 'Ð 'Ð 'à Ð Ð Ð Ð Ð Ø  Ð  Ð  Ð  Ð  Ð  Ø Ð Ð Ð Ð Ð Ø !Ð !Ð !Ð !Ð !Ð !Ø !Ð !Ð !Ð !Ð !Ð !Ø EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ EÐ Eàˆy˜˜CÑ Ô €Ø�	˜"˜cÑ"Ô"€Ø�)˜C Ñ%Ô%€àØØØØð#ð #Ð ð  Ø˜r A™vÐ&Ø �mØ˜b 1™f q™jÐ)à1Ø1Ø3Ø3Ø7Ø7Ø9Ø9ðð Ð ð" €K��1�a˜˜sÑ#Ô#€Ø€[��A�r˜4 Ñ&Ô&€Ø�˜A˜q # t¨UÑ3Ô3€Ø�˜Q  C 4¨¨vÑ6Ô6€Ø€k�!�Q˜˜T 5Ñ)Ô)€ðBð Bð Bð Bð B�Jñ Bô Bð Bð@ð @ð @ð @ð @�zñ @ô @ð @ðGð Gð Gð Gð G�Zñ Gô Gð Gð ð  ð  ð  ð  ˆcñ  ô  ð  ðF6ð 6ð 6ð
ð ð ð $ð $ð $ð4
$ð 
$ð 
$ð<ð <ð <ð8.Dð .Dð .Dðb(ð (ð (ðVð ð ð&8ð 8ð 8ð!ð !ð !ðð ð ð	%ð 	%ð 	%ð0ð 0ð 0ð 0ð>Fð Fð Fð+ð +ð +ð +ð""ð "ð "ð "ð6(ð (ð (ð"(ð (ð (ðHð Hð Hð@ð ð ð,ð ð ð61ð 61ð 61ðrð ð ð/Cð /Cð /Cðdð ð ð"ð "ð "ðð ð ðPð Pð Pð Pð Pð Pr1   