a
    ¥Q•h�É  ã                   @   s„  d Z ddlmZ ddlmZ ddlmZmZ ddlZddl	Z	ddl
Z	ddlZ	ddlmZ ddlmZmZ dd	lmZmZmZ d
dlmZm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#m$Z$m%Z%m&Z&m'Z'm(Z( dZ)edg d¢ƒZ*G dd„ dƒZ+dd„ Z,dd„ Z-dd„ Z.d/dd„Z/dd „ Z0d!d"„ Z1G d#d$„ d$e2ƒZ3G d%d&„ d&e2ƒZ4d0d'd(„Z5d)d*„ Z6d1d+d,„Z7d2d-d.„Z8dS )3u°  Find and apply CSS.

This module takes care of steps 3 and 4 of â€œCSS 2.1 processing modelâ€�: Retrieve
stylesheets associated with a document and annotate every element with a value
for every CSS property.

https://www.w3.org/TR/CSS21/intro.html#processing-model

This module does this in more than two steps. The
:func:`get_all_computed_styles` function does everything, but it is itsef based
on other functions in this module.

é    )Ú
namedtuple)Úgroupby)ÚDEBUGÚWARNINGNé   )ÚCSS)ÚLOGGERÚPROGRESS_LOGGER)ÚURLFetchingErrorÚget_url_attributeÚurl_joiné   )ÚcountersÚmedia_queries)ÚCOMPUTER_FUNCTIONS)Ú	INHERITEDÚINITIAL_NOT_COMPUTEDÚINITIAL_VALUESÚZERO_PIXELS)Úpreprocess_declarations)Úpreprocess_descriptors)ÚInvalidValuesÚPendingÚcheck_var_functionÚget_urlÚparse_functionÚremove_whitespace)NÚbeforeÚafterÚmarkerz
first-linezfirst-letterzfootnote-callzfootnote-markerÚPageSelectorType)ÚsideÚblankÚfirstÚindexÚnamec                   @   sP   e Zd ZdZdd„ Zddd„Zddd„Zd	d
„ Zdd„ Zdd„ Z	e
dd„ ƒZdS )ÚStyleForz?Convenience function to get the computed styles for an element.c              	   C   s¼  i  | _ }i | _|| _t d¡ t|j||jƒD ]v\}}|\}}	}
| |d fi ¡}t	|
|	ƒD ]H\}}}t
d|ƒ}||f}| |d¡d }|d u s˜||kr\||f||< q\q0|j ¡ D ]Ê}|D ]’\}}}|j |¡D ]z}|\}}}}	|pæ|}| |j|fi ¡}|	D ]J\}}}t
||ƒ}||f}| |d¡d }|d u �s<||krþ||f||< qþqÐqº|j�r^|jjnd }| j|j|j||j|d� q²|D ]*\}}|�r‚| j|||j||j|d� �q‚| j  ¡  d S )NzStep 3 - Applying CSSÚauthor©NNr   )ÚrootÚparentÚbase_urlÚtarget_collector)Úpseudo_typer)   r*   r+   r,   )Ú_cascaded_stylesÚ_computed_stylesÚ_sheetsr	   ÚinfoÚfind_style_attributesÚetree_elementr+   Ú
setdefaultr   Údeclaration_precedenceÚgetÚwrapper_elementÚiter_subtreeÚmatcherÚmatchr*   Úset_computed_stylesÚclear)ÚselfÚhtmlÚsheetsÚpresentational_hintsr,   Úcascaded_stylesÚspecificityÚ
attributesÚelementÚdeclarationsr+   Ústyler%   ÚvaluesÚ
importanceÚ
precedenceÚweightÚ
old_weightÚsheetÚoriginÚsheet_specificityÚselectorÚorderr-   r*   © rQ   úP/var/www/sistema_ama/venv/lib/python3.9/site-packages/weasyprint/css/__init__.pyÚ__init__0   sX    


ÿ
ÿ

ÿ

