Ë
    £ëiú[  ã                   ó°  — 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„ Z8dDd4„Z9d5„ Z:dEd6„Z;dDd7„Z<d8„ Z=d9„ Z>d:„ Z?d;„ Z@d<„ ZAd=„ ZBd>„ ZCd?„ ZDd@„ ZEdA„ ZFdB„ ZGdFdC„ZHy)Gz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y)ÚInvalidValuesz7Invalid or unsupported values for a known CSS property.N©Ú__name__Ú
__module__Ú__qualname__Ú__doc__© ó    úU/var/www/html/chat/reports/venv/lib/python3.12/site-packages/weasyprint/css/tokens.pyr*   r*   4   s   „ ÚAr1   r*   c                   ó   — e Zd ZdZy)ÚPercentageInMathz5Percentage in math function without reference length.Nr+   r0   r1   r2   r4   r4   8   s   „ Ú?r1   r4   c                   ó   — e Zd ZdZy)ÚFontUnitInMathz<Font-relative unit in math function without reference style.Nr+   r0   r1   r2   r6   r6   <   s   „ ÚFr1   r6   c                   ó,   — e Zd ZdZd„ Zed„ «       Zd„ Zy)ÚPendingzCAbstract class representing property value with pending validation.c                 ó.   — || _         || _        d| _        y )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«      ‚| j                  ||«      S # t         $ r§}| j                  r|‚| j                  d   j                  }| j                  d   j
                  }dj                  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  — | ]  }|j                  «       –— Œ y ­w©N)Ú	serialize©Ú.0Útokens     r2   ú	<genexpr>z Pending.solve.<locals>.<genexpr>Z   s   è ø€ ÒC°5˜UŸ_™_×.ÑCùó   ‚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   Ú	exceptionrM   rN   ÚvalueÚmessages           r2   ÚsolvezPending.solveM   sÄ   € ð	Ùô $ JÓ/Ð/Ø—=‘= ¨Ó4Ð4øÜò 	Ø×#Ò#Ø�ØŸ+™+ a™.×4Ñ4ˆKØ ŸK™K¨™N×8Ñ8ˆMØ—H‘HÑC¸FÔCÓCˆEØ+4¯>ª>�i—n‘n QÒ'¸ˆGÜ�N‰NØ0Ø—	‘	˜5 +¨}¸gôGð $(ˆDÔ ØˆOûð	ús   ‚! ¡	CªB"CÃCN)r,   r-   r.   r/   r>   r   rB   rU   r0   r1   r2   r8   r8   @   s#   „ ÙMò%ð
 ñ"ó ð"ór1   r8   c                 ó@   — t        | «      dk(  rt        | d   d¬«      S y )Nr   r   T©Ú
