o
    ½ÙøiÛI  ã                   @   s|   d dl 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	 e  
d¡jZdd	d
„ZG dd„ dƒZdd„ Zdd„ ZdS )é    N)Úurlparse)Ú	parse_nth)Úascii_loweré   )Úparser)ÚSelectorErrorz	[^ 	
]+c                 C   s   dd„ t  | |¡D ƒS )a–  Compile a (comma-separated) list of selectors.

    :param input:
        A string, or an iterable of tinycss2 component values such as
        the :attr:`tinycss2.ast.QualifiedRule.prelude` of a style rule.
    :param namespaces:
        A optional dictionary of all `namespace prefix declarations
        <http://www.w3.org/TR/selectors/#nsdecl>`_ in scope for this selector.
        Keys are namespace prefixes as strings, or ``None`` for the default
        namespace.
        Values are namespace URLs as strings.
        If omitted, assume that no prefix is declared.
    :returns:
        A list of opaque :class:`compiler.CompiledSelector` objects.

    c                 S   ó   g | ]}t |ƒ‘qS © )ÚCompiledSelector©Ú.0Úselectorr	   r	   ú`/home/develop/edictos_py/central_edictos/env/lib/python3.10/site-packages/cssselect2/compiler.pyÚ
<listcomp>   s    z)compile_selector_list.<locals>.<listcomp>)r   Úparse)ÚinputÚ
namespacesr	   r	   r   Úcompile_selector_list   s   r   c                   @   s   e Zd ZdZdd„ ZdS )r
   z&Abstract representation of a selector.c                 C   s
  t |jƒ}|dk| _tttdœ}td| |i ƒ| _|j| _|j	| _	d | _
d | _d | _d | _d | _d| _|j}t|tjƒr?|j}|jD ]@}t|tjƒrO|j| _
qBt|tjƒrZ|j| _qBt|tjƒri|j| _|j| _qBt|tjƒrt|j| _qBt|tjƒr‚|jdkr‚d| _qBd S )NÚ0)Úsplit_whitespacer   r   zlambda el: FÚlangT)Ú_compile_nodeÚparsed_treeÚnever_matchesr   r   r   ÚevalÚtestÚspecificityÚpseudo_elementÚidÚ
class_nameÚ
local_nameÚlower_local_nameÚ	namespaceÚrequires_lang_attrÚ
isinstancer   ÚCombinedSelectorÚrightÚsimple_selectorsÚ
IDSelectorÚidentÚClassSelectorÚLocalNameSelectorÚNamespaceSelectorÚAttributeSelectorÚname)ÚselfÚparsed_selectorÚsourceÚeval_globalsÚnodeÚsimple_selectorr	   r	   r   Ú__init__$   sB   

ý





€ôzCompiledSelector.__init__N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r5   r	   r	   r	   r   r
   "   s    r
   c              
   C   sf	  t | tjƒr{t| jƒ}|dkrdS |dkr+| jdv rd}nD| jdv r%d}n<td| jƒ‚| jdkr7d	|› d
�}n*| jdkrCd|› d�}n| jdkrOd|› d�}n| jdkr[d	|› d�}ntd| jƒ‚t| jƒ}|dkrldS |dkrr|S d|› d|› d�S t | tjƒr¬dd„ dd„ | j	D ƒD ƒ}t
|ƒdkr˜|d S d|v rždS |rªd dd„ |D ƒ¡S dS t | tjƒrÑdd„ dd„ | jD ƒD ƒ}|sÃdS dd  d!d„ |D ƒ¡› d�S t | tjƒ�rg }| jD ]:}t|jjƒ}|dkrêqÝ|jdkròd"}n|jdkrúd#}n|jdk�rd$}n|jdk�rd%}| d&|› d'|› d(�¡ qÝd  |¡S t | tjtjfƒ�rCd)d„ d*d„ | jD ƒD ƒ}|�s9dS d  d+d„ |D ƒ¡S t | tjƒ�rb| j| jk�rWd,| j›�S d-| j›d.| j›d�S t | tjƒ�rod/| j›�S t | tjƒ�r|| j›d0�S t | tjƒ�r‰d1| j›�S t | tjƒ�r”| jd2u�r’| j�rÌ| j| jk�r®t d3| j› d4| j› �ƒ}n;d3| j› d4| j› �}	d3| j› d4| j› �}
d|	›d.|
›d�}n| j| jk�rÙt | jƒ}n| j| j}	}
d|	›d.|
›d�}| j!}d5|› d6�}| j"d7u �r | #¡ }|d87 }| j$d2u �r|› d9�S | j$d:k�r|› d;|› d<|›�S | j$d=k�r;t
| %¡ ƒdk�s1| &¡ |k�r3dS |›d>|› d�S | j$d?k�rT|› d;|› d<|›d |› d@|dA ›d�
S | j$dBk�rg|�re|› d@|›d�S dS | j$dCk�rz|�rx|› dD|›d�S dS | j$dEk�rŒ|�rŠ|›dF|› �S dS tdG| j$ƒ‚t'‚t | tj(ƒ�rc| jdHv �r·t)dIdJdKƒ}|dL7 }| jdMk�rµ|dN7 }|S | jdOk�rÝt)dPdQdRdSdTƒ}t)dUdVdWƒ}t)dIdJdKƒ}d|› dX|› dY|› dZ�S | jd[k�rút)dPdQdRdSdTƒ}t)dUdVdWƒ}d|› d\|› d]�S | jd^k�rt)dQdVƒ}t)dTƒ}d|› d_|› d`�S | jdav �rdS | jdbv �r"dcS | jddk�r*deS | jdfk�r2dgS | jdhk�r;	 diS | jdjk�rD	 dkS | jdlk�rLdmS | jdnk�rU	 doS | jdpk�r]dqS tdr| jƒ‚t | tj*ƒ�r¬| jdsk�rÇg }dtd„ | j+D ƒ}|�r½| ,d¡}|j-duk�r�| |j.¡ n|j-dvk�rž| t/|j!ƒ¡ ntdwƒ‚|�rº| ,d¡}|j-duk�rº|j!dxk�rºtdwƒ‚|�s}d  dyd„ |D ƒ¡S g }g }|}| j+D ]}|j-duk�rç|j!dzk�rç||u �rç|}�qÐ| |¡ �qÐ|�rAd d{d„ t 0|¡D ƒ¡}| jd|k�rd}|› d(�}n-| jd~k�rd|› d(�}n | jd€k�r%d�|› d‚�}n| jdƒk�r2d„|› d‚�}ntdr| jƒ‚|d…|› d†�7 }n8||u �rOtd‡| j› dˆ�ƒ‚| jd|k�rXd‰}n!| jd~k�radŠ}n| jd€k�rjd‹}n| jdƒk�rsdŒ}ntdr| jƒ‚t1|ƒ}|d2u �r‹td‡| j› dˆ�ƒ‚|\}}|d }|dk�r d|› d�|› �S dŽ|› d�|› d�|› d‘�S t2t-| ƒ| ƒ‚)’zãReturn a boolean expression, as a Python source string.

    When evaluated in a context where the `el` variable is an
    :class:`cssselect2.tree.Element` object, tells whether the element is a
    subject of `selector`.

    r   Ú1)ú ú>zel.parent is not None)ú~ú+zel.previous is not NonezUnknown combinatorr;   zany((z) for el in el.ancestors)r<   znext(el is not None and (z) for el in [el.parent])r>   z) for el in [el.previous])r=   z!) for el in el.previous_siblings)ú(z) and (ú)c                 S   ó   g | ]}|d kr|‘qS ©r:   r	   ©r   Úexprr	   r	   r   r   }   ó
    ýz!_compile_node.<locals>.<listcomp>c                 S   r   r	   )r   r   r	   r	   r   r   ~   s    ÿÿr   r   z and c                 s   ó   � | ]	}d |› d�V  qdS ©r?   r@   Nr	   )r   Úelr	   r	   r   Ú	<genexpr>‡   ó   € z _compile_node.<locals>.<genexpr>c                 S   rA   rB   r	   rC   r	   r	   r   r   Œ   rE   c                 S   ó   g | ]}t |jƒ‘qS r	   ©r   r   r   r	   r	   r   r   �   ó    ÿÿznot (z or c                 s   rF   rG   r	   rC   r	   r	   r   rI   “   rJ   zlist(el.iter_subtree())[1:]zel.iter_children()z!list(el.iter_next_siblings())[:1]zel.iter_next_siblings()z(any(z for el in ú))c                 S   rA   )r   r	   rC   r	   r	   r   r   ¨   rE   c                 S   rK   r	   rL   r   r	   r	   r   r   ©   rM   c                 s   rF   rG   r	   rC   r	   r	   r   rI   ¯   rJ   zel.local_name == zel.local_name == (z if el.in_html_document else zel.namespace_url == z in el.classesz	el.id == NÚ{Ú}zel.etree_element.get(z, "")Fz.lower()z in el.etree_element.attribú=z  in el.etree_element.attrib and z == z~=z in split_whitespace(z|=z.startswith(ú-z^=z$=z
.endswith(z*=z in zUnknown attribute operator)Úlinkzany-linkú
local-linkÚaÚarearS   z. and el.etree_element.get("href") is not None rT   z5and not urlparse(el.etree_element.get("href")).schemeÚenabledÚbuttonr   ÚselectÚtextareaÚoptionÚoptgroupÚmenuitemÚfieldsetzS and el.etree_element.get("disabled") is None  and not el.in_disabled_fieldset) or(z3 and el.etree_element.get("disabled") is None) or (z. and el.etree_element.get("href") is not None)ÚdisabledzT and (el.etree_element.get("disabled") is not None  or el.in_disabled_fieldset)) or(z2 and el.etree_element.get("disabled") is not None)Úcheckedz„ and el.etree_element.get("checked") is not None and  ascii_lower(el.etree_element.get("type", ""))   in ("checkbox", "radio")) or (z2 and el.etree_element.get("selected") is not None))ÚvisitedÚhoverÚactiveÚfocuszfocus-withinzfocus-visibleÚtargetztarget-withinÚcurrentÚpastÚfutureÚplayingÚpausedÚseekingÚ	bufferingÚstalledÚmutedzvolume-lockedz
user-validzuser-invalidÚhost)ÚrootÚscopezel.parent is Nonezfirst-childzel.index == 0z
last-childz&el.index + 1 == len(el.etree_siblings)zfirst-of-typezKall(s.tag != el.etree_element.tag    for s in el.etree_siblings[:el.index])zlast-of-typezOall(s.tag != el.etree_element.tag    for s in el.etree_siblings[el.index + 1:])z
only-childzlen(el.etree_siblings) == 1zonly-of-typez_all(s.tag != el.etree_element.tag or i == el.index    for i, s in enumerate(el.etree_siblings))Úemptyz0not (el.etree_children or el.etree_element.text)zUnknown pseudo-classr   c                 S   s   g | ]	}|j d vr|‘qS ))Ú
whitespaceÚcomment)Útype)r   Útokenr	   r	   r   r   9  s
    
