
    T-h                        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      Z+d Z,d Z-d Z.d$dZ/d Z0d Z1 G d de2      Z3 G d de2      Z4	 	 	 d%d Z5d! Z6	 d&d"Z7	 	 	 d'd#Z8y)(u  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                   L    e Zd ZdZd Zd
dZ	 	 ddZd Zd Zd Z	e
d	        Zy)StyleForz?Convenience function to get the computed styles for an element.c           	      0   i x| _         }i | _        || _        t        j                  d       t        |j                  ||j                        D ]h  \  }}|\  }}	}
|j                  |d fi       }t        |
|	      D ]:  \  }}}t        d|      }||f}|j                  |d      d   }|||k  s4||f||<   < j |j                  j                         D ]  }|D ]  \  }}}|j                  j                  |      D ]l  }|\  }}}}	|xs |}|j                  |j                  |fi       }|	D ]:  \  }}}t        ||      }||f}|j                  |d      d   }|||k  s4||f||<   < n  |j                   r|j                   j                  nd }| j#                  |j                  |j                  ||j                  |        |D ]3  \  }}|s	| j#                  |||j                  ||j                  |       5 | j                   j%                          y )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orderr0   r-   s                            ]/var/www/core.comfia.cic-ware.com/crm/lib/python3.12/site-packages/weasyprint/css/__init__.py__init__zStyleFor.__init__0   sv    354 !#45'<""$8$--(I 
	1#K.8+G\8#..CE,Cl-, 1(fj3HjI
$k2"YYt\:1=
%v)="(&.E$K1	
	1" ++88: 	KG4: 90v0 % 3 3G < 
9HDLAK\"3"B{K+66 ..<bBE4@ 90fj%;FJ%O
",k!:%*YYt\%B1%E
%-v1E*0&.E$K9
99 6=^^W^^11F$$%%D,>,>v9I % K	K6 %4 	O G[((++G!]]=M	 ) O	O 	##%    Nc                 
   | j                   j                  ||f      x}rcd|d   v r|d   dk(  rdD ]  }t        |d| <    t        |d         dk(  r0|d   \  }|j	                  d      r|d	k7  rdD ]  }t        |d
| <    |S )Ntabledisplayborder_collapsecollapse)topbottomleftrightpadding_r   ztable-ztable-captionmargin_)r2   r9   r   len
startswith)r@   rG   r0   rI   r"   rY   s         rT   __call__zStyleFor.__call__~   s    ))--w.DEE5E%	**u5F/G:/U> ;D/:EHTF+,;5#$) +%%h/G4N B >2=v./>rV   c           	          | j                         }| j                         }||k(  r||J d}	dt        d   i}
n|J ||df   }	||df   }
|j                  ||fi       }t	        |||	||
||      |||f<   y)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.

        N	font_size)get_cascaded_stylesget_computed_stylesr   r9   computed_from_cascaded)r@   rG   r-   r,   r0   r.   r/   rD   computed_stylesparent_style
root_stylecascadeds               rT   r>   zStyleFor.set_computed_styles   s     224224d?{2>!>L ^K8J %%%*64<8L(t4J"&&'=rB0FX|[*h1,-rV   c                 ^   | j                   D ]  \  }}}|j                  D ]  \  }}}|D ]~  }|\  }	}
}| j                  ||      s|xs |	}	| j                  j	                  ||
fi       }|D ]:  \  }}}t        ||      }||	f}|j                  |d      d   }|||k  s4||f||<   <    y )Nr+   r   )r3   
page_rules_page_type_matchr1   r7   r8   r9   )r@   	page_typerO   rP   rQ   _ruleselector_listrH   rR   rE   r0   page_selector_typerI   r&   rJ   rK   rL   rM   rN   s                      rT   add_page_declarationszStyleFor.add_page_declarations   s    04 	=,E6,6;6F6F =2}l - =HCK@K.@,,-?K&7&F; $ 5 5 @ @&4b!:8D =4D&*)?
)SJ&0+%>F).4)Fq)IJ)1Z65I.4fnd===	=rV   c                     | j                   S N)r1   r@   s    rT   rg   zStyleFor.get_cascaded_styles       $$$rV   c                     | j                   S rw   )r2   rx   s    rT   rh   zStyleFor.get_computed_styles   ry   rV   c                    | j                   d |j                   fvry| j                  d |j                  fvry| j                  d |j                  dk(  fvry| j                  d |j                  fvry| j                  | j                  \  }}}|.|j                  }|dz   |z
  }|dk(  r|dk(  S ||z  dk\  xr ||z   S ||j                  k7  ry|j
                  D ]0  \  }}||k7  r|dz   |z
  }|dk(  r|dk(  s y||z  dk\  s*||z  r0 y yy)NFr   r   T)r"   r#   r$   r%   r&   groups)rt   rq   abr&   r%   offset
