
     hJ                         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 j
        d          j        Zdd	Z G d
 d          Zd Zd ZdS )    N)urlparse)	parse_nth)ascii_lower   )parser)SelectorErrorz	[^ 	
]+c                 @    d t          j        | |          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                 ,    g | ]}t          |          S  )CompiledSelector.0selectors     O/var/www/html/Sam_Eipo/venv/lib/python3.11/site-packages/cssselect2/compiler.py
<listcomp>z)compile_selector_list.<locals>.<listcomp>   s0        	""      )r   parse)input
namespacess     r   compile_selector_listr      s/    " UJ77   r   c                       e Zd ZdZd ZdS )r   z&Abstract representation of a selector.c                 0   t          |j                  }|dk    | _        t          t          t
          d}t          d|z   |i           | _        |j        | _        |j	        | _	        d | _
        d | _        d | _        d | _        d | _        d| _        |j        }t!          |t"          j                  r|j        }|j        D ]}t!          |t"          j                  r|j        | _
        )t!          |t"          j                  r|j        | _        Pt!          |t"          j                  r|j        | _        |j        | _        t!          |t"          j                  r|j        | _        t!          |t"          j                  r|j        dk    rd| _        d 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_selectors         r   __init__zCompiledSelector.__init__'   s   :;;#s] 0& 
 

 /rBB	*6-< $"'*dF344 	:D#4 	3 	3O/6+<== 3)/OV-ABB 	3"1"<OV-EFF 3"1"<(7(H%%OV-EFF 3!0!:OV-EFF 3"'611.2D+	3 	3r   N)__name__
__module____qualname____doc__r:   r   r   r   r   r   %   s)        00!3 !3 !3 !3 !3r   r   c                 J   t          | t          j                  rt          | j                  }|dk    rdS |dk    r-| j        dv rd}n~| j        dv rd}nrt          d| j                  | j        dk    rd	| d
}nK| j        dk    rd| d}n9| j        dk    rd| d}n'| j        dk    rd	| d}nt          d| j                  t          | j                  }|dk    rdS |dk    r|S d| d| dS t          | t          j                  rmd t          t          | j
                  D             }t          |          dk    r	|d         }n+d|v rd}n$|r d                    d |D                       }nd}|S t          | t          j                  rBd d | j        D             D             }|sdS dd                    d |D                        dS t          | t          j                  rg }| j        D ]u}t          |j        j                  }|dk    r"|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%           vd                    |          S t          | t          j        t          j        f          r>d& d' | j        D             D             }|sdS d                    d( |D                       S t          | t          j                  r-| j        | j        k    r