þü
zStyleFor.__init__Nc                 C   sŒ   | j  ||f¡ }rˆd|d v rD|d dkrDdD ]}t|d|› �< q0t|d ƒdkrˆ|d \}| d¡rˆ|d	krˆdD ]}t|d
|› �< qt|S )NÚtableÚdisplayZborder_collapseÚcollapse)ÚtopÚbottomÚleftÚrightZpadding_r   ztable-ztable-captionZmargin_)r/   r6   r   ÚlenÚ
startswith)r=   rD   r-   rF   r!   rU   rQ   rQ   rR   Ú__call__~   s    
zStyleFor.__call__c                 C   s’   |   ¡ }|  ¡ }||kr>|du r>|du s,J ‚d}	dtd i}
n$|dusJJ ‚||df }	||df }
| ||fi ¡}t|||	||
||ƒ|||f< dS )a!  Set the computed values of styles to ``element``.

        Take the properties left by ``apply_style_rule`` on an element or
        pseudo-element and assign computed values with respect to the cascade,
        declaration priority (ie. ``!important``) and selector specificity.

        NZ	font_size)Úget_cascaded_stylesÚget_computed_stylesr   r6   Úcomputed_from_cascaded)r=   rD   r*   r)   r-   r+   r,   rA   Zcomputed_stylesÚparent_styleÚ
root_styleÚcascadedrQ   rQ   rR   r;   Œ   s    	ýþzStyleFor.set_computed_stylesc                 C   s°   | j D ]¤\}}}|jD ]’\}}}|D ]‚}|\}	}
}|  ||¡r$|pD|	}	| j ||
fi ¡}|D ]H\}}}t||ƒ}||	f}| |d¡d }|d u s˜||kr\||f||< q\q$qqd S )Nr(   r   )r0   Ú
page_rulesÚ_page_type_matchr.   r4   r5   r6   )r=   Ú	page_typerL   rM   rN   Z_ruleÚselector_listrE   rO   rB   r-   Úpage_selector_typerF   r%   rG   rH   rI   rJ   rK   rQ   rQ   rR   Úadd_page_declarations©   s    
ÿ
zStyleFor.add_page_declarationsc                 C   s   | j S ©N)r.   ©r=   rQ   rQ   rR   r^   ¹   s    zStyleFor.get_cascaded_stylesc                 C   s   | j S rj   )r/   rk   rQ   rQ   rR   r_   ¼   s    zStyleFor.get_computed_stylesc                 C   s  | j d |j fvrdS | jd |jfvr(dS | jd |jdkfvr@dS | jd |jfvrTdS | jd u�r| j\}}}|d u r¬|j}|d | }|dkr–|dkS || dkoª||  S ||jkrºdS |jD ]J\}}||krÒqÀ|d | }|dkrð|dkrÀn|| dkrÀ|| sÀ dS qÀdS dS )NFr   r   T)r!   r"   r#   r$   r%   Úgroups)rh   rf   ÚaÚbr%   r$   ÚoffsetÚ
group_namerQ   rQ   rR   re   ¿   s0    &
&zStyleFor._page_type_match)N)NNNN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__rS   r]   r;   ri   r^   r_   Ústaticmethodre   rQ   rQ   rQ   rR   r&   .   s   N
  ÿ
r&   c                 C   s8   | j r| j gng }| D ]}|jr| |j¡ qd |¡S )z9Return the text directly in the element, not descendants.Ú )ÚtextÚtailÚappendÚjoin)rD   ÚcontentÚchildrQ   rQ   rR   Úget_child_textÛ   s
    r}   c                 C   s@   d}| |v r|s<|}n&| dkr<|dkr<|dkr4|}n||B }|S )N)Ztext_decoration_colorZtext_decoration_styleZtext_decoration_thicknessZtext_decoration_lineÚnonerQ   )ÚkeyÚvalueZparent_valuerc   Ztext_propertiesrQ   rQ   rR   Útext_decorationä   s    r�   c                 c   sT  ddl m} |  dd¡D �]4}|j}	|	 dd¡ dd¡d	  ¡ }