group_names           rT   rp   zStyleFor._page_type_match   s@   ""4*@@##D)//+BB##D)//Q2F+GG""4*@@##/+11JAq$|!Q&'1fv{V6A:?3U6TU:~Vy~~%%.%5%5  !
E:%Q#$6FaK 17
aQR
  rV   rw   NNNN)__name__
__module____qualname____doc__rU   rd   r>   ru   rg   rh   staticmethodrp    rV   rT   r(   r(   .   sC    IL&\ KO<@:= %%  rV   r(   c                     | j                   r| j                   gng }| D ]*  }|j                  s|j                  |j                         , dj                  |      S )z9Return the text directly in the element, not descendants. )texttailappendjoin)rG   contentchilds      rT   get_child_textr      sL     'w||n"G '::NN5::&' 777rV   c                 N    d}| |v r|s|}|S | dk(  r|dk7  r|dk(  r|}|S ||z  }|S )N)text_decoration_colortext_decoration_styletext_decoration_thicknesstext_decoration_linenoner   )keyvalueparent_valuerm   text_propertiess        rT   text_decorationr      sX    
WO
o E L 
&	&6!$ L ,LrV   c           
   #   R  K   ddl m} | j                  dd      D ]=  }|j                  }	|	j	                  dd      j                  dd      d	   j                         }
|
dk7  rI|	j	                  d
d      j                         xs d}|j                  d      D cg c]  }|j                          }}t        j                  ||      s|	j                  dk(  r"t        |	      }t        |||||||      }| |	j                  dk(  s|	j	                  d      s ||	d      r	 ||	d      rt        |	d|      }|)	 t        ||d||||       @ yc c}w # t        $ r9}t        j                  d||       t        j                   d|       Y d}~d}~ww xY ww)zgYield the stylesheets in ``element_tree``.

    The output order is the same as the source order.

    r   )element_has_link_typerI   linktypeztext/css;r   r   mediar   all,)stringr.   url_fetcher