percentage)ÚlenÚ
get_length©r:   s    r2   Úparse_color_hintr\   c   s$   € Ü
ˆ6ƒ{�aÒÜ˜& ™)°Ô5Ð5ð r1   c                 óì   — t        | «      dk(  r,t        | d   «      }|dk(  rt        d«      d fS |�|d fS t        ‚t        | «      dk(  r't        | d   «      }t        | d   dd¬«      }|�|�||fS t        ‚)Nr   r   ÚcurrentcolorÚblackr   T)ÚnegativerX   )rY   r   rZ   r*   )r:   ÚcolorÚpositions      r2   Úparse_color_stoprc   h   s•   € Ü
ˆ6ƒ{�aÒÜ˜F 1™IÓ&ˆØ�NÒ"ä˜wÓ'¨Ð-Ð-ØÐØ˜$�;Ðô Ðô 
ˆV‹˜Ò	Ü˜F 1™IÓ&ˆÜ˜f Q™i°$À4ÔHˆØÐ Ð!5Ø˜(�?Ð"Ü
Ðr1   c                 óF  — | st         ‚t        | d   «      g}g }d}| dd  D ]s  }t        |«      x}r|j                  |«       d}Œ$|r2|j                  t        «       |j                  t        |«      «       d}ŒX|j                  t        |«      «       d}Œu |st         ‚||fS )Nr   Tr   F)r*   rc   r\   ÚappendÚFIFTY_PERCENT)Úcolor_stops_hintsÚcolor_stopsÚcolor_hintsÚprevious_was_color_stopr:   Úhints         r2   Úparse_color_stops_and_hintsrl   x   s¾   € ÙÜÐä#Ð$5°aÑ$8Ó9Ð:€KØ€KØ"Ðà# A BÐ'ò 
+ˆÜ# FÓ+Ð+ˆ4Ð+Ø×Ñ˜tÔ$Ø&+Ñ#Ù$Ø×Ñœ}Ô-Ø×ÑÔ/°Ó7Ô8Ø&*Ñ#à×ÑÔ/°Ó7Ô8Ø&*Ñ#ð
+ñ #ÜÐà˜Ð#Ð#r1   c                 óØ   — | d   }t        |«      dk(  rt        |d   «      }|�>d|f| dd  fS t        j                  t	        t        t        |«      «      «      }|�|| dd  fS dt        f| fS )Nr   r   r    )rY   Ú	get_angleÚDIRECTION_KEYWORDSÚgetÚtupleÚmapÚget_keywordr   )Ú	argumentsÚ	first_argr    Úresults       r2   Ú parse_linear_gradient_parametersrw   ’   sƒ   € Ø˜!‘€IÜ
ˆ9ƒ~˜ÒÜ˜) A™,Ó'ˆØÐØ˜UÐ# Y¨q¨r ]Ð2Ð2ä#×'Ñ'¬¬c´+¸yÓ.IÓ(JÓKˆØÐØ˜9 Q R˜=Ð(Ð(Ø”Rˆ=˜)Ð#Ð#r1   c                 ó†  — t        | «      dk(  r| d   t        ddd«      g} nt        | «      dk7  ry| \  }}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 yy)
z:Common syntax of background-position and transform-origin.r   r   r   r   NTrW   )r   r   r   )r   r   r   )rY   r
   rZ   rr   rs   ÚBACKGROUND_POSITION_PERCENTAGES)r:   Útoken_1Útoken_2Úlength_1Úlength_2Ú	keyword_1Ú	keyword_2s          r2   Úparse_2d_positionr€   Ÿ   s  € ä
ˆ6ƒ{�aÒØ˜‘)œZ¨¨1¨hÓ7Ð8‰Ü	ˆV‹˜Ò	ØàÑ€GˆWÜ˜'¨dÔ3€HÜ˜'¨dÔ3€HÙ‘HØ˜Ð!Ð!Üœ{¨FÓ3Ñ€IˆyÙ�IÐ!<Ñ<ØÔ8¸ÑCÐCÐCÙ	�iÐ#>Ñ>Ü.¨yÑ9¸8ÐCÐCØ
Ð2Ñ
2Ø
Ð2Ñ
2Ü/°	Ñ:Ü/°	Ñ:ð<ð 	<à
Ð2Ñ
2Ø
Ð2Ñ
2ä/°	Ñ:Ü/°	Ñ:ð<ð 	<ð 3ð 3r1   c                 óp  — t        | «      }|�|\  }}d|d|fS t        | «      dk(  r\t        | 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   «      }
n,t        | d   d¬	«      }t        | d   «      }
t        | d   «      }	|�H|
dk(  r|	dv r
dt        |	|fS |	dv r
|	|dt        fS y|	dv r|
dv r
|	||
t
        fS |	dv r|
dv r
|
t
        |	|fS yyyy)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   TrW   r!   )r   r   )r   r   r   )r€   rY   rs   rZ   rf   ÚZERO_PERCENT)r:   rv   Úpos_xÚpos_yr~   r   r|   r}   ÚlengthÚkeywordÚother_keywords              r2   Úparse_positionr‰   »   s¾  € ô ˜vÓ&€FØÐØ‰ˆˆuØ�u˜e UÐ*Ð*ä
