a
    [Xh                     @   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||< qqq|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_elementZ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*    rP   \/var/www/viveiro_mudafortebrasil/venv/lib/python3.9/site-packages/weasyprint/css/__init__.py__init__0   sX    








zStyleFor.__init__Nc                 C   s   | j ||f }rd|d v rD|d dkrDdD ]}t|d| < q0t|d dkr|d \}|dr|d	krdD ]}t|d
| < qt|S )NtabledisplayZborder_collapseZcollapse)topbottomleftrightZpadding_r   ztable-ztable-captionZmargin_)r/   r6   r   len
startswith)r<   rC   r-   rE   r!   rT   rP   rP   rQ   __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<   rC   r*   r)   r-   r+   r,   r@   Zcomputed_stylesparent_style
root_stylecascadedrP   rP   rQ   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_typerK   rL   rM   Z_ruleselector_listrD   rN   rA   r-   page_selector_typerE   r%   rF   rG   rH   rI   rJ   rP   rP   rQ   add_page_declarations   s    

zStyleFor.add_page_declarationsc                 C   s   | j S N)r.   r<   rP   rP   rQ   r\      s    zStyleFor.get_cascaded_stylesc                 C   s   | j S rh   )r/   ri   rP   rP   rQ   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rdS |jD ]J\}}||krq|d | }|dkr|dkrn|| dkr|| s dS qdS dS )NFr   r   T)r!   r"   r#   r$   r%   groups)rf   rd   abr%   r$   offsetZ
group_namerP   rP   rQ   rc      s0    &
&zStyleFor._page_type_match)N)NNNN)__name__
__module____qualname____doc__rR   r[   r:   rg   r\   r]   staticmethodrc   rP   rP   rP   rQ   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)rC   contentchildrP   rP   rQ   get_child_text   s
    rz   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nonerP   )keyvalueZparent_valuera   Ztext_propertiesrP   rP   rQ   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||sq|	j	dkrt
|	}t|||||||d}|V  q|	j	dkr|	dr||	dr||	drq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_typerE   linktypeztext/css;r   r   mediars   allc                 S   s   g | ]}|  qS rP   )strip).0
media_typerP   rP   rQ   
<listcomp>      z$find_stylesheets.<locals>.<listcomp>,)stringr+   url_fetcherr   font_configcounter_stylerb   hrefZ
stylesheet	alternateNT)urlr   Z_check_mime_typer   r   r   rb   z#Failed to load stylesheet at %s: %sError while loading stylesheet:exc_info)r=   r   Z	query_allr3   r6   splitr   r   evaluate_media_querytagrz   r   r   r
   r   errordebug)r7   device_media_typer   r+   r   r   rb   r   wrapperrC   Z	mime_typeZ
media_attrr   rx   cssr   	exceptionrP   rP   rQ   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} qqv|rV||||fV  qV|drd|d d}||||fV  |drd|d }||||fV  |d
rd|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rdC|dB }|dB r|d7 }||||fV  |drd|d d}||||fV  |drd|d }||||fV  |dDr"dE|dD }||||fV  |dF
rdG|dF d}||||fV  q|jdHv r|dd }
|
dkr|||dfV  n |
dv r|||d|
 fV  |drd|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@
rdA|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@
rdA|d@ }|d@ r@|d7 }||||fV  q|jdLkrdM}|d rz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@	rdA|d@ }|d@ 	r|d7 }||||fV  |dB	rdC|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 rh   )tinycss2parse_blocks_contents)rC   style_attributerD   r+   rP   rQ   check_style_attribute1  s    
z4find_style_attributes.<locals>.check_style_attribute)r   r   r   rE   r   r   r   body))heightrU   )r   rV   )widthrW   )r   rX   Nmarginzmargin-:ZpxZ
backgroundzbackground-image:url()Zbgcolorzbackground-color:rt   zcolor:centerztext-align:centerdivalignrs   middle)r   rW   rX   Zjustifyztext-align:fontcolorfacezfont-family:size+-r   zInvalid value for size: %szx-smallsmallZmediumZlargezx-largezxx-largeZ48px)r   r                  r   r   z
font-size:rS   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:Zbordercolorzborder-color:Zborderzborder-width:)trr   r   theadtbodytfoot)r   r   r   captioncolhrr   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   rZ   int
ValueErrorr   warningmaxminisdigit)treer?   r+   r   rC   rA   r   partpositionpropr   r   Zrelative_plusZrelative_minusZ
font_sizesr   
subelementr   r   rP   r   rQ   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 )
zReturn 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   NrP   )rL   rG   rP   rP   rQ   r5   )  s    
r5   c                 C   s   t |sdS |jdkrg }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   Z
lower_name	enumerate	argumentsr   extendresolve_varrv   r   astZFunctionBlocksource_linesource_columnr%   r   popr}   replace)Zcomputedtokenr_   r   iargumentargsZvariable_namedefaultZcomputed_valuer}   ZresolvedrP   rP   rQ   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)updater_   	specifiedcache)r<   r_   rP   rP   rQ   rR   \  s    
zAnonymousStyle.__init__c                 C   s   t | j}||  |S rh   )r   r_   r   r<   copyrP   rP   rQ   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)ra   )r   r_   r~   r   )r<   r|   r}   rP   rP   rQ   __missing__s  s    zAnonymousStyle.__missing__Nrn   ro   rp   rq   rR   r   r   rP   rP   rP   rQ   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   r_   ra   Zis_root_elementrC   r-   r`   r+   r   )r<   r_   ra   rC   r-   r`   r+   rP   rP   rQ   rR     s    