media_typefont_configcounter_stylero   href
stylesheet	alternateNT)urlr   _check_mime_typer   r   r   ro   z#Failed to load stylesheet at %s: %sError while loading stylesheet:exc_info)rA   r   	query_allr6   r9   splitstripr   evaluate_media_querytagr   r   r   r   r	   errordebug)r:   device_media_typer   r.   r   r   ro   r   wrapperrG   	mime_type
media_attrr   r   r   cssr   	exceptions                     rT   find_stylesheetsr      s     -",,Wf= $X''KK
399#qA!DJJL	
"[["-335>
6@6F6Fs6KL
!!#LL11%9JK;;'! %W-G '4E'}%	'C
 I[[F"w{{6':(,?)';?$Wfh?DX k)-:K$/}#-	/ /;$X M6 ( XLL!FiXLL!BYWWXsI   BF'E2AF'F'#F'E"	F'"	F$+.FF'F$$F'c              #     K   fd}| j                         D ]  }d}|j                  d      }|r| |||      f |s)d}|j                  dk(  rdD ]Q  \  }}d}d| | dfD ]-  }	|j                  |	      sd	| d
|j                  |	       d} n |sE| |||      f S |j                  d      r"d|j                  d       d}| |||      f |j                  d      r!d|j                  d       }| |||      f |j                  d      sd|j                  d       }| |||      f +|j                  dk(  r| ||d      f I|j                  dk(  rL|j                  dd      j                         }
|
dk(  r| ||d      f |
dv s| ||d|
       f |j                  dk(  r|j                  d      r| ||d|j                  d             f |j                  d      r| ||d|j                  d             f |j                  d      s'|j                  d      j	                         }|j                  d       }|j                  d!      }|s|r|d"d j	                         }	 t        |      }d#d$d%d&d'd(d)d*}|r|d+z  }n|r|d+z  }t        d"t        d,|            }| ||d-||          f |j                  d/k(  r|j                  d0      r | ||d1|j                  d0       d      f |j                  d2      rd|j                  d2      }|j                         r|dz  }|j                         D ]+  }|j                  d3v s| ||d4| d5| d6| d7| d8	      f - |j                  d9      r9|j                  d9      }|j                         r|dz  }| ||d:| d;|       f |j                  d<      r9|j                  d<      }|j                         r|dz  }| ||d=| d>|       f |j                  d?      rEd@|j                  d?       }|j                  d?      j                         r|dz  }| |||      f |j                  dA      rEdB|j                  dA       }|j                  dA      j                         r|dz  }| |||      f |j                  d      r"d|j                  d       d}| |||      f |j                  d      r!d|j                  d       }| |||      f |j                  dC      r!dD|j                  dC       }| |||      f |j                  dE      sodF|j                  dE       d}| |||      f |j                  dGv r||j                  dd      j                         }
|
dk(  r| ||d      f n|
dv r| ||d|
       f |j                  d      r"d|j                  d       d}| |||      f |j                  d      r!d|j                  d       }| |||      f |j                  dHv s^|j                  dA      rEdB|j                  dA       }|j                  dA      j                         r|dz  }| |||      f |j                  d3v s|j                  d?      sd@|j                  d?       }|j                  d?      j                         r|dz  }| |||      f |j                  dIk(  rL|j                  dd      j                         }
|
dk(  r| ||d      f a|
dv sg| ||d|
       f y|j                  dJk(  rZ|j                  d?      sd@|j                  d?       }|j                  d?      j                         r|dz  }| |||      f |j                  dKk(  r#dL}|j                  d      r	 t        |j                  d            }|j                  d      |j                  dM      fdNk7  r|d"k\  rA| ||dF|dOz   d      f n,|d"k(  r| ||dP      f n|d"kD  r| ||dB|dOz
   d      f |j                  d?      rEd@|j                  d?       }|j                  d?      j                         r|dz  }| |||      f |j                  d      s| ||d|j                  d             f 	|j                  dQv r|j                  dRk7  s%|j                  dSd      j                         dTk(  s	X|j                  dd      j                         }