|
dkrJq|	 d
d¡ ¡ p\d}dd„ | d¡D ƒ}t ||¡s€q|	j	dkr°t
|	ƒ}t|||||||d�}|V  q|	j	dkr|	 d¡r||	dƒr||	dƒrÚqt|	d|ƒ}|durzt||d||||d�V  W q t�yL } z(t d||¡ tjd|d� W Y d}~qd}~0 0 qdS )zgYield the stylesheets in ``element_tree``.

    The output order is the same as the source order.

    r   )Úelement_has_link_typerF   ÚlinkÚtypeztext/cssú;r   r   Úmediarv   Úallc                 S   s   g | ]}|  ¡ ‘qS rQ   )Ústrip)Ú.0Ú
media_typerQ   rQ   rR   Ú
<listcomp>  ó    z$find_stylesheets.<locals>.<listcomp>ú,)Ústringr+   Úurl_fetcherrŠ   Úfont_configÚcounter_stylerd   ÚhrefÚ
stylesheetÚ	alternateNT)Úurlr�   Ú_check_mime_typerŠ   r�   r‘   rd   z#Failed to load stylesheet at %s: %súError while loading stylesheet:©Úexc_info)r>   r‚   Ú	query_allr3   r6   Úsplitrˆ   r   Úevaluate_media_queryÚtagr}   r   r   r
   r   ÚerrorÚdebug)r7   Údevice_media_typer�   r+   r�   r‘   rd   r‚   ÚwrapperrD   Ú	mime_typeZ
media_attrr†   r{   Úcssr’   Ú	exceptionrQ   rQ   rR   Úfind_stylesheets÷   sH    
ü
ÿür¥   Fc                 #   s¤
  ‡ fdd„}|   ¡ D �
]ˆ}d}| d¡}|r<||||ƒfV  |sBqd}|jdk�r>dD ]`\}}d}d	|› �|› d	�fD ]*}	| |	¡rvd
|› d| |	¡› d�} q¢qv|rV||||ƒfV  qV| d¡räd| d¡› d�}||||ƒfV  | d¡�rd| d¡› �}||||ƒfV  | d¡�
ržd| d¡› �}||||ƒfV  q|jdk�r\|||dƒfV  q|jdk�r¶| dd¡ ¡ }
|
dk�r”|||dƒfV  n |
dv �
rž|||d|
› �ƒfV  q|jdk�rè| d¡�rê|||d| d¡› �ƒfV  | d¡�r|||d| d¡› �ƒfV  | d ¡�
rž| d ¡ ¡ }| d!¡}| d"¡}|�sL|�r\|d#d…  ¡ }zt|ƒ}W n  t�yˆ   t 	d$|¡ Y n^0 d%d&d'd(d)d*d+d,œ}|�r®|d-7 }n|�r¼|d-8 }t
d#td.|ƒƒ}|||d/|| › �ƒfV  q|jd0k�rR| d1¡�r|||d2| d1¡› d�ƒfV  | d3¡�rŒ| d3¡}| ¡ �rF|d7 }|  ¡ D ]<}|jd4v �rN|||d5|› d6|› d7|› d8|› d9�	ƒfV  �qN| d:¡�rÐ| d:¡}| ¡ �r´|d7 }|||d;|› d<|› �ƒfV  | d=¡�r| d=¡}| ¡ �rø|d7 }|||d>|› d?|› �ƒfV  | d@¡�rXdA| d@¡› �}| d@¡ ¡ �rH|d7 }||||ƒfV  | dB¡�rœdC| dB¡› �}| dB¡ ¡ �rŒ|d7 }||||ƒfV  | d¡�rÊd| d¡› d�}||||ƒfV  | d¡�röd| d¡› �}||||ƒfV  | dD¡�r"dE| dD¡› �}||||ƒfV  | dF¡�
rždG| dF¡› d�}||||ƒfV  q|jdHv �r¦| dd¡ ¡ }
|
dk�rŠ|||dƒfV  n |
dv �rª|||d|
› �ƒfV  | d¡�rØd| d¡› d�}||||ƒfV  | d¡�rd| d¡› �}||||ƒfV  |jdIv �
rž| dB¡�rTdC| dB¡› �}| dB¡ ¡ �rD|d7 }||||ƒfV  |jd4v �
rž| d@¡�
rždA| d@¡› �}| d@¡ ¡ �r”|d7 }||||ƒfV  q|jdJk�r | dd¡ ¡ }
|
dk�rÞ|||dƒfV  n |
dv �
rž|||d|
› �ƒfV  q|jdKk�rR| d@¡�
rždA| d@¡› �}| d@¡ ¡ �r@|d7 }||||ƒfV  q|jdLk�r”dM}| d ¡�r¢zt| d ¡ƒ}W n  t�y    t 	d$|¡ Y n0 | d¡| dN¡fdOk�rä|d#k�r&|||dG|dP › d�ƒfV  nB|d#k�r |||dQƒfV  n&|d#k�r&|||dC|dP › d�ƒfV  | d@¡�rjdA| d@¡› �}| d@¡ ¡ �rZ|d7 }||||ƒfV  | d¡�
rž|||d| d¡› �ƒfV  q|jdRv �
r4|jdSk�sÂ| dTd¡ ¡ dUk�
rž| dd¡ ¡ }
|
dVv �rì|||dWƒfV  | d:¡�	r0| d:¡}| ¡ �	r|d7 }|||d;|› d<|› �ƒfV  | d=¡�	rt| d=¡}| ¡ �	rX|d7 }|||d>|› d?|› �ƒfV  | d@¡�	r¸dA| d@¡› �}| d@¡ ¡ �	r¨|d7 }||||ƒfV  | dB¡�	rüdC| dB¡› �}| dB¡ ¡ �	rì|d7 }||||ƒfV  |jdXv �
rž| dF¡�
rž|||dG| dF¡› dY�ƒfV  q|jdZk�
rl| d[¡�
rž|||d\| d[¡› d]�ƒfV  q|jd^kr| d_¡r|||d\| d_¡› d`�ƒfV  qdS )aa  Yield ``specificity, (element, declaration, base_url)`` rules.

    Rules from "style" attribute are returned with specificity
    ``(1, 0, 0)``.

    If ``presentational_hints`` is ``True``, rules from presentational hints
    are returned with specificity ``(0, 0, 0)``.

    c                    s   t  |¡}| |ˆ fS rj   )Útinycss2Úparse_blocks_contents)rD   Ústyle_attributerE   ©r+   rQ   rR   Úcheck_style_attribute1  s    