ˆ6ƒ{�aÒÜ  q¡	Ó*ˆ	Ü  q¡	Ó*ˆ	Ü˜f Q™i°DÔ9ˆÜ˜f Q™i°DÔ9ˆÙ™ØÐ.Ñ.ØÐ!2Ñ2Ø  (¨I°xÐ?Ð?ØÐ.Ñ.ØÐ!2Ñ2Ø  (¨I°xÐ?Ð?ä
ˆ6ƒ{�aÒÜ˜F 1™I°$Ô7ˆØÐÜ! &¨¡)Ó,ˆGÜ'¨¨q©	Ó2‰Mä  q¡	°dÔ;ˆFÜ'¨¨q©	Ó2ˆMÜ! &¨¡)Ó,ˆGàÐØ Ò(ØÐ/Ñ/Ø!¤=°'¸6ÐAÐAØÐ/Ñ/Ø" F¨E´=Ð@Ð@ð 0àÐ.Ñ.Ø!Ð%6Ñ6Ø ¨´|ÐCÐCØÐ.Ñ.Ø!Ð%6Ñ6Ø$¤l°G¸VÐCÐCð 7ð /ð ð r1   c                 óÎ  — d }d }d }d }| d   d d d…   }|r¥|j                  «       }t        |«      }|dk(  rt        |d d d…   «      }|€y np|dv r|€|}nd|dv r|€d|f}nY|r=|€;t        |d¬«      }t        |d   d¬«      }	d ||	fvrd	||	ff}d
}|j                  «        |€t        |«      }|�d	||ff}d}|€y |rŒ¥||fdv ry |xs |xs d
|xs d|xs dt        dt        f| dd  fS )Nr   éÿÿÿÿÚat©ÚcircleÚellipse)zclosest-cornerúfarthest-cornerzclosest-sidezfarthest-sider‡   TrW   Úexplicitr�   rŽ   )r�   r�   ©r‡   r�   r   r   r   )Úpoprs   r‰   rZ   rf   )
rt   Úshaperb   ÚsizeÚ
size_shapeÚstackrJ   r‡   r|   r}   s
             r2   Ú parse_radial_gradient_parametersr˜   ì   sc  € Ø€EØ€HØ€DØ€JØ�a‰L™˜2˜Ñ€EÙ