|
dUv r| ||dV      f |j                  d9      r9|j                  d9      }|j                         r|dz  }| ||d:| d;|       f |j                  d<      r9|j                  d<      }|j                         r|dz  }| ||d=| d>|       f |j                  d?      rEd@|j                  d?       }|j                  d?      j                         r|dz  }| |||      f |j                  dA      rEdB|j                  dA       }|j                  dA      j                         r|dz  }| |||      f |j                  dWv s
|j                  dE      s
| ||dF|j                  dE       dX      f |j                  dYk(  r5|j                  dZ      s0| ||d[|j                  dZ       d\      f R|j                  d]k(  sc|j                  d^      sv| ||d[|j                  d^       d_      f  y# t        $ r t        j                  d.|       Y w xY w# t        $ r t        j                  d.|       Y w xY ww)`a  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                 8    t        j                  |      }| |fS rw   )tinycss2parse_blocks_contents)rG   style_attributerH   r.   s      rT   check_style_attributez4find_style_attributes.<locals>.check_style_attribute1  s     55oFh..rV   )r   r   r   rI   r   r   r   body))heightr\   )r   r]   )widthr^   )r   r_   Nmarginzmargin-:px
backgroundzbackground-image:url()bgcolorzbackground-color:r   zcolor:centerztext-align:centerdivalignr   middle)r   r^   r_   justifyztext-align:fontcolorfacezfont-family:size+-r   zx-smallsmallmediumlargezx-largezxx-large48px)r   r                  r   r   z
font-size:zInvalid value for size: %srX   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   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)iterr9   r   lowerr   rc   intmaxmin
ValueErrorr	   warningisdigit)treerC   r.   r   rG   rE   r   partpositionpropr   r   relative_plusrelative_minus
font_sizesr   
subelementr   r   s     `                rT   r5   r5   '  s>    / 99; q.!++g.4WoNNN#;;& #; 	Wh #'%dV_
&.AB D{{4(,3H:Qw{{4?P>QQS*T #%'<Wo'VVV	W {{<($9'++l:S9TTU"V!#8/#RRR{{9%$5gkk)6L5M"N!#8/#RRR{{6"$*7;;v+>*?"@!#8/#RRR[[H$4W>QRRR[[E!KK,224E !#8BU#VVV@@!#8KPUwBW#XXX[[F"{{7#!#8vgkk'&:%;<$> > >{{6"!#8|GKK,?+@A$C C C{{6"{{6*002 $ 4!%!5 N8>>+DBt9D
 %"#"$%!"J %	'	q#a,/D%'<:j.>-?!@(B B B[[G#{{=)!#8w{{=/I.J"M$O O O{{=)%kk-8&&(4'K"),,. >J!~~5)+@&+K= 9--8M :++6- 8..9]!=,> > >> {{8$ X.>>#dNF!#8|F8>&J$L L L{{8$ X.>>#dNF!#8{6(/&J$L L L{{7#$*7;;w+?*@"A;;w'//1#t+O!#8/#RRR{{8$$+GKK,A+B"C;;x(002#t+O!#8/#RRR{{<(+GKK,E+FaH  !#8/#RRR{{9%$5gkk)6L5M"N!#8/#RRR{{=)$1'++m2L1M"N!#8/#RRR{{8$$1'++h2G1H"K!#8/#RRR[[IIKK,224E !#80$2 2 2@@!#8KPUwBW#XXX{{<($9'++l:S9TTU"V!#8/#RRR{{9%$5gkk)6L5M"N!#8/#RRR{{00;;x((/H0E/F&GO{{8,446'4/%'<Wo'VVV;;,.{{7+,27;;w3G2H*I";;w/779+t3O)+@#_,6 6 6[[I%KK,224E !#8BU#VVV@@!#8KPUwBW#XXX[[E!{{7#$*7;;w+?*@"A;;w'//1#t+O!#8/#RRR[[D D{{6"Gw{{623D G$gkk)&<=M19%'<=
"!=(? ? ?!#84$6 6 6!#8wtaxj3$5 5 5{{7#$*7;;w+?*@"A;;w'//1#t+O!#8/#RRR{{7#!#8vgkk'&:%;<$> > >[[ G Gw&KK+113w>GR066800%'<!8(: : :;;x($[[2F~~'$%'<<x~fX!N(P P P;;x($[[2F~~'$%'<;vhofX!N(P P P ;;w'(.w{{7/C.D&EO{{7+335'4/%'<Wo'VVV;;x((/H0E/F&GO{{8,446'4/%'<Wo'VVV;;"<<{{8,)+@#+GKK,A+B C1 2,3 3 3 [[D {{7#!#8.w{{7/C.D E5 5$6 6 6 [[D {{7#!#8.w{{7/C.D E- -$. . .]q.j " GNN#?FGh " GNN#?FGs   A8o?<o?Bo?!Bo?+Bo? Ao?n3$Co?Ho?C-o?7A$o?o?0Bo? 2o?4A*o?o9Co?A"o?1E?o?2o?Ao?	1o?<o?$o?3oo?oo?o<8o?;o<<o?c                 J    | dk(  ry| dk(  r|sy| dk(  r|sy| dk(  ry| dk(  sJ y)	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   r   )rP   rK   s     rT   r8   r8   )  sE     	6	*	8	J	8	rV   c                 t   t        |      sy|j                  dk7  rg }t        |j                        D ]B  \  }}|j                  dk(  r|j                  t        | ||             2|j                  |       D t        j                  j                  |j                  |j                  |j                  |      }t        | ||      xs |fS t        |      d   }|j                  d      j                   j#                  dd      }|}g }	| |   xs |D ]%  }
t        | |
|      }|	j                  ||
fn|       ' |	S )z)Return token with resolved CSS variables.Nvarfunctionr   r   r   _)r   
lower_name	enumerate	argumentsr   extendresolve_varr   r   astFunctionBlocksource_linesource_columnr&   r   popr   replace)computedtokenrk   r  iargumentargsvariable_namedefaultcomputed_valuer   resolveds               rT   r  r  @  s4   e$5 	$U__5 	+KAx}}
*  Xx!NO  *		+
 **u22EJJ	K8UL9EeXE% #DHHQK%%--c37MGN=)4W Jx=(*:uhIJ rV   c                   "    e Zd ZdZd Zd Zd Zy)AnonymousStylez(Computed style used for anonymous boxes.c                     | j                  dddddd       || _        | | _        |r|j                  | _        y i i d| _        y )Nr   )border_top_widthborder_bottom_widthborder_left_widthborder_right_widthoutline_widthratio_chratio_ex)updaterk   	specifiedcache)r@   rk   s     rT   rU   zAnonymousStyle.__init__\  sQ     	 !#$!""#
 	 )%++DJ&(b9DJrV   c                 R    t        | j                        }|j                  |        |S rw   )r)  rk   r3  r@   copys     rT   r8  zAnonymousStyle.copyn  s#    d//0DrV   c                    |t         v s|d d dk(  r| j                  |   x}| |<   |S |dk(  r| j                  |   x}| |<   |S |d d dk(  r*t        |t        |   | j                  |   d      x}| |<   |S t        |   x}| |<   |S )Nr   __page   text_decoration_F)rm   )r   rk   r   r   )r@   r   r   s      rT   __missing__zAnonymousStyle.__missing__s  s    )s2Aw$ $ 1 1# 66EDI  F] $ 1 1# 66EDI  "X++ /^C($*;*;C*@5!R REDI  !/s 33EDIrV   Nr   r   r   r   rU   r8  r>  r   rV   rT   r)  r)  Z  s    2:$
rV   r)  c                   "    e Zd ZdZd Zd Zd Zy)ComputedStylez,Computed style used for non-anonymous boxes.c                     i | _         || _        || _        |d u | _        || _        || _        || _        || _        |r|j                  | _        y i i d| _        y )Nr0  )	r4  rk   rm   is_root_elementrG   r0   rl   r.   r5  )r@   rk   rm   rG   r0   rl   r.   s          rT   rU   zComputedStyle.__init__  s^    ( +t3&$ %++DJ&(b9DJrV   c                     t        | j                  | j                  | j                  | j                  | j
                  | j                        }|j                  |        | j                  j                         |_        |S rw   )
rA  rk   rm   rG   r0   rl   r.   r3  r4  r8  r7  s     rT   r8  zComputedStyle.copy  s]    t}}dllD<L<LOOT]], 	D,,.rV   c                    |dk(  r| d    n
|dk(  r| d    | j                   }|| j                  v r#| j                  |   d   }t        |t              }n|t        v s|d d dk(  rd}nd}d	}|dk(  r|d}|rjg }|j
                  D ]4  }t        | ||      }||j                  |       $|j                  |       6 |j                  d
d      }	 |j                  ||      }|dk(  r!|d d dk(  rg nt        |   }|t        vr|| |<   n|dk(  r
||   x| |<   }|d d dk(  r'|%t        ||||   || j                  v       }|| v r2| |= n.|dk(  r|dk(  r|dn|d   }|| v r| |= n|dv r|| j                  |<   || v r| |   S |t         v rt!        |   | ||      }|| |<   |S # t        $ r. |t        v r|||   x| |<   }nt        |   }|t        vr|| |<   Y w xY w)Nfloatr  rY   r   r   r:  inheritinitialFr  r   r<  r=  r;  autor   )r  rF  rY   )rk   rm   
isinstancer   r   tokensr  r   r  r  solver   r   r   r   r4  r   )	r@   r   rk   r   pendingsolved_tokensr   rK  original_keys	            rT   r>  zComputedStyle.__missing__  s`   '>IM(($--MM#&q)E 0G i3r7d?!!GI,"6EM 1$T5,?>!((/!((01 ;;sC0L
*M<@ Ibq'T/B~c/BE..!S	i ,S 11DIs8))l.F $CS0A3$--CWXEd{IF]u '.BL4HEd{I44 #(DNN3$;9$$&s+D#u=ES	c ! *)#(@(4S(99DI*3/E"66$)S	*s   F 4GGNr?  r   rV   rT   rA  rA    s    6:XrV   rA  c                 z    |s|t        |      S t        ||| |||      }|r|d   r|j                  |d          |S )zCGet a dict of computed style mixed from parent and cascaded styles.anchor)r)  rA  collect_anchor)rG   rm   rk   r0   rl   r.   r/   rI   s           rT   ri   ri     sO     0l++hj(LEE(O''h8LrV   c           	         t        t        | j                              }g }|s|j                  dddddg dd       |S |rdddddg dd}|d   j                  dk(  r(|j                  d      }|j                  |d<   d|d   d<   t        |      dk(  ry|s|j                  |       |S |r|j                  d      }|j                  d	k7  ry|j                  d
k(  r|sy|d   j                  dk(  r`|j                  d      }|j                  }|dv r$|d   r	|d   |k7  ry||d<   |d   dxx   dz  cc<   |dv rd||<   |d   dxx   dz  cc<   y|d   j                  dk(  r/|j                  d      }|j                  dk7  ryt        |j                        D ]J  \  }	}
|
j                  dk(  s|
j                  dk(  s&|j                  d|	dz
   }|j                  |	dz   d } n |j                  }d}t        j                  j                  |      }|y|L|D cg c]  }|j                  dvr| }}t        |      dk7  ry|\  }|j                  dk7  ry|j                  }g |||d<   |d   dxx   dz  cc<   |r|d   dxx   dz  cc<   y|j                  dk(  r|rt        |d         rny|r|j                  |       |r|S c c}w )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&   rE   r   identr&   r   rE   literalr   )r^   r_   r"   r   )r#   r$   Tr  nthof)comment
whitespacer%   r   )listr   preluder   r   r  r   rb   lower_valuer&   r  r  r   rV  	parse_nthany)rulerK  	page_datatypesr   rU  rT  pseudo_classr  r!  r"  rV  group
nth_valuess                 rT   parse_page_selectorsre    sF   $ #DLL12FI 4$4 	5 
4$4 !9>>W$JJqME!KKE&M&'E- #v;!U#jjmG||y(}}#!9>>W,"JJqME#(#4#4L#'88 =U6]l-J#'(4fm,Q/14/ %);;.2l+m,Q/14/ L I AY^^z1%zz!}H}}-#'01C1C'D %8#==G3$8N"*"4"4Va!e"<C$,$6$6q1uv$>E!	% '00 $!)!7!7!<J!)#(/4!L&+$zz1JJ "!L !L u:?#'!& ::0#' %%9z%95%9E'N -(+q0+m,Q/14/#%c%"67E H 	i l 7!Ls    Kc	                    |D ]i  }	t        |	dd      |	j                  dk(  r6t        j                  d|	j                  |	j
                  |	j                         |	j                  dk7  rf|	j                  dk7  r-t        j                  d|	|	j                  |	j
                         |	j                  dk(  r.	 t        }
t        j                  |	j                        }t        t        |||	j                              }|rt        |d	 
      }|D ]  \  }}|D cg c]  }|d   	 }}|D ]  }|j!                  ||       |j"                  t$        vs(t        j&                  |	j                        }|j"                  j)                  d      r+t*        }
t-        j.                  d| d|j"                         t-        j.                  d| d|j"                          d} nd}|	j                  dk(  rz|	j                  dk(  rj|rKt        j                  dt        j&                  |	j                        |	j                  |	j
                         Mt3        |	j                        }d}|rj|d   j                  dk(  r4t5        ||d   j6                  dd|	j                  |	j
                  f      }n$t9        |d   |      }|r|d   d   dk(  r|d   d   }|t;        j<                  |dd       }|Kt        j                  dt        j&                  |	j                        |	j                  |	j
                         9t;        j>                  ||       sQ|U	 tA        ||| ||||       j|	j                  dk(  r|	j                  dk(  rt;        j<                  |	j                        }|Kt        j                  dt        j&                  |	j                        |	j                  |	j
                         d}t;        j>                  ||       st        jH                  |	j                        }tK        | |||||||d 	       C|	j                  dk(  r^|	j                  d!k(  rNtM        |	      }|Kt        j                  d"t        j&                  |	j                        |	j                  |	j
                         d}|D ]  }|jO                  d#      }tQ        d8i |}t        j                  |	j                        }t        t        ||            }|r|d|fg}|jS                  |	||f       |D ]z  }|j                  dk7  s|j                  t        t        |t        j                  |j                                    }|sT|d$|j                   |fg}|jS                  |||f       |  |	j                  dk(  r|	j                  d%k(  rd}t        j                  |	j                        }tU        tW        d%||            } d&D ]E  }!|!| vst        j                  d'|!jY                  d(d      |	j                  |	j
                          O |T|j[                  | |       h|	j                  dk(  r|	j                  d)k(  rt]        j^                  |	j                  |      }"|"Kt        j                  d*t        j&                  |	j                        |	j                  |	j
                         d}t        j                  |	j                        }dddddddddd+	}#tW        d)||      } | D ]
  \  }$}%|%|#|$<    |#d,   d-}&n|#d,   }&|&d   |&d   d.v rGta        |#d/   xs g       dk  rt        j                  d0|"|	j                  |	j
                  |&d          |&d   d1v rGta        |#d/   xs g       d2k  r}t        j                  d3|"|	j                  |	j
                  |&d          |&d   d4k(  rCta        |#d5   xs g       d2k  r.t        j                  d6|"|	j                  |	j
                         7|#||"<   >t        j                  d7|	|	j                  |	j
                         l yc c}w # t,        j.                  $ r"}t        j0                  
d|       Y d}~d}~ww xY w# tB        $ r9}t        jD                  d||       t        jF                  d|       Y d}~d}~ww xY w)9zDDo 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                     | d   S )Nr   r   )xs    rT   <lambda>z'preprocess_stylesheet.<locals>.<lambda>  s
    ad rV   )r   r   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_argsexternalzBInvalid media type %r the whole @import rule was ignored at %d:%d.)r   r   r   r   r   r<   ro   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.rE   @z	font-face)src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_symbolsrt  )NsymbolicN)cyclicfixedr}  r{  zHIn counter style %r at %d:%d, counter style %r needs at least one symbol)
alphabeticnumericr   zIIn counter style %r at %d:%d, counter style %r needs at least two symbolsadditiver|  zZIn counter style %r at %d:%d, counter style "additive" needs at least two additive symbolszUnknown rule %s at %d:%dr   )1getattrr   r	   r  r  r  messagelower_at_keywordr   r   r   r   rZ  r   r[  r   add_selectorpseudo_elementPSEUDO_ELEMENTS	serializerc   r   
cssselect2SelectorErrorlogr   r   r   r   r   parse_media_queryr   r   r   r   r   parse_rule_listpreprocess_stylesheetre  r  r!   r   dictr   r  add_font_facer   parse_counter_style_namerb   )'r   r.   stylesheet_rulesr   r<   ro   r   r   rp  r_  logger_levelcontentsselectors_declarations	selectorsrH   declarationrR   r[  excrK  r   	url_tupler   r   content_rulesdatar`  rE   rt   r   rs   margin_rulerule_descriptorsr   r&   counterdescriptor_namedescriptor_valuert  s'                                          rT   r  r  x  s    ! ]<4D)1yyG#.$$d&8&8$,,H yyI%$$04$**D,>,>@ 99(( &#99$,,G)-+HhM*O& *-4.N.D*3I ./	<>J(L/:KN(L (L(1 FH#00<H'66oM*2*<*<T\\*J#+#:#:#E#Ec#J38L*4*B*B*+G9 5L+3+B+B*C)E+F %F
 +5*B*B*+G9 5C+3+B+B*C)E+F %FF *.%.( &*N
 YY)#(=(=(I;&&t||4$$d&8&8	:
 &t||4FC!9>>X-" &)//% 2&*&6&68J8J%KMC
 !(q	8 <I Yq\!_
%B'l1o{!33F12J?E}C&&t||4$$d&8&8	:
  55e=NOX[EV$/} 'J@ YY)#(=(=(H!33DLLAE}B&&t||4$$d&8&8	:
 !N 55e=NO$44T\\BM!!8]KKtM YY)#(=(=(G'-D|A&&t||4$$d&8&8	:
 !N! V	'mmM:%5%B	%B""88F#$;Hg$NO&149K%L$MM%%t]L&IJ#* 
VK"''948K8K8S #'(?  66{7J7JK)M $NL $'1[-I-I,J)K.*0 )1 #));|*TU
VV, YY)#(=(=(L!N44T\\BG#&{HgF H- M..NNMC-t/?/?ASASU M *--.>LYY)#(=(=(P44T\\=QD|@&&t||4d6F6F&&	(
 !N44T\\BG  $(
G  67 4 6F <1!1+;(< x (1 *ay !9 ??79-34q8I $"2"2D4F4Fq	S !AY";;79-34q8J $"2"2D4F4Fq	S !AY*,7#56<"=AB !$"2"2D4F4F	H
 !")M$ NN*d&&(:(:<w]<2(L( ++ 

<)NPSTV ( XLL!GiXLL!BYWWXsJ   6A!a6a1#+a6Ba6b.1a66b+	b&&b+.	c07.c++c0c           	      N   g }|t        j                         }| j                         D ]  }	|	j                         D ]
  \  }
}|||
<    ! | j	                  |      xs g D ]  }|j                  |ddf        |r-| j                         xs g D ]  }|j                  |ddf        t        | j                  | j                  | j                  | j                  |||      D ]  }|j                  |ddf        |xs g D ]  }|j                  |ddf        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   CounterStyle_ua_counter_styleitems_ua_stylesheetsr   _ph_stylesheetsr   r:   r   r   r.   r(   )rA   user_stylesheetsrC   r   r   ro   r/   formsrB   rI   r   r   rO   s                rT   get_all_computed_stylesr  \  sK    F --/'') '++- 	'JC!&M#	'' &&u-3 3ulD123**,2 	8EMM5(I67	8!  $//43C3CMM;zC / 	uh-./ #(b -ufd+,- D&"68HIIrV   )FNr   )F)NFNNNNF)9r   collectionsr   	itertoolsr   loggingr   r   r  r   tinycss2.asttinycss2.nthr   r   loggerr	   r
   urlsr   r   r   r   r   computed_valuesr   
propertiesr   r   r   r   
validationr   validation.descriptorsr   utilsr   r   r   r   r   r   r  r!   r(   r   r   r   r5   r8   r  r  r)  rA  ri   re  r  r  r   rV   rT   <module>r     s    #  "      , @ @ % / T T / : 
( CE j jZ&-X`.D.4$T $NqD qh IM59,0rn */a<H OTMQ9>JrV   