z4find_style_attributes.<locals>.check_style_attribute)r   r   r   rF   ©r   r   r   Úbody))ÚheightrW   )r­   rX   )ÚwidthrY   )r®   rZ   NÚmarginzmargin-ú:ZpxÚ
backgroundzbackground-image:url(ú)Úbgcolorzbackground-color:rw   zcolor:Úcenterztext-align:centerÚdivÚalignrv   Úmiddle)r´   rY   rZ   Újustifyztext-align:ÚfontÚcolorÚfacezfont-family:Úsizeú+ú-r   zInvalid value for size: %szx-smallÚsmallÚmediumZlargezx-largezxx-largeZ48px)r   r   é   é   é   é   é   rÁ   rÅ   z
font-size:rT   Zcellspacingzborder-spacing:Úcellpadding)ÚtdÚthzpadding-left:z;padding-right:z;padding-top:z;padding-bottom:r…   Úhspacezmargin-left:z;margin-right:Úvspacezmargin-top:z;margin-bottom:r®   zwidth:r­   zheight:Úbordercolorzborder-color:Úborderzborder-width:)ÚtrrÇ   rÈ   ÚtheadÚtbodyÚtfoot)rÍ   rÇ   rÈ   ÚcaptionÚcolÚhrr   Znoshader(   r   zborder-bottom-width:0)ÚiframeÚappletÚembedÚimgÚinputÚobjectrØ   r„   Úimage)r·   r´   zvertical-align:middle)r×   rÙ   rØ   zpx;border-style:solidÚolÚstartzcounter-reset:list-item z;counter-increment:list-item -1Úlir€   z;counter-increment:none)Úiterr6   r�   Úlowerrˆ   r\   ÚintÚ
ValueErrorr   ÚwarningÚmaxÚminÚisdigit)Útreer@   r+   rª   rD   rB   r¨   ÚpartÚpositionÚpropr¶   r¼   Zrelative_plusZrelative_minusZ
font_sizesrÆ   Ú
subelementrÉ   rÊ   rQ   r©   rR   r2   '  sð   