Ø—	‘	“ˆÜ˜eÓ$ˆØ�dŠ?Ü% e©D¨b¨D¡kÓ2ˆHØÐØØØÐ-Ñ-°%°-Ø‰EØð :ñ :Ø>B¸lØ˜gÐ%‰Dá˜˜Ü% e¸Ô=�Ü% e¨B¡i¸DÔA�Ø ¨(Ð3Ñ3Ø%¨°(Ð';Ð;�DØ!*�JØ—I‘I”KØˆ|Ü% eÓ,�ØÐ'Ø%¨°(Ð';Ð;�DØ!)�JØˆ|Øò7 ð8 	ˆzÐÐLÑLØàÒ(�Ò(˜yØÒ.Ð.ØÒA�Vœ]¨E´=ÐAØ�!�"ˆð	ð r1   c                 óÖ   — g }g }| D ]E  }|j                   dk(  r#|j                  dk(  r|j                  |«       g }Œ5|j                  |«       ŒG |j                  |«       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ú,)ÚtyperS   re   rq   )r:   ÚpartsÚ	this_partrJ   s       r2   Úsplit_on_commarŸ     sk   € ð €EØ€IØò $ˆØ�:‰:˜Ò" u§{¡{°cÒ'9Ø�L‰L˜Ô#Ø‰Ià×Ñ˜UÕ#ð$ð 
‡L�L�ÔÜ�‹<Ðr1   c                 ó&   — t        d„ | D «       «      S )z=Remove any top-level whitespace and comments in a token list.c              3   ó<   K  — | ]  }|j                   d vr|–— Œ y­w))Ú
whitespaceÚcommentN)rœ   rH   s     r2   rK   z$remove_whitespace.<locals>.<genexpr>,  s%   è ø€ ò 8ØØ�:‰:Ð6Ñ6ô 	ñ8ùrL   )rq   r[   s    r2   Úremove_whitespacer¤   *  s   € äñ 8Ø!ô8ó 8ð 8r1   c                 ó:   — | j                   dk(  r| j                  S y)z[If ``token`` is a keyword, return its lowercase name.

    Otherwise return ``None``.

    ÚidentN)rœ   Úlower_value©rJ   s    r2   rs   rs   1  s!   € ð ‡z�z�WÒØ× Ñ Ð ð r1   c                 ó:   — | j                   dk(  r| j                  S y)zQIf ``token`` is a keyword, return its name.

    Otherwise return ``None``.

    r¦   N)rœ   rS   r¨   s    r2   Úget_custom_identrª   ;  s   € ð ‡z�z�WÒØ�{‰{Ðð r1   c                 ób   — t        | «      dk(  r!| d   }|j                  dk(  r|j                  S yy)zeIf ``values`` is a 1-element list of keywords, return its name.

    Otherwise return ``None``.

    r   r   r¦   N)rY   rœ   r§   )r:   rJ   s     r2   Úget_single_keywordr¬   E  s;   € ô ˆ6ƒ{�aÒØ�q‘	ˆØ�:‰:˜Ò Ø×$Ñ$Ð$ð !ð r1   c                 óÀ  — ddl m} t        | «      rJ	  || «      }|€y|j                  dk7  ry|j                  }|s|dk  rd}|rt        |«      }t        |d«      S | j                  dk(  r_|r5| j                  �(|s| j                  dk\  rt        | j                  d«      S yy|s| j                  dk\  rt        | j                  d«      S yy# t        t        f$ r Y yw xY w)zParse a <number> token.r   ©Úresolve_mathNÚnumberr   )
Ú r¯   r   rœ   rS   Úroundr   r4   r6   Ú	int_value)rJ   r`   Úintegerr¯   ÚresolvedrS   s         r2   Ú
get_numberr¶   Q  sî   € åä�%Ôð	*Ù# EÓ*ˆHð ÐØØ�}‰} Ò(ØØ—N‘NˆEÙ ¨¢	Ø�Ùô ˜e›�Ü˜U DÓ)Ð)Ø	�‰�xÒ	ÙØ�‰Ð*Ù˜uŸ™°!Ò3Ü$ U§_¡_°dÓ;Ð;ð  4ð +ñ ˜Ÿ™¨Ò)Ü˜UŸ[™[¨$Ó/Ð/ð *ð 
 øô !¤.Ð1ò 	Ùð	ús   “C ÃCÃC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 yy)zParse a <string> token.ÚstringÚfunctionÚattr)ÚcounterÚcountersÚcontentN)rœ   rS   r;   r   Ú
check_attrÚcheck_counterÚcheck_contentÚcheck_string_or_elementr¨   s    r2   Ú
get_stringrÂ   p  s¬   € à‡z�z�XÒØ˜%Ÿ+™+Ð&Ð&Ø‡z�z�ZÒØ�:‰:˜ÒÜ×'Ñ'¨¨xÓ8Ð8Ø�Z‰ZÐ2Ñ2Ü×*Ñ*¨5Ó1Ð1Ø�Z‰Z˜9Ò$Ü×*Ñ*¨5Ó1Ð1Ø�Z‰Z˜8Ò#Ü×4Ñ4°X¸uÓEÐEð $ð  r1   c                 ó  — ddl m} t        | «      r+	  || «      xs | } |st        d| j                  «      | _        	 | j                  dk(  r(|s| j                  dk\  rt        | j                  d«      S yy# t
        t        f$ r Y yw xY w)zParse a <percentage> token.r   r®   r   NrX   r   )	r±   r¯   r   ÚmaxrS   r4   r6   rœ   r   )rJ   r`   r¯   s      r2   Úget_percentagerÅ     s„   € åä�%Ôð	2Ù  Ó'Ò0¨5ˆEñ
 Ü! ! U§[¡[Ó1�•Ø‡z�z�\Ò!¡x°5·;±;À!Ò3CÜ˜Ÿ™ cÓ*Ð*ð 4DÐ!øô !¤.Ð1ò 	Ùð	ús   “A5 Á5BÂBc                 ó€  — ddl m} t        | «      r9	  || «      xs | } |s*| j                  dvrt	        d| j
                  «      | _        	 |r6| j                  dk(  r'|s| j
                  dk\  rt        | j
                  d«      S | j                  dk(  r_| j                  j                  «       t        v r?|s| j
                  dk\  r.t        | j
                  | j                  j                  «       «      S | j                  d	k(  r| j
                  dk(  rt        dd«      S yy# t        $ r |r| cY S dcY S t        $ r | cY S w xY w)
zParse a <length> token.r   r®   )r¹   r°   r   NrX   r   Ú	dimensionr°   )r±   r¯   r   rœ   rÄ   rS   r4   r6   r   ÚunitÚlowerr   )rJ   r`   rX   r¯   s       r2   rZ   rZ   �  s  € åä�%Ôð	2Ù  Ó'Ò0¨5ˆEñ  §
¡
Ð2HÑ HÜ! ! U§[¡[Ó1�•Ù�e—j‘j LÒ0Ù�u—{‘{ aÒ'Ü˜UŸ[™[¨#Ó.Ð.Ø‡z�z�[Ò  U§Z¡Z×%5Ñ%5Ó%7¼<Ñ%GÙ�u—{‘{ aÒ'Ü˜UŸ[™[¨%¯*©*×*:Ñ*:Ó*<Ó=Ð=Ø‡z�z�XÒ %§+¡+°Ò"2Ü˜˜DÓ!Ð!ð #3Ðøô!  ò 	1ñ '�5Ò0¨DÒ0Üò 	ØŠLð	ús   “D ÄD=Ä,D=Ä0
D=Ä<D=c                 ó.  — ddl m} 	  || «      xs | } | j                  dk(  r| j
                  dk(  ry| j                  dk(  r?t        j                  | j                  j                  «       «      }|�| j
                  |z  S yy# t        t        f$ r Y yw xY w)z"Parse an <angle> token in radians.r   r®   Nr°   r   rÇ   )
r±   r¯   r4   r6   rœ   rS   r   rp   rÈ   rÉ   ©rJ   r¯   Úfactors      r2   rn   rn   «  s–   € åðÙ˜UÓ#Ò, uˆð ‡z�z�XÒ %§+¡+°Ò"2àØ	�‰�{Ò	"Ü!×%Ñ% e§j¡j×&6Ñ&6Ó&8Ó9ˆØÐØ—;‘; Ñ'Ð'ð ð 
#øô œnÐ-ò Ùðús   ˆB ÂBÂBc                 óð   — ddl m} 	  || «      xs | } | j                  dk(  r?t        j                  | j                  j                  «       «      }|�| j                  |z  S yy# t        t        f$ r Y yw xY w)z#Parse a <resolution> token in dppx.r   r®   NrÇ   )
r±   r¯   r4   r6   rœ   r   rp   rÈ   rÉ   rS   rË   s      r2   Úget_resolutionrÎ   ¼  s|   € åðÙ˜UÓ#Ò, uˆð ‡z�z�[Ò Ü#×'Ñ'¨¯
©
×(8Ñ(8Ó(:Ó;ˆØÐØ—;‘; Ñ'Ð'ð ð !øô œnÐ-ò Ùðús   ˆA# Á#A5Á4A5c           	      ó  — ddl m}m} t        | |«      x}r|d   dk(  sJ ‚|d   d   dk(  r
d|d   d   fS t	        j
                  | «      }|j                  d¬«      }|sy	|j                  j                  d
«      }|j                  dv r)t        |«      \  }}	t        |	«      \  }	}
d ||	|||
«      fS |j                  dv rFt        |«      }|�|\  }}}}	nd}d}dt        dt        f}|}	t        |	«      \  }	}
d ||	|||||
«      fS y	)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;   Ú
startswithrw   rl   r˜   rf   )rJ   Úbase_urlrÐ   rÑ   Ú
parsed_urlr¹   rt   Ú	repeatingÚ	directionrh   ri   rv   r”   r•   rb   s                  r2   Ú	get_imagerà   Ê  sT  € ç7ä˜U HÓ-Ð-€zÐ-Ø˜!‰} Ò%Ð%Ð%Ø�a‰=˜Ñ˜zÒ)Ø˜* Q™-¨Ñ*Ð*Ð*Ü×!Ñ! %Ó(€HØ×$Ñ$°5Ð$Ó9€IÙØØ—‘×(Ñ(¨Ó6€IØ‡}�}ÐHÑHÜ!AÀ)Ó!LÑˆ	�;Ü#>¸{Ó#KÑ ˆ�[Ø ¡.Ø˜ I¨{ó#<ð <ð 	<à	�‰ÐJÑ	JÜ1°)Ó<ˆØÐØ17Ñ.ˆE�4˜¡;àˆEØ/ˆDØœ}¨e´]ÐBˆHØ#ˆKÜ#>¸{Ó#KÑ ˆ�[Ø ¡.Ø˜  h°	¸;ó#Hð Hð 	Hð 
Kr1   c                 óv  — | j                   dk(  rt        | j                  |«      }n€| j                   dk(  rp| j                  dk(  rt	        j
                  | d«      S | j                  dk(  r;t        | j                  «      dv r$t        | j                  d   j                  |«      }nyy|€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   rS   r;   r   r¾   rY   rt   r*   )rJ   rÜ   rÒ   s      r2   rØ   rØ   ê  sª   € à‡z�z�UÒÜ˜EŸK™K¨Ó2‰Ø	�‰�zÒ	!Ø�:‰:˜ÒÜ×'Ñ'¨¨uÓ5Ð5Ø�Z‰Z˜5Ò ¤S¨¯©Ó%9¸VÑ%Cô   §¡°Ñ 2× 8Ñ 8¸(ÓC‰Cààà
€{ÜÐIÈ#ÈÐQÓRÐRà�3ˆ<Ðr1   c                 ó&   — t        | «      }|dv r|S y)zParse a <quote> token.)z
open-quotezclose-quotezno-open-quotezno-close-quoteN)rs   )rJ   r‡   s     r2   Ú	get_quoterä      s%   € ä˜%Ó €GØð /ñ /ð ˆð/r1   c                 óÆ  — t        j                  | «      }|j                  «       }|j                  dk(  rt	        |«      dvr<y|j                  dk(  rt	        |«      dvry|j                  dk(  rt	        |«      dvryyg }|j                  d«      }t        |«      }|€!t        ||«      }|€y|j                  |«       n|j                  |«       |j                  j                  d«      rª|j                  d«      }|j                  d	k7  ry|j                  |j                  «       |j                  dk(  r.t        |j                  d«      «      }	|	€y|j                  |	«       |rt        |j                  d«      «      }
nd
}
|j                  |
«       n4|rt        |j                  d«      «      }|dvryd}|j                  |«       |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;   rY   r“   rÂ   rØ   re   rÛ   rœ   rS   rs   rq   )rJ   rÜ   r¹   rt   ÚvaluesÚlinkÚstring_linkrÒ   r¦   r¸   Úcounter_styler½   s               r2   Ú
get_targetrí   	  s­  € ä×!Ñ! %Ó(€HØ×$Ñ$Ó&€IØ‡}�}Ð(Ò(Üˆy‹> Ñ'ØØ	�‰Ð+Ò	+Üˆy‹> Ñ'ØØ	�‰˜-Ò	'Üˆy‹> Ñ'Øàà€Fà�=‰=˜Ó€DÜ˜TÓ"€KØÐÜ�d˜HÓ%ˆØˆ;ØØ�‰�cÕà�‰�kÔ"à‡}�}×ÑÐ 0Ô1Ø—‘˜aÓ ˆØ�:‰:˜Ò ØØ�‰�e—k‘kÔ"à�=‰=Ð-Ò-Ü 	§¡¨aÓ 0Ó1ˆFØˆ~ØØ�M‰M˜&Ô!áÜ'¨	¯©°aÓ(8Ó9‰Mà%ˆMØ�‰�mÕ$áÜ! )§-¡-°Ó"2Ó3ˆGØÐLÑLØàˆGØ�‰�gÔà�}‰}ˆo˜RÐ ¤%¨£-Ð0Ð0r1   c                 óL   — | D �cg c]  }t        ||«      ‘Œ }}d|vr|S yc c}w )zParse <content-list> tokens.N)Úget_content_list_token)r:   rÜ   rJ   Úparsed_tokenss       r2   Úget_content_listrñ   B  s:   € ð KQÖQÀÔ+¨E°8Õ<ÐQ€MÐQØ�=Ñ ØÐð !ùò Rs   …!c                 óH  — t        | «      x}�|S t        | «      dk(  ryt        | |«      x}�|S t        | «      x}�d|fS t	        | |«      x}�|S t        j                  | «      }|j                  «       }|j                  dk(  rzt        |«      dk7  ry|\  }|j                  dk(  r7|j                  dk(  rd	}n@|j                  d
k(  rd}n.|j                  dk(  rd}ny|j                  dk(  r|j                  }dd|ffS |j                  dk(  rt        j                  d| «      S y)z'Parse one of the <content-list> tokens.NÚcontents)z	content()ÚtextÚquoteÚleaderr   r¦   Údottedú.ÚsolidÚ_ÚspacerD   r¸   zleader()Úelement)rÂ   rs   rØ   rä   rí   r   rÙ   rÚ   r;   rY   rœ   rS   rÁ   )	rJ   rÜ   r¸   rÒ   rõ   Útargetr¹   rt   Úargs	            r2   rï   rï   J  sI  € ô
 ˜UÓ#Ð#ˆÐ0Øˆô �5Ó˜ZÒ'Ø$ô �u˜hÓ'Ð'ˆÐ4Øˆ
ô ˜5Ó!Ð!ˆÐ.Ø˜ÐÐô ˜U HÓ-Ð-ˆÐ:Øˆä×!Ñ! %Ó(€HØ×$Ñ$Ó&€Ið ‡}�}˜Ò Üˆy‹>˜QÒØØ‰ˆØ�8‰8�wÒØ�y‰y˜HÒ$Ø‘Ø—‘˜gÒ%Ø‘Ø—‘˜gÒ%Ø‘àØ�X‰X˜Ò!Ø—Y‘YˆFØ˜X vÐ.Ð/Ð/ð 
�‰˜)Ò	#Ü×0Ñ0°¸EÓBÐBð 
$r1   c                 óB   ‡ — t        j                  ‰ «      ˆ fd„«       }|S )z;Decorator for validators that only accept a single keyword.c                 ó0   •— t        | «      } ‰|«      r|S y)z6Wrap a validator to call get_single_keyword on tokens.N)r¬   )r:   r‡   r¹   s     €r2   Úkeyword_validatorz)single_keyword.<locals>.keyword_validator~  s!   ø€ ô % VÓ,ˆÙ�GÔØˆNð r1   )Ú	functoolsÚwraps)r¹   r  s   ` r2   Úsingle_keywordr  |  s&   ø€ ä‡_�_�XÓóó ðð
 Ðr1   c                 óP   ‡ — t        j                  ‰ «      ˆ fd„«       }‰ |_        |S )z9Decorator for validators that only accept a single token.c                 ó:   •— t        | «      dk(  r ‰| d   g|¢­Ž S y)z*Validate a property whose token is single.r   r   N)rY   )r:   rP   r¹   s     €r2   Úsingle_token_validatorz,single_token.<locals>.single_token_validator‰  s*   ø€ ô ˆv‹;˜!ÒÙ˜F 1™IÐ-¨Ò-Ð-ð r1   )r  r  Ú__func__)r¹   r  s   ` r2   Úsingle_tokenr	  ‡  s/   ø€ ä‡_�_�XÓó.ó ð.ð '/ÐÔ#Ø!Ð!r1   c                 óP   ‡ — t        j                  ‰ «      ˆ fd„«       }‰ |_        |S )z<Decorator for validators that accept a comma separated list.c                 óŒ   •— g }t        | «      D ])  } ‰t        |«      g|¢­Ž }|€ y |j                  |«       Œ+ t        |«      S rF   )rŸ   r¤   re   rq   )r:   rP   ÚresultsÚpartrv   r¹   s        €r2   Úwrapperz%comma_separated_list.<locals>.wrapper”  sQ   ø€ àˆÜ" 6Ó*ò 	#ˆDÙÔ/°Ó5Ð=¸Ò=ˆFØˆ~ÙØ�N‰N˜6Õ"ð		#ô
 �W‹~Ðr1   )r  r  Úsingle_value)r¹   r  s   ` r2   Úcomma_separated_listr  ’  s-   ø€ ä‡_�_�XÓóó ðð $€GÔØ€Nr1   c           	      óð  — t        | t        t        f«      rQ|r || j                  «      n| j                  }t        dd|dt	        |«      | j
                  j                  «       «      S t        | t        «      r8|r || j                  «      n| j                  }t        dd|dt	        |«      «      S t        | t        t        t        f«      r¬t        | t        «      r| j                  }n| }|r ||«      n|}t        |«      j                  «       rt        |«      nd}t	        t        |«      j                  «       r|n|«      }|€t        dd|||«      S |dk(  rt        dd|||«      S t        dd||||«      S y)z/Transform a computed value result into a token.r   Nr   )Ú