ÿr)   ÚstringzInvalid arguments for :lang()ú,c                 s   s&   � | ]}d |›d|d ›d�V  qdS )zel.lang == z or el.lang.startswith(rR   r@   Nr	   )r   r   r	   r	   r   rI   H  s
   € ÿ
ÿÚofc                 s   s   � | ]}t |jƒV  qd S ©NrL   r   r	   r	   r   rI   W  s
   € ÿ
ÿz	nth-childz)sum(1 for el in el.previous_siblings if (znth-last-childzBsum(1 for el in    tuple(el.iter_siblings())[el.index + 1:]   if (znth-of-typez@sum(1 for s in (      el for el in el.previous_siblings     if (z5))    if s.etree_element.tag == el.etree_element.tag)znth-last-of-typezYsum(1 for s in (      el for el in      tuple(el.iter_siblings())[el.index + 1:]     if (zif (z) else float("nan")zInvalid arguments for :z()zel.indexz%len(el.etree_siblings) - el.index - 1zPsum(1 for s in el.etree_siblings[:el.index]    if s.tag == el.etree_element.tag)zTsum(1 for s in el.etree_siblings[el.index + 1:]    if s.tag == el.etree_element.tag)z) == z/next(r == 0 and n >= 0    for n, r in [divmod((z) - ú, z)]))3r$   r   r%   r   ÚleftÚ
combinatorr   r&   ÚCompoundSelectorr'   ÚlenÚjoinÚNegationSelectorÚselector_listÚRelationalSelectorr   r   ÚappendÚMatchesAnySelectorÚSpecificityAdjustmentSelectorr+   r!   r    r,   r"   r*   r   r(   r)   r-   r.   Ú
lower_nameÚreprÚvalueÚcase_sensitiveÚlowerÚoperatorÚsplitÚstripÚNotImplementedErrorÚPseudoClassSelectorÚhtml_tag_eqÚFunctionalPseudoClassSelectorÚ	argumentsÚpopru   Úlower_valuer   r   r   Ú	TypeError)r   Úleft_insider|   r&   Úsub_expressionsÚrelative_selectorÚ
expressionÚelementsÚkeyr‹   r.   r‰   Úattribute_valuer   r   ÚgrouprU   r[   ÚlangsÚtokensrv   Únthr‚   Úcurrent_listÚargumentÚcountÚresultÚbÚBr	   r	   r   r   H   s@  





ÿ

ÿ

þÿþÿ



ÿþÿ
ÿÿ
ÿÿÿ"ÿþÿÿþþÿÿÿ
ÿþýÿ
ÿþÿ
ýÿÿÿÿÿ

õ
þ


þ
ÿþÿþÿýÿ
ÿÿÿ
ÿ
ÿÿÿÿr   c                  G   sj   t | ƒdkrd| d › �}d| d ›d|›d�S d dd	„ | D ƒ¡}d d
d	„ | D ƒ¡}d|› d|› d�S )z;Generate expression testing equality with HTML local names.r   ú{http://www.w3.org/1999/xhtml}r   z((el.local_name == z7) if el.in_html_document else (el.etree_element.tag == rN   r{   c                 s   s   � | ]}t |ƒV  qd S rz   ©rˆ   )r   Únr	   r	   r   rI   ¤  s   € zhtml_tag_eq.<locals>.<genexpr>c                 s   s   � | ]
}t d |› �ƒV  qdS )r¨   Nr©   )r   r.   r	   r	   r   rI   ¥  s
   € ÿ
ÿz((el.local_name in (z9)) if el.in_html_document else (el.etree_element.tag in (z))))r   r€   )Úlocal_namesÚtagÚnamesÚtagsr	   r	   r   r‘   œ  s   ÿÿ
þÿÿr‘   rz   )ÚreÚurllib.parser   Útinycss2.nthr   Úwebencodingsr   Ú r   r   ÚcompileÚfindallr   r   r
   r   r‘   r	   r	   r	   r   Ú<module>   s    
&  V