ÿÿ

ù	
ÿ
ÿ

ÿþýþ

ÿ

ÿÿ
ÿ

ÿ



ÿ

ÿ

ÿÿ
ÿ
ÿ

ÿ

ÿþ
þ


þr2   c                 C   sL   | dkrdS | dkr|sdS | dkr,|s,dS | dkr8dS | dksDJ ‚dS d	S )
zÝReturn the precedence for a declaration.

    Precedence values have no meaning unless compared to each other.

    Acceptable values for ``origin`` are the strings ``'author'``, ``'user'``
    and ``'user agent'``.

    ú
user agentr   Úuserr   r'   rÁ   rÂ   rÃ   NrQ   )rM   rH   rQ   rQ   rR   r5   )  s    
r5   c                 C   sâ   t |ƒsdS |jdkr€g }t|jƒD ]0\}}|jdkrJ| t| ||ƒ¡ q$| |¡ q$tj	 
|j|j|j|¡}t| ||ƒp~|fS t|ƒd }| d¡j dd¡}|}g }	| | p²|D ](}
t| |
|ƒ}|	 |du rÖ|
fn|¡ q´|	S )z)Return token with resolved CSS variables.NÚvarÚfunctionr   r   r¾   Ú_)r   Ú
lower_nameÚ	enumerateÚ	argumentsr„   ÚextendÚresolve_varry   r¦   ÚastÚFunctionBlockÚsource_lineÚsource_columnr%   r   Úpopr€   Úreplace)ZcomputedÚtokenra   rò   ÚiÚargumentÚargsÚvariable_nameÚdefaultZcomputed_valuer€   ÚresolvedrQ   rQ   rR   rô   @  s(    

ÿrô   c                   @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	ÚAnonymousStylez(Computed style used for anonymous boxes.c                 C   s@   |   ddddddœ¡ || _| | _|r0|j| _ni i dœ| _d S )Nr   )Zborder_top_widthZborder_bottom_widthZborder_left_widthZborder_right_widthZoutline_width©Zratio_chZratio_ex)Úupdatera   Ú	specifiedÚcache)r=   ra   rQ   rQ   rR   rS   \  s    û
zAnonymousStyle.__init__c                 C   s   t | jƒ}| | ¡ |S rj   )r  ra   r  ©r=   ÚcopyrQ   rQ   rR   r  n  s    