isinstancer	   r   rS   ÚstrrÈ   rÉ   r   r   ÚintÚfloatÚ
is_integerr²   )Úitemr¹   rÈ   rS   r³   Úrepresentations         r2   Útokenizer  ¡  s9  € ä�$œ¬Ð3Ô4Ù(0‘˜Ÿ™Ô$°d·j±jˆÜ˜a  E¨4´°U³¸T¿Y¹Y¿_¹_Ó=NÓOÐOÜ	�Dœ/Ô	*Ù(0‘˜Ÿ™Ô$°d·j±jˆÜ˜q ! U¨D´#°e³*Ó=Ð=Ü	�Dœ;¬¬UÐ3Ô	4Ü�dœKÔ(Ø—J‘J‰EàˆEÙ#+‘˜”°ˆÜ$)¨%£L×$;Ñ$;Ô$=”E˜%”LÀ4ˆ	Ü¬%°«,×*AÑ*AÔ*C™YÈÓOˆØˆ<Ü˜q ! U¨I°~ÓFÐFØ�SŠ[Ü" 1 a¨°	¸>ÓJÐJä! ! Q¨¨y¸.È$ÓOÐOð 
5r1   )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ƒ   rf   ÚHUNDRED_PERCENTry   ro   ÚEÚPIÚPLUS_INFINITYÚMINUS_INFINITYÚNANÚ
ValueErrorr*   r4   r6   r8   r\   rc   rl   rw   r€   r‰   r˜   rŸ   r¤   rs   rª   r¬   r¶   rÂ   rÅ   rZ   rn   rÎ   rà   rØ   rä   rí   rñ   rï   r  r	  r  r  r0   r1   r2   ú<module>r)     sà  ðÙ ã ß #ß  Ó  ç QÓ QÝ 'å Ý  Ý Ý !Ý !ß EÑ Eá˜˜CÓ €Ù˜"˜cÓ"€Ù˜C Ó%€àØØØØñ#Ð ð  Ø˜r A™vÐ&Ø �mØ˜b 1™f q™jÐ)à1Ø1Ø3Ø3Ø7Ø7Ø9Ø9ñÐ ñ" ��1�a˜˜sÓ#€Ù��A�r˜4 Ó&€Ù˜A˜q # t¨UÓ3€Ù˜Q  C 4¨¨vÓ6€Ù�!�Q˜˜T 5Ó)€ôB�Jô Bô@�zô @ôG�Zô Gô ˆcô  òF6ò
ò $ò4
$ò<ò8.Dòb(òVò&8ò!òò	%ó0ò>Fó+ó""ò6(ò"(òHò@ò,ò61òrò/Còdò"òôPr1   