d)| j        S d*| j        d+| j        dS t          | t          j                  r
d,| j        S t          | t          j                  r
| j        d-S t          | t          j                  r
d.| j        S t          | t          j                  r| j        | j        r^| j        | j         k    r tC          d0| j         d1| j                   }	njd0| j         d1| j          }
d0| j         d1| j         }d|
d+|d}	n<| j        | j         k    rtC          | j                  }	n| j         | j        }}
d|
d+|d}	| j"        }| j#        |	 d2S | j#        d3k    rd4|	 d5|S | j#        d6k    rGt          |$                                          dk    s|%                                |k    rdS |d7|	 d8S | j#        d9k    rd:|d;|d<z   d=|	 d>S | j#        d?k    r|r	d4|	 d@|dS dS | j#        dAk    r|r	d4|	 dB|dS dS | j#        dCk    r|r|dD|	 dES dS t          dF| j#                  tL          t          | t          j'                  rq| j        dGv r(tQ          dHdIdJ          }|dKz  }| j        dLk    r|dMz  }|S | j        dNk    rAtQ          dOdPdQdRdS          }tQ          dTdUdV          }tQ          dHdIdJ          }d| dW| dX| dYS | j        dZk    r-tQ          dOdPdQdRdS          }tQ          dTdUdV          }d| d[| d\S | j        d]k    r(tQ          dPdU          }tQ          dS          }d| d^| d_S | j        d`v rdS | j        dav rdbS | j        dck    rddS | j        dek    rdfS | j        dgk    r	 dhS | j        dik    r	 djS | j        dkk    rdlS | j        dmk    r	 dnS | j        dok    rdpS t          dq| j                  t          | t          j)                  r| j        drk    rg }ds | j*        D             }|r|+                    d          }|j,        dtk    r|                    |j-                   nB|j,        duk    r(|                    t]          |j"                             nt          dv          |r:|+                    d          }|j,        dtk    r|j"        dwk    rt          dv          |d                    dx |D                       S g }g }|}| j*        D ]4}|j,        dtk    r|j"        dyk    r||u r|}|                    |           5|rd                    dz t          j/        |          D                       }| j        d{k    rd|| d%}nK| j        d}k    rd~| d%}n9| j        dk    rd| d}n'| j        dk    rd| d}nt          dq| j                  |d| dz  }ni||u rt          d| j         d          | j        d{k    rd}n?| j        d}k    rd}n1| j        dk    rd}n#| j        dk    rd}nt          dq| j                  ta          |          }|t          d| j         d          |\  }}|dz
  }|dk    rd| d5| S d| d| d| d>S tc          tY          |           |           )zReturn 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 combinatorrA   zany((z) for el in el.ancestors)rB   znext(el is not None and (z) for el in [el.parent])rD   z) for el in [el.previous])rC   z!) for el in el.previous_siblings)(z) and ()c                     g | ]
}|d k    |S r@   r   r   exprs     r   r   z!_compile_node.<locals>.<listcomp>   s)       s{{ {{r   r   r   z and c              3   "   K   | ]
}d | dV  dS rE   rF   Nr   )r   es     r   	<genexpr>z _compile_node.<locals>.<genexpr>   s*      BBQABBBBBBr   c                     g | ]
}|d k    |S rH   r   rI   s     r   r   z!_compile_node.<locals>.<listcomp>   -        s{{  {{r   c                 6    g | ]}t          |j                  S r   r   r   r   s     r   r   z!_compile_node.<locals>.<listcomp>   3     8 8 8 h2338 8 8r   znot (z or c              3   "   K   | ]
}d | dV  dS rL   r   rI   s     r   rN   z _compile_node.<locals>.<genexpr>   s*      "K"K4;t;;;"K"K"K"K"K"Kr   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                     g | ]
}|d k    |S )r   r   rI   s     r   r   z!_compile_node.<locals>.<listcomp>   rP   r   c                 6    g | ]}t          |j                  S r   rR   r   s     r   r   z!_compile_node.<locals>.<listcomp>   rS   r   c              3   "   K   | ]
}d | dV  dS rL   r   rI   s     r   rN   z _compile_node.<locals>.<genexpr>   s*      CC4;t;;;CCCCCCr   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 in el.etree_element.attrib=zel.etree_element.get(z) == z~=z* in split_whitespace(el.etree_element.get(z, ""))z|=z
next(v == z) or      (v is not None and v.startswith(-z&))     for v in [el.etree_element.get(z)])z^=z, "").startswith(z$=z, "").endswith(z*=z in el.etree_element.get(z, "")zUnknown attribute operator)linkzany-link
local-linkaarear]   z. and el.etree_element.get("href") is not None r^   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)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                 $    g | ]}|j         d v|S ))
whitespacecomment)type)r   tokens     r   r   z!_compile_node.<locals>.<listcomp>B  s3     @ @ @:%>>> >>>r   r.   stringzInvalid arguments for :lang(),c              3   .   K   | ]}d |d|dz   dV  dS )zel.lang == z or el.lang.startswith(r\   rF   Nr   )r   r   s     r   rN   z _compile_node.<locals>.<genexpr>Q  sN       # # OdNNdSjNNN# # # # # #r   ofc              3   >   K   | ]}t          |j                  V  d S NrR   r   s     r   rN   z _compile_node.<locals>.<genexpr>`  sI       $A $A  "("677$A $A $A $A $A $Ar   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/next(r == 0 and n >= 0    for n, r in [divmod((z) - , )2r)   r   r*   r   left
combinatorr   r+   CompoundSelectormapr,   lenjoinNegationSelectorselector_listRelationalSelectorr   r   appendMatchesAnySelectorSpecificityAdjustmentSelectorr0   r&   r%   r1   r'   r/   r$   r-   r.   r2   r3   
lower_namereprvalueoperatorsplitstripNotImplementedErrorPseudoClassSelectorhtml_tag_eqFunctionalPseudoClassSelector	argumentspopr   lower_valuer   r   r   	TypeError)r   left_insider   r+   sub_expressionsr    relative_selector
expressionelementskeylowerr3   r   r   groupr_   re   langstokensr   nthr   current_listargumentcountresultbBs                               r   r   r   K   s    (F344 I2#HM22#3C"j00.$
220#$8(:MNNN  C''A;AAADD C'')K ) ) ) D  C''+K + + + D  C''I;IIIDD 4h6IJJJhn--C<<3c\\K -u,,T,,,,	Hf5	6	6 c2  0IJJ   1$$"1%DDO##DD 	<<BB/BBBBBDDD	Hf5	6	6 U2 8 8 ( 68 8 8  
  	3Nv{{"K"K?"K"K"KKKNNNN	Hf7	8	8 K2!)!7 	P 	P&'8'A'MNNJS   +s228"-44/"-44>"-444""#N:#N#N(#N#N#NOOOO{{?+++	H%v'KM 
N 
N z2 8 8 ( 68 8 8  
  	3{{CC?CCCCCC	Hf6	7	7 o2$(;;;>x':>>>HX%> H H/7/BH H HI 
Hf6	7	7 g2<h&8<<<	Hf2	3	3 d2%7777	Hf/	0	0 a2-8>---	Hf6	7	7 ^2)! N=H$777IH$6II(-IIJJCCL!3LLx7JLLEE 2EEhmEEDMeMMDMMMCC=H$777x}--CC"*"5x}4EMeMMDMMMCNE (::::"c))BsBBBBB"d**u{{}}%%**ekkmmu.D.D3 ! M MADM M MN "d**D D D=BS[D D;>D D DE "d** 2 2 2',2 2 23 3"d** 0 0 0%*0 0 01 3"d** #JJJJJJ3#0(2CE E E &%	Hf8	9	9 e2=>>>sFF33DDDD},,OOK]i'''8ZC CE
J
CCEC00AFE F FF F F F FG
 ]j(('8ZC CE
J
CCENE N NN N NO ]i''44E **FNE N N N N NO
 ]       3]///&&]m++"?]l**;;]o--=> > ]n,,AB B ]l**00]n,,@A A ]g%%EE 6FFF	HfB	C	C c2=F""E@ @#+#5@ @ @F  M

1:((LL!23333Z8++LLU[!9!9::::'(GHHH M"JJqMMEzW,,1C1C+,KLLL  M ;; # #!# # # # # # CML$. . .=G++$0F0F#s**'4 ##H---- -O|| $A $A$*L$?$?$A $A $A A A =K//LDLLL E]&666+"&+ + + E ]m33N$(N N N E
 ]&888N %)N N N E ((>NNN99999=00'C(-CCCE E E=K//&EE]&666CEE]m33@ E ]&888@ E ((>NNNs^^F~#?hm???A A ADAq
 AAAvv*5**q***G05G G;<G G@AG G GH
 X111r   c                      t          |           dk    rd| d         z   }d| d         d|dS 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 == rU   r   c              3   4   K   | ]}t          |          V  d S r   r   r   ns     r   rN   zhtml_tag_eq.<locals>.<genexpr>  s(      77a$q''777777r   c              3   :   K   | ]}t          d |z             V  dS )r   Nr   r   s     r   rN   zhtml_tag_eq.<locals>.<genexpr>  sI       M M;<D1A566M M M M M Mr   z((el.local_name in (z9)) if el.in_html_document else (el.etree_element.tag in (z))))r   r   )local_namestagnamestagss       r   r   r     s    
;1.Q?7+a. 7 7-07 7 7	8 		77;77777yy M M@KM M M M M85 8 8.28 8 8	9r   r   )reurllib.parser   tinycss2.nthr   webencodingsr    r   r   compilefindallr   r   r   r   r   r   r   r   <module>r      s    				 ! ! ! ! ! ! " " " " " " $ $ $ $ $ $       ! ! ! ! ! ! 2:o..6    .#3 #3 #3 #3 #3 #3 #3 #3LW2 W2 W2t
9 9 9 9 9r   