zAnonymousStyle.copyc                 C   s�   |t v s|d d… dkr,| j|  }| |< n`|dkrH| j|  }| |< nD|d d… dkr|t|t| | j| dd� }| |< nt|  }| |< |S )Nr   Ú__Úpageé   Útext_decoration_F)rc   )r   ra   r�   r   )r=   r   r€   rQ   rQ   rR   Ú__missing__s  s    ÿzAnonymousStyle.__missing__N©rq   rr   rs   rt   rS   r  r  rQ   rQ   rQ   rR   r  Z  s   r  c                   @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	ÚComputedStylez,Computed style used for non-anonymous boxes.c                 C   sR   i | _ || _|| _|d u | _|| _|| _|| _|| _|rB|j| _ni i dœ| _d S )Nr  )	r  ra   rc   Zis_root_elementrD   r-   rb   r+   r  )r=   ra   rc   rD   r-   rb   r+   rQ   rQ   rR   rS   ƒ  s    

zComputedStyle.__init__c                 C   s8   t | j| j| j| j| j| jƒ}| | ¡ | j 	¡ |_|S rj   )
r  ra   rc   rD   r-   rb   r+   r  r  r  r  rQ   rQ   rR   r  ’  s    þ
zComputedStyle.copyc           	      C   s\  |dkr| d  n|dkr"| d  | j }|| jv rL| j| d }t|tƒ}n&|tv sd|d d… dkrjd}nd}d	}|dkr†|d u r†d}|�r8g }|jD ].}t| ||ƒ}|d u rº| |¡ q–| |¡ q–| 	d
d¡}z| 
||¡}W nT t�y6   |tv �r|d u�r||  | |< }nt| }|tv�r2|| |< Y n0 |dk�rt|d d… dk�rXg nt| }|tv�rŽ|| |< n|dk�rŽ||  | |< }|d d… dk�rÔ|d u�rÔt|||| || jv ƒ}|| v �r$| |= nP|dk�r|dk�r|d u �rödn|d }|| v �r$| |= n|dv �r$|| j|< || v �r6| | S |tv �rPt| | ||ƒ}|| |< |S )NÚfloatrè   rU   r   r   r	  ÚinheritÚinitialFrï   r¾   r  r  r
  Úautorv   )rè   r  rU   )ra   rc   Ú
isinstancer   r   Útokensrô   ry   ró   rú   Zsolver   r   r   r�   r  r   )	r=   r   ra   r€   ÚpendingZsolved_tokensrû   r  Úoriginal_keyrQ   rQ   rR   r  š  sh    













zComputedStyle.__missing__Nr  rQ   rQ   rQ   rR   r  �  s   r  c                 C   sD   |s|durt |ƒS t||| |||ƒ}|r@|d r@| |d ¡ |S )zCGet a dict of computed style mixed from parent and cascaded styles.NÚanchor)r  r  Zcollect_anchor)rD   rc   ra   r-   rb   r+   r,   rF   rQ   rQ   rR   r`   õ  s    ÿr`   c              	   C   sÐ  t t| jƒƒ}g }|s6| dddddg d¢dœ¡ |S |�rÌdddddg d¢dœ}|d jdkr€| d¡}|j|d< d|d d< t|ƒdkr�dS |s¢| |¡ |S |�rÀ| d¡}|jd	krÀdS |jd
k�r–|sÔdS |d jdk�rf| d¡}|j}|dv �r:|d �r|d |k�rdS ||d< |d d  d7  < q¢n(|dv �r’d||< |d d  d7  < q¢�n,|d jdk�r’| d¡}|j	dk�r�dS t
|jƒD ]L\}	}
|
jdk�rš|
jdk�rš|jd|	d … }|j|	d d… } �qò�qš|j}d}tj |¡}|du �rdS |du�rRdd„ |D ƒ}t|ƒdk�r6dS |\}|jdk�rLdS |j}g |¢|‘R |d< |d d  d7  < |r¢|d d  d7  < q¢dS |jdkr¢|�rºt|d ƒ�rº�qÀq¢dS q¢| |¡ q6|S )a©  Parse a page selector rule.

    Return a list of page data if the rule is correctly parsed. Page data are a
    dict containing:

    - 'side' ('left', 'right' or None),
    - 'blank' (True or None),
    - 'first' (True or None),
    - 'index' (page number or None),
    - 'name' (page name string or None), and
    - 'specificity' (list of numbers).

    Return ``None` if something went wrong while parsing the rule.

    Nr«   )r!   r"   r#   r$   r%   rB   r   Úidentr%   r   rB   Úliteralr°   )rY   rZ   r!   r   )r"   r#   Trî   ÚnthÚofc                 S   s   g | ]}|j d vr|‘qS ))ÚcommentÚ
whitespace)r„   )r‰   rû   rQ   rQ   rR   r‹   Z  s   
ÿz(parse_page_selectors.<locals>.<listcomp>r$   r�   )Úlistr   Úpreludery   r„   rù   r€   r[   Úlower_valuer%   rñ   rò   r¦   r  Ú	parse_nthÚany)Úruler  Ú	page_dataÚtypesrû   r  r  Zpseudo_classrî   rü   rý   r  ÚgroupZ
nth_valuesrQ   rQ   rR   Úparse_page_selectors  sš    þþ