zComputedStyle.__init__c                 C   s8   t | j| j| j| j| j| j}||  | j	 |_|S rh   )
r   r_   ra   rC   r-   r`   r+   r   r   r   r   rP   rP   rQ   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 rd}|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rt|||| || jv }|| v r$| |= nP|dkr|dkr|d u rdn|d }|| v r$| |= n|dv r$|| j|< || v r6| | S |tv rPt| | ||}|| |< |S )Nfloatr   rT   r   r   r   ZinheritinitialFr   r   r   r   r   autors   )r   r   rT   )r_   ra   
isinstancer   r   tokensr   rv   r   r   Zsolver   r   r   r~   r   r   )	r<   r|   r_   r}   pendingZsolved_tokensr   r  Zoriginal_keyrP   rP   rQ   r     sh    













zComputedStyle.__missing__Nr   rP   rP   rP   rQ   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)rC   ra   r_   r-   r`   r+   r,   rE   rP   rP   rQ   r^     s    r^   c              	   C   s  t t| j}g }|s6|dddddg dd |S |rdddddg dd}|d jdkr|d}|j|d< d|d d< t|dkrdS |s|| |S |r|d}|jd	krdS |jd
kr|sdS |d jdkrf|d}|j}|dv r:|d r|d |krdS ||d< |d d  d7  < qn(|dv rd||< |d d  d7  < qn,|d jdkr|d}|j	dkrd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  < qdS |jdkr|rt|d rqqd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%   rA   r   identr%   r   rA   literalr   )rW   rX   r!   r   )r"   r#   Tr   nthZofc                 S   s   g | ]}|j d vr|qS ))comment
whitespace)r   )r   r   rP   rP   rQ   r   Z  s   
z(parse_page_selectors.<locals>.<listcomp>r$   r   )listr   preluderv   r   r   r}   rY   Zlower_valuer%   r   r   r   r	  Z	parse_nthany)ruler  	page_datatypesr   r  r  Zpseudo_classr   r   r   r	  groupZ
nth_valuesrP   rP   rQ   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rzt}
t	
|	j}tt|||	j}|r>t|d	d
 d}|D ]\}}dd |D }|D ]j}||| |jtvrt	|	j}|jdrt}
td| d|j qtd| d|j qd}qn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|rt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 rtdt	|	j|	j|	j qt|| sq|durz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rt|	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rt&|	}|du rt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qq|	jdkr$|	jd(kr$d}t	
|	j}t*t+d(||}d)D ]2} | |vrtd*| ,d+d|	j|	j  qʐq|dur|-|| q|	jdkr|	jd,krt./|	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 rd0}%n|"d/ }%|%d du r|%d d1v r,t0|"d2 pg dk rtd3|!|	j|	j|%d  qn|%d d4v rpt0|"d2 pHg d5k rtd6|!|	j|	j|%d  qn<|%d d7krt0|"d8 pg d5k rt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.rx   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   rP   )xrP   rP   rQ   <lambda>  r   z'preprocess_stylesheet.<locals>.<lambda>)r|   c                 S   s   g | ]}|d  qS )r   rP   )r   ZdeclarationrP   rP   rQ   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)Zallow_relativecontextZcontext_argsr   ZexternalzBInvalid media type %r the whole @import rule was ignored at %d:%d.)r   r   r   r   r   r8   rb   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.rA   @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_symbolsr  )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   messageZlower_at_keywordr   r   r   rx   r  r   r  r   Zadd_selectorZpseudo_elementPSEUDO_ELEMENTS	serializerZ   r   
cssselect2ZSelectorErrorlogr   r   r}   r   r   Zparse_media_queryr   r   r
   r   r   Zparse_rule_listpreprocess_stylesheetr  r   r    rv   dictr   r   Zadd_font_facer   Zparse_counter_style_namerY   )&r   r+   Zstylesheet_rulesr   r8   rb   r   r   r  r  Zlogger_levelcontentsZselectors_declarations	selectorsrD   rN   r  excr  r   Z	url_tupler   r   Zcontent_rulesdatar  rA   rf   rx   re   Zmargin_ruleZrule_descriptorsr|   r%   counterZdescriptor_nameZdescriptor_valuer  rP   rP   rQ   r.  x  s   





$







&














r.  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|pg D ]}||ddf qt| |||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CounterStyleZ_ua_counter_styleitemsZ_ua_stylesheetsrv   Z_ph_stylesheetsr   r7   r   r   r+   r&   )r=   Zuser_stylesheetsr?   r   r   rb   r,   Zformsr>   rE   r|   r}   rK   rP   rP   rQ   get_all_computed_styles\  s&    
r6  )FN)NNNN)F)NFNNNNF)9rq   collectionsr   	itertoolsr   loggingr   r   r,  r   Ztinycss2.astZtinycss2.nthrs   r   loggerr   r	   urlsr
   r   r   r   r   Zcomputed_valuesr   Z
propertiesr   r   r   r   Z
validationr   Zvalidation.descriptorsr   utilsr   r   r   r   r   r   r*  r    r&   rz   r~   r   r2   r5   r   r/  r   r   r^   r  r.  r6  rP   rP   rP   rQ   <module>   sX     .	0
  't   
w 
 e   