ÿ
r(  c	           &      C   sÐ  |D �]Ä}	t |	ddƒdu rf|	jdkr:t d|	j|	j|	j¡ |	jdkrFq|	jdkrft d|	|	j|	j¡ q|	jdk�rŠzÒt}
t	 
|	j¡}tt|||	jƒƒ}|�r>t|d	d
„ d�}|D ]Š\}}dd„ |D ƒ}|D ]j}| ||¡ |jtvrÊt	 |	j¡}|j d¡�rt}
t d|› d|j› �¡‚qÊt d|› d|j› �¡‚qÊd}q°nd}W nB tj�y† } z&t |
d|¡ W Y d}~qW Y d}~n
d}~0 0 q|	jdk�rþ|	jdk�rþ|�rÆt dt	 |	j¡|	j|	j¡ qt|	jƒ}d}|�r>|d jdk�rt||d jdd|	j|	jfd�}n2t|d |ƒ}|�r>|d d dk�r>|d d }|du �rJqt |dd… ¡}|du �r„t dt	 |	j¡|	j|	j¡ qt || ¡�s”q|du�rÊzt ||| ||||d� W nB t!�yú } z(t "d||¡ tj#d|d � W Y d}~n
d}~0 0 q|	jdk�r†|	jd!k�r†t |	j¡}|du �rJt d"t	 |	j¡|	j|	j¡ qd}t || ¡�s^qt	 $|	j¡}t%| |||||||dd#�	 q|	jdk�rœ|	jd$k�rœt&|	ƒ}|du �rÎt d%t	 |	j¡|	j|	j¡ qd}|D ]Â}| 'd&¡}t(f i |¤Ž}t	 
|	j¡}tt||ƒƒ}|�r.|d|fg}| )|	||f¡ |D ]b}|jdk�s2|jdu �rR�q2tt|t	 
|j¡ƒƒ}|�r2|d'|j› �|fg}| )|||f¡ �q2�qÖq|	jdk�r$|	jd(k�r$d}t	 
|	j¡}t*t+d(||ƒƒ}d)D ]2} | |v�rØt d*|  ,d+d¡|	j|	j¡  �qÊ�qØ|du�rÊ| -||¡ q|	jdk�r¶|	jd,k�r¶t. /|	j|¡}!|!du �rrt d-t	 |	j¡|	j|	j¡ qd}t	 
|	j¡}dddddddddd.œ	}"t+d,||ƒ}|D ]\}#}$|$|"|#< �qª|"d/ du �rÒd0}%n|"d/ }%|%d du �r¬|%d d1v �r,t0|"d2 �pg ƒdk �r¬t d3|!|	j|	j|%d ¡ qn€|%d d4v �rpt0|"d2 �pHg ƒd5k �r¬t d6|!|	j|	j|%d ¡ qn<|%d d7k�r¬t0|"d8 �pŒg ƒd5k �r¬t d9|!|	j|	j¡ q|"||!< qt d:|	|	j|	j¡ qdS );zDDo what can be done early on stylesheet, before being in a document.r{   Nrž   zParse error at %d:%d: %szat-ruleÚimportzUnknown empty rule %s at %d:%dzqualified-rulec                 S   s   | d S )Nr   rQ   )ÚxrQ   rQ   rR   Ú<lambda>“  rŒ   z'preprocess_stylesheet.<locals>.<lambda>)r   c                 S   s   g | ]}|d  ‘qS )r   rQ   )r‰   ÚdeclarationrQ   rQ   rR   r‹   •  s   z)preprocess_stylesheet.<locals>.<listcomp>r¾   ú'z$', ignored prefixed pseudo-element: z', unknown pseudo-element: Tz#Invalid or unsupported selector, %szP@import rule %r not at the beginning of the the whole rule was ignored at %d:%d.r   rŽ   Fz@import at %s:%s)Úallow_relativeÚcontextÚcontext_argsr   ÚexternalzBInvalid media type %r the whole @import rule was ignored at %d:%d.)r•   r�   rŠ   r�   r‘   r9   rd   z$Failed to load stylesheet at %s : %sr—   r˜   r†   zAInvalid media type %r the whole @media rule was ignored at %d:%d.)Úignore_importsr
  zIUnsupported @page selector %r, the whole @page rule was ignored at %d:%d.rB   ú@z	font-face)ÚsrcZfont_familyz3Missing %s descriptor in '@font-face' rule at %d:%drï   zcounter-stylezRInvalid counter style name %r, the whole @counter-style rule was ignored at %d:%d.)	ÚsystemÚnegativeÚprefixÚsuffixÚrangeÚpadÚfallbackÚsymbolsÚadditive_symbolsr5  )NÚsymbolicN)ZcyclicÚfixedr>  r<  zHIn counter style %r at %d:%d, counter style %r needs at least one symbol)Z
alphabeticÚnumericr   zIIn counter style %r at %d:%d, counter style %r needs at least two symbolsZadditiver=  zZIn counter style %r at %d:%d, counter style "additive" needs at least two additive symbolszUnknown rule %s at %d:%d)1Úgetattrr„   r   râ   r÷   rø   ÚmessageÚlower_at_keywordr   r¦   r§   r{   r  r   r   r   Úadd_selectorÚpseudo_elementÚPSEUDO_ELEMENTSÚ	serializer\   r   Ú
cssselect2ÚSelectorErrorÚlogr   r   r€   r   r   Zparse_media_queryrœ   r   r
   rž   rŸ   Úparse_rule_listÚpreprocess_stylesheetr(  rù   r    ry   Údictr   rú   Zadd_font_facer   Zparse_counter_style_namer[   )&r    r+   Zstylesheet_rulesr�   r9   rd   r�   r‘   r2  r$  Zlogger_levelÚcontentsZselectors_declarationsÚ	selectorsrE   rO   r   Úexcr  r•   Z	url_tupler†   r¤   Zcontent_rulesÚdatar%  rB   rh   r{   rg   Zmargin_ruleZrule_descriptorsr   r%   ÚcounterZdescriptor_nameZdescriptor_valuer5  rQ   rQ   rR   rL  x  s¦   

þ


þÿÿÿ
þÿþÿ$
ü

ý


ü
ý
&

ü
þ

ü

þþ
ÿ
þ


ü÷ÿýý
ü

þrL  c                 C   sä   g }|du rt  ¡ }|  ¡ D ]}	|	 ¡ D ]\}
}|||
< q(q|  |¡pHg D ]}| |ddf¡ qJ|r†|  ¡ png D ]}| |ddf¡ qpt| j| j	| j
| j|||ƒD ]}| |ddf¡ q¢|p¾g D ]}| |ddf¡ qÀt| |||ƒS )a   Compute all the computed styles of all elements in ``html`` document.

    Do everything from finding author stylesheets to parsing and applying them.

    Return a ``style_for`` function that takes an element and an optional
    pseudo-element type, and return a style dict object.

    Nrë   r'   r«   rì   )r   ZCounterStyleÚ_ua_counter_styleÚitemsÚ_ua_stylesheetsry   Ú_ph_stylesheetsr¥   r7   rŠ   r�   r+   r&   )r>   Zuser_stylesheetsr@   r�   r‘   rd   r,   Úformsr?   rF   r   r€   rL   rQ   rQ   rR   Úget_all_computed_styles\  s&    
þrX  )FN)NNNN)F)NFNNNNF)9rt   Úcollectionsr   Ú	itertoolsr   Úloggingr   r   rH  r¦   Ztinycss2.astÚtinycss2.nthrv   r   Úloggerr   r	   Úurlsr
   r   r   r   r   Zcomputed_valuesr   Z
propertiesr   r   r   r   Ú
validationr   Zvalidation.descriptorsr   Úutilsr   r   r   r   r   r   rF  r    r&   r}   r�   r¥   r2   r5   rô   rM  r  r  r`   r(  rL  rX  rQ   rQ   rQ   rR   Ú<module>   sX    ÿ .	0
  't   þ
w þ
